252 lines
8.3 KiB
JavaScript
252 lines
8.3 KiB
JavaScript
|
|
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");
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|