105 lines
3.2 KiB
JavaScript
105 lines
3.2 KiB
JavaScript
|
|
const mongoose = require("mongoose");
|
||
|
|
const connectDB = require("../../src/config/database");
|
||
|
|
const errorHandler = require("../../src/middleware/errorHandler");
|
||
|
|
|
||
|
|
const mockRequest = (body = {}, params = {}) => ({
|
||
|
|
body,
|
||
|
|
params,
|
||
|
|
});
|
||
|
|
|
||
|
|
const mockResponse = () => {
|
||
|
|
const res = {};
|
||
|
|
res.status = jest.fn().mockReturnValue(res);
|
||
|
|
res.json = jest.fn().mockReturnValue(res);
|
||
|
|
return res;
|
||
|
|
};
|
||
|
|
|
||
|
|
describe("Modul 1 - Unit Tests", () => {
|
||
|
|
beforeEach(() => {
|
||
|
|
jest.spyOn(console, 'log').mockImplementation(() => { });
|
||
|
|
jest.clearAllMocks();
|
||
|
|
console.error = jest.fn();
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("Error Handler Middleware", () => {
|
||
|
|
test("harus menangani error dengan status code yang disediakan", () => {
|
||
|
|
const err = new Error("Bad Request Error");
|
||
|
|
err.statusCode = 400;
|
||
|
|
const req = mockRequest();
|
||
|
|
const res = mockResponse();
|
||
|
|
const next = jest.fn();
|
||
|
|
|
||
|
|
errorHandler(err, req, res, next);
|
||
|
|
|
||
|
|
expect(console.error).toHaveBeenCalled();
|
||
|
|
expect(res.status).toHaveBeenCalledWith(400);
|
||
|
|
expect(res.json).toHaveBeenCalledWith({
|
||
|
|
success: false,
|
||
|
|
error: "Bad Request Error",
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
test("harus menggunakan default status code 500 jika tidak disediakan", () => {
|
||
|
|
const err = new Error("Server Error Without Status Code");
|
||
|
|
const req = mockRequest();
|
||
|
|
const res = mockResponse();
|
||
|
|
const next = jest.fn();
|
||
|
|
|
||
|
|
errorHandler(err, req, res, next);
|
||
|
|
|
||
|
|
expect(console.error).toHaveBeenCalled();
|
||
|
|
expect(res.status).toHaveBeenCalledWith(500);
|
||
|
|
expect(res.json).toHaveBeenCalledWith({
|
||
|
|
success: false,
|
||
|
|
error: "Server Error Without Status Code",
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("Custom Error Creation", () => {
|
||
|
|
test("harus dapat membuat custom error dengan status code", () => {
|
||
|
|
const createCustomError = (message, statusCode) => {
|
||
|
|
const error = new Error(message);
|
||
|
|
error.statusCode = statusCode;
|
||
|
|
return error;
|
||
|
|
};
|
||
|
|
|
||
|
|
const notFoundError = createCustomError("Resource not found", 404);
|
||
|
|
const validationError = createCustomError("Validation failed", 400);
|
||
|
|
|
||
|
|
expect(notFoundError).toBeInstanceOf(Error);
|
||
|
|
expect(notFoundError.message).toBe("Resource not found");
|
||
|
|
expect(notFoundError.statusCode).toBe(404);
|
||
|
|
|
||
|
|
expect(validationError).toBeInstanceOf(Error);
|
||
|
|
expect(validationError.message).toBe("Validation failed");
|
||
|
|
expect(validationError.statusCode).toBe(400);
|
||
|
|
});
|
||
|
|
|
||
|
|
test("harus dapat meneruskan error ke middleware error handler", () => {
|
||
|
|
const err = new Error("Test Error");
|
||
|
|
err.statusCode = 422;
|
||
|
|
const req = mockRequest();
|
||
|
|
const res = mockResponse();
|
||
|
|
const next = jest.fn();
|
||
|
|
|
||
|
|
next(err);
|
||
|
|
errorHandler(err, req, res, next);
|
||
|
|
|
||
|
|
expect(next).toHaveBeenCalledWith(err);
|
||
|
|
expect(res.status).toHaveBeenCalledWith(422);
|
||
|
|
expect(res.json).toHaveBeenCalledWith({
|
||
|
|
success: false,
|
||
|
|
error: "Test Error",
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe("Express Middleware Structure", () => {
|
||
|
|
test("harus memiliki struktur errorHandler yang benar", () => {
|
||
|
|
expect(errorHandler).toBeInstanceOf(Function);
|
||
|
|
expect(errorHandler.length).toBe(4);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|