Billie/storage/projects/asynchronous-programming/tests-backup/praktikum2Unit.test.js
2025-05-14 09:03:05 +07:00

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",
});
});
});
});