package com.drinkool.entities; import static org.junit.jupiter.api.Assertions.*; import io.quarkus.test.junit.QuarkusTest; import jakarta.transaction.Transactional; import org.junit.jupiter.api.Test; @QuarkusTest public class MenuItemEntityTest { @Test @Transactional public void testCreateMenuItemSuccessfully() { // 1. Chuẩn bị dữ liệu (Arrange) String name = "Cà phê sữa đá"; double price = 29000.0; // 2. Thực thi (Act) - Gọi hàm tĩnh create MenuItemEntity menuItem = MenuItemEntity.create(name, price); // 3. Kiểm chứng (Assert) assertNotNull(menuItem, "Thực thể MenuItem không được null"); assertEquals(name, menuItem.name, "Tên món ăn không khớp"); assertEquals(price, menuItem.price, "Giá món ăn không khớp"); assertNotNull(menuItem.id, "ID phải được tự động sinh ra sau khi persist"); assertTrue(menuItem.ingredients.isEmpty(), "Danh sách nguyên liệu ban đầu phải rỗng"); } @Test @Transactional public void testAddIngredientSuccessfully() { // 1. Chuẩn bị dữ liệu (Arrange) // Tạo món ăn MenuItemEntity menuItem = MenuItemEntity.create("Trà sữa trân châu", 45000.0); // Tạo nguyên liệu trong kho (Dùng đúng hàm add() của EateryInventoryItemEntity như đã fix) EateryInventoryItemEntity inventoryItem = EateryInventoryItemEntity.create("Trân châu đen", 50, "kg"); double requiredQty = 0.2; // Cần 0.2 kg trân châu cho 1 ly // 2. Thực thi (Act) - Thêm nguyên liệu vào món ăn menuItem.addIngredient(inventoryItem, requiredQty); // 3. Kiểm chứng (Assert) // Kiểm tra danh sách nguyên liệu của món ăn assertFalse(menuItem.ingredients.isEmpty(), "Danh sách nguyên liệu không được rỗng sau khi thêm"); assertEquals(1, menuItem.ingredients.size(), "Phải có đúng 1 nguyên liệu trong danh sách"); // Lấy phần tử nguyên liệu đầu tiên ra để kiểm tra chi tiết các liên kết MenuItemIngredientEntity addedIngredient = menuItem.ingredients.get(0); assertNotNull(addedIngredient.id, "ID của Entity trung gian phải được sinh ra"); assertEquals(menuItem.id, addedIngredient.menuItem.id, "Khóa ngoại MenuItem bị sai"); assertEquals(inventoryItem.id, addedIngredient.inventoryItem.id, "Khóa ngoại InventoryItem bị sai"); assertEquals(requiredQty, addedIngredient.requiredQuantity, "Định lượng (requiredQty) không khớp"); } }