90 lines
2.4 KiB
JavaScript
90 lines
2.4 KiB
JavaScript
const Menu = require("../src/models/menuModel");
|
|
const menuController = require("../src/controllers/menuController");
|
|
|
|
// Mock model Menu
|
|
jest.mock("../src/models/menuModel");
|
|
|
|
describe("Pengujian Unit - Controller Menu", () => {
|
|
let req, res;
|
|
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
|
|
req = {
|
|
body: {
|
|
name: "Item Uji",
|
|
description: "Deskripsi Uji",
|
|
price: 9.99,
|
|
category: "main",
|
|
isAvailable: true,
|
|
},
|
|
params: {
|
|
category: "main",
|
|
},
|
|
};
|
|
|
|
res = {
|
|
status: jest.fn().mockReturnThis(),
|
|
json: jest.fn(),
|
|
};
|
|
});
|
|
|
|
// ✅ Pengujian Pembuatan Item Menu
|
|
describe("createMenuItem", () => {
|
|
it("harus berhasil membuat item menu", async () => {
|
|
const savedItem = { ...req.body, _id: "123" };
|
|
Menu.mockImplementation(() => ({
|
|
save: jest.fn().mockResolvedValue(savedItem),
|
|
}));
|
|
|
|
await menuController.createMenuItem(req, res);
|
|
|
|
expect(res.status).toHaveBeenCalledWith(201);
|
|
expect(res.json).toHaveBeenCalledWith(savedItem);
|
|
});
|
|
});
|
|
|
|
// ✅ Pengujian Mendapatkan Semua Item Menu
|
|
describe("getAllMenuItems", () => {
|
|
it("harus mengembalikan semua item menu dengan sukses", async () => {
|
|
const items = [
|
|
{ name: "Item 1", price: 9.99 },
|
|
{ name: "Item 2", price: 14.99 },
|
|
];
|
|
Menu.find.mockResolvedValue(items);
|
|
|
|
await menuController.getAllMenuItems(req, res);
|
|
|
|
expect(Menu.find).toHaveBeenCalledWith({});
|
|
expect(res.json).toHaveBeenCalledWith(items);
|
|
});
|
|
});
|
|
|
|
// ✅ Pengujian Mendapatkan Menu Berdasarkan Kategori
|
|
describe("getMenuByCategory", () => {
|
|
it("harus mengembalikan item untuk kategori yang valid", async () => {
|
|
const items = [
|
|
{ name: "Main Course 1", category: "main" },
|
|
{ name: "Main Course 2", category: "main" },
|
|
];
|
|
Menu.find.mockResolvedValue(items);
|
|
|
|
await menuController.getMenuByCategory(req, res);
|
|
|
|
expect(Menu.find).toHaveBeenCalledWith({ category: "main" });
|
|
expect(res.json).toHaveBeenCalledWith(items);
|
|
});
|
|
|
|
it("harus menangani kategori yang tidak ditemukan", async () => {
|
|
Menu.find.mockResolvedValue([]);
|
|
|
|
await menuController.getMenuByCategory(req, res);
|
|
|
|
expect(res.status).toHaveBeenCalledWith(404);
|
|
expect(res.json).toHaveBeenCalledWith({
|
|
error: "Menu with category 'main' not found",
|
|
});
|
|
});
|
|
});
|
|
});
|