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

69 lines
2.1 KiB
JavaScript

const mongoose = require("mongoose");
const request = require("supertest");
const { app } = require("../app");
const Menu = require("../src/models/menuModel");
const connectDB = require("../src/config/database");
describe("Pengujian Integrasi - API Menu", () => {
beforeAll(async () => {
await connectDB();
await Menu.deleteMany({}); // Pastikan database dalam keadaan kosong sebelum pengujian
});
beforeEach(async () => {
await Menu.deleteMany({}); // Hapus semua data sebelum setiap pengujian
});
afterAll(async () => {
await mongoose.connection.close(); // Tutup koneksi database setelah semua pengujian selesai
});
it("harus berhasil membuat item menu baru melalui API", async () => {
const newItem = {
name: "Pizza",
description: "Pizza keju yang lezat",
price: 12.99,
category: "main",
isAvailable: true,
};
const res = await request(app).post("/createMenu").send(newItem);
expect(res.status).toBe(201);
expect(res.body.name).toBe(newItem.name);
expect(res.body.price).toBe(newItem.price);
});
it("harus mengambil semua item menu melalui API", async () => {
await Menu.create([
{ name: "Burger", price: 9.99, category: "main", isAvailable: true },
{ name: "Salad", price: 5.99, category: "appetizer", isAvailable: true },
]);
const res = await request(app).get("/menu");
expect(res.status).toBe(200);
expect(res.body.length).toBe(2);
});
it("harus mengambil item menu berdasarkan kategori melalui API", async () => {
await Menu.create([
{ name: "Steak", price: 19.99, category: "main", isAvailable: true },
{ name: "Soda", price: 2.99, category: "beverage", isAvailable: true },
]);
const res = await request(app).get("/menu/main");
expect(res.status).toBe(200);
expect(res.body.length).toBe(1);
expect(res.body[0].name).toBe("Steak");
});
it("harus mengembalikan 404 jika kategori tidak ditemukan", async () => {
const res = await request(app).get("/menu/dessert");
expect(res.status).toBe(404);
expect(res.body.error).toBe("Menu with category 'dessert' not found");
});
});