Billie/storage/projects/asynchronous-programming/tests-backup/praktikum3Integration.test.js

252 lines
8.3 KiB
JavaScript
Raw Permalink Normal View History

2025-05-14 02:03:05 +00:00
const mongoose = require("mongoose");
const request = require("supertest");
const { app } = require("../app");
const Meja = require("../src/models/mejaModel");
const connectDB = require("../src/config/database");
describe("Pengujian Integrasi - API Meja", () => {
beforeAll(async () => {
await connectDB();
await Meja.deleteMany({}); // Pastikan database dalam keadaan kosong sebelum pengujian
});
beforeEach(async () => {
await Meja.deleteMany({}); // Hapus semua data sebelum setiap pengujian
});
afterAll(async () => {
await mongoose.connection.close(); // Tutup koneksi database setelah semua pengujian selesai
});
describe("POST add/meja", () => {
test("Harus berhasil membuat data meja baru", async () => {
const dataMeja = {
tableNumber: 1,
capacity: 4
};
const response = await request(app)
.post("/add/meja")
.send(dataMeja);
expect(response.status).toBe(201);
expect(response.body.success).toBe(true);
expect(response.body.data).toHaveProperty("tableNumber", 1);
expect(response.body.data).toHaveProperty("capacity", 4);
expect(response.body.data).toHaveProperty("status", "available");
});
test("Harus gagal ketika data tableNumber tidak disediakan", async () => {
const dataMeja = {
capacity: 4
};
const response = await request(app)
.post("/add/meja")
.send(dataMeja);
expect(response.status).toBe(400);
expect(response.body.success).toBe(false);
expect(response.body.error).toBeDefined();
});
test("Harus gagal ketika nomor meja sudah ada", async () => {
// Buat meja pertama
await Meja.create({
tableNumber: 5,
capacity: 4
});
// Coba buat meja dengan nomor yang sama
const response = await request(app)
.post("/add/meja")
.send({
tableNumber: 5,
capacity: 2
});
expect(response.status).toBe(400);
expect(response.body.success).toBe(false);
});
});
describe("GET /meja", () => {
test("Harus mendapatkan daftar meja kosong", async () => {
const response = await request(app).get("/meja");
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(response.body.data).toEqual([]);
});
test("Harus mendapatkan semua data meja", async () => {
// Tambahkan beberapa meja untuk pengujian
await Meja.create([
{ tableNumber: 1, capacity: 2 },
{ tableNumber: 2, capacity: 4 },
{ tableNumber: 3, capacity: 6 }
]);
const response = await request(app).get("/meja");
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(response.body.data.length).toBe(3);
expect(response.body.data[0]).toHaveProperty("tableNumber", 1);
expect(response.body.data[1]).toHaveProperty("tableNumber", 2);
expect(response.body.data[2]).toHaveProperty("tableNumber", 3);
});
});
describe("PUT /meja/:tableNumber/reserve", () => {
test("Harus berhasil memesan meja yang tersedia", async () => {
// Buat data meja terlebih dahulu
await Meja.create({
tableNumber: 10,
capacity: 4,
status: "available",
});
const response = await request(app)
.put("/meja/10/reserve")
.send({ customerName: "John Doe" }); // Tambahkan customerName
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(response.body.data).toHaveProperty("tableNumber", 10);
expect(response.body.data).toHaveProperty("status", "reserved");
expect(response.body.data).toHaveProperty("customerName", "John Doe"); // Verifikasi customerName
});
test("Harus gagal memesan meja yang tidak ada", async () => {
const response = await request(app)
.put("/meja/99/reserve")
.send({ customerName: "John Doe" }); // Tambahkan customerName
expect(response.status).toBe(404);
expect(response.body.success).toBe(false);
expect(response.body.error).toBe("Meja tidak tersedia");
});
test("Harus gagal memesan meja yang sudah dipesan", async () => {
// Buat meja yang sudah dipesan
await Meja.create({
tableNumber: 11,
capacity: 4,
status: "reserved",
});
const response = await request(app)
.put("/meja/11/reserve")
.send({ customerName: "John Doe" }); // Tambahkan customerName
expect(response.status).toBe(404);
expect(response.body.success).toBe(false);
expect(response.body.error).toBe("Meja tidak tersedia");
});
test("Harus gagal memesan meja jika customerName tidak disediakan", async () => {
// Buat data meja terlebih dahulu
await Meja.create({
tableNumber: 14,
capacity: 4,
status: "available",
});
const response = await request(app)
.put("/meja/14/reserve")
.send({}); // Tidak menyertakan customerName
expect(response.status).toBe(400);
expect(response.body.success).toBe(false);
expect(response.body.error).toBe("Nama pelanggan harus diisi");
});
});
describe("PUT /meja/:tableNumber/cancel", () => {
test("Harus berhasil membatalkan reservasi meja", async () => {
// Buat meja yang sudah dipesan
await Meja.create({
tableNumber: 12,
capacity: 6,
status: "reserved",
customerName: "John Doe", // Tambahkan customerName
});
const response = await request(app)
.put("/meja/12/cancel")
.send({});
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(response.body.data).toHaveProperty("tableNumber", 12);
expect(response.body.data).toHaveProperty("status", "available");
expect(response.body.message).toBe("Reservation for table 12 has been cancelled");
});
test("Harus gagal membatalkan reservasi meja yang tidak ada", async () => {
const response = await request(app)
.put("/meja/99/cancel")
.send({});
expect(response.status).toBe(404);
expect(response.body.success).toBe(false);
expect(response.body.error).toBe("Table not found or not currently reserved");
});
test("Harus gagal membatalkan reservasi meja dengan status available", async () => {
// Buat meja dengan status available
await Meja.create({
tableNumber: 13,
capacity: 4,
status: "available",
});
const response = await request(app)
.put("/meja/13/cancel")
.send({});
expect(response.status).toBe(404);
expect(response.body.success).toBe(false);
expect(response.body.error).toBe("Table not found or not currently reserved");
});
});
describe("Skenario Alur Pengelolaan Meja", () => {
test("Harus menjalankan alur lengkap: membuat, memesan, dan membatalkan reservasi meja", async () => {
// 1. Membuat meja baru
const createResponse = await request(app)
.post("/add/meja")
.send({ tableNumber: 20, capacity: 4 });
expect(createResponse.status).toBe(201);
expect(createResponse.body.data).toHaveProperty("tableNumber", 20);
expect(createResponse.body.data).toHaveProperty("status", "available");
// 2. Memesan meja
const reserveResponse = await request(app)
.put("/meja/20/reserve")
.send({ customerName: "John Doe" }); // Tambahkan customerName
expect(reserveResponse.status).toBe(200);
expect(reserveResponse.body.data).toHaveProperty("status", "reserved");
expect(reserveResponse.body.data).toHaveProperty("customerName", "John Doe"); // Verifikasi customerName
// 3. Membatalkan reservasi
const cancelResponse = await request(app)
.put("/meja/20/cancel")
.send({});
expect(cancelResponse.status).toBe(200);
expect(cancelResponse.body.data).toHaveProperty("status", "available");
// 4. Verifikasi status akhir
const getResponse = await request(app).get("/meja");
expect(getResponse.status).toBe(200);
expect(getResponse.body.data.length).toBe(1);
expect(getResponse.body.data[0]).toHaveProperty("tableNumber", 20);
expect(getResponse.body.data[0]).toHaveProperty("status", "available");
});
});
});