feature/danh-dev-new-branch-yeu-cau-viet-anh (#14)
Release package / release (push) Successful in 10m45s

Co-authored-by: TakahashiNg <83152264+TakahashiNguyen@users.noreply.github.com>
Co-authored-by: TranHuuDanh <tranhuudanh@demonkernel.io.vn>
Co-authored-by: TakahashiNguyen <takahashi.ng@icloud.com>
Reviewed-on: #14
Reviewed-by: TakahashiNguyen <takahashi.ng@icloud.com>
Co-authored-by: TranHuuDanh <tranhuudanh@noreply.localhost>
Co-committed-by: TranHuuDanh <tranhuudanh@noreply.localhost>
This commit was merged in pull request #14.
This commit is contained in:
2026-04-01 08:20:41 +00:00
committed by TakahashiNguyen
parent bcbda39ed4
commit 5a7b70145c
14 changed files with 448 additions and 133 deletions
@@ -47,7 +47,7 @@ public class MenuItemEntity extends BaseEntity {
menu.name = name;
menu.price = price;
menu.persist();
return menu;
@@ -0,0 +1,44 @@
package com.drinkool.entities;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.transaction.Transactional;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@QuarkusTest
public class InventoryItemEntityTest {
@Test
@Transactional
public void testCreateInventoryItem() {
// 1. Chuẩn bị dữ liệu (Lưu ý: Không còn biến quantity nữa)
String name = "Trà sữa truyền thống";
String unit = "Ly";
// 2. Gọi hàm static create (Không dùng new hay hàm add nữa)
// Hàm này vừa tạo object, vừa gán data, vừa gọi persist() luôn
InventoryItemEntity item = InventoryItemEntity.create(name, unit);
// 3. Kiểm chứng
Assertions.assertNotNull(item, "Entity tạo ra không được null");
Assertions.assertEquals(name, item.name, "Tên không khớp");
Assertions.assertEquals(unit, item.unit, "Đơn vị không khớp");
Assertions.assertNotNull(item.id, "ID phải được sinh ra tự động sau khi persist");
}
@Test
@Transactional
public void testCreateWithDefaultUnit() {
// 1. Chuẩn bị dữ liệu
String name = "Trân châu đen";
// 2. Gọi hàm static create rút gọn (chỉ truyền name, unit sẽ tự là "unit")
InventoryItemEntity item = InventoryItemEntity.create(name);
// 3. Kiểm chứng
Assertions.assertNotNull(item, "Entity tạo ra không được null");
Assertions.assertEquals(name, item.name, "Tên không khớp");
Assertions.assertEquals("unit", item.unit, "Unit mặc định phải là 'unit'");
Assertions.assertNotNull(item.id, "ID phải được sinh ra tự động sau khi persist");
}
}
@@ -0,0 +1,58 @@
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");
}
}
@@ -9,50 +9,48 @@ import org.junit.jupiter.api.Test;
@QuarkusTest
public class MenuItemIngredientEntityTest {
@Test
@Transactional
void testCreate_ShouldPersistIngredientSuccessfully() {
// 1. Chuẩn bị dữ liệu giả định
@Test
@Transactional
void testCreate_ShouldPersistIngredientSuccessfully() {
// 1. Chuẩn bị dữ liệu giả định
String menuItemName = "Milk Tea";
double menuItemPrice = 40;
String menuItemName = "Milk Tea";
double menuItemPrice = 40;
MenuItemEntity menuItem = MenuItemEntity.create(
menuItemName,
menuItemPrice
);
MenuItemEntity menuItem = MenuItemEntity.create(
menuItemName,
menuItemPrice
);
String inventoryItemName = "Water";
double inventoryItemQuantity = 10;
String inventoryItemUnit = "l";
String inventoryItemName = "Water";
int inventoryItemQuantity = 10; // Đổi thành int cho khớp với kiểu của EateryInventoryItemEntity
String inventoryItemUnit = "l";
EateryInventoryItemEntity inventoryItem = EateryInventoryItemEntity.create(
inventoryItemName,
inventoryItemQuantity,
inventoryItemUnit
);
// SỬA Ở ĐÂY: Khởi tạo bằng new và dùng hàm add() đúng như cấu trúc class của bạn
EateryInventoryItemEntity inventoryItem = EateryInventoryItemEntity.create(inventoryItemName, inventoryItemQuantity, inventoryItemUnit);
// Lưu ý: Hàm add() của bạn đã có sẵn lệnh this.persist() bên trong nên không cần gọi lại nữa!
double requiredQuantity = 0.5;
double requiredQuantity = 0.5;
// 2. Gọi hàm static create cần test
MenuItemIngredientEntity createdIngredient =
MenuItemIngredientEntity.create(
menuItem,
inventoryItem,
requiredQuantity
);
// 2. Gọi hàm static create cần test
MenuItemIngredientEntity createdIngredient =
MenuItemIngredientEntity.create(
menuItem,
inventoryItem,
requiredQuantity
);
// 3. Kiểm tra kết quả
assertNotNull(createdIngredient.id, "ID không được null sau khi persist");
// 3. Kiểm tra kết quả
assertNotNull(createdIngredient.id, "ID không được null sau khi persist");
// Truy vấn lại từ Database để đảm bảo dữ liệu đã được lưu đúng
MenuItemIngredientEntity savedEntity = MenuItemIngredientEntity.findById(
createdIngredient.id
);
// Truy vấn lại từ Database để đảm bảo dữ liệu đã được lưu đúng
MenuItemIngredientEntity savedEntity = MenuItemIngredientEntity.findById(
createdIngredient.id
);
assertNotNull(savedEntity);
assertEquals(menuItem.id, savedEntity.menuItem.id);
assertEquals(inventoryItem.id, savedEntity.inventoryItem.id);
assertEquals(requiredQuantity, savedEntity.requiredQuantity);
}
}
assertNotNull(savedEntity);
assertEquals(menuItem.id, savedEntity.menuItem.id);
assertEquals(inventoryItem.id, savedEntity.inventoryItem.id);
assertEquals(requiredQuantity, savedEntity.requiredQuantity);
}
}
@@ -0,0 +1,35 @@
package com.drinkool.entities;
import com.drinkool.models.ReviewModel;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.transaction.Transactional;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.UUID;
@QuarkusTest
public class ReviewEntityTest {
@Test
@Transactional
public void testCreateReview() {
// 1. Chuẩn bị dữ liệu (Arrange)
UUID testReviewerId = UUID.randomUUID();
UUID testEateryId = UUID.randomUUID();
// Truyền trực tiếp rating và comment vào constructor của ReviewModel
ReviewModel inputModel = new ReviewModel(5, "Món ăn tuyệt vời!");
// 2. Thực thi (Act)
ReviewEntity savedReview = ReviewEntity.create(testReviewerId, testEateryId, inputModel);
// 3. Kiểm chứng (Assert)
Assertions.assertNotNull(savedReview, "Thực thể Review sau khi tạo không được null");
Assertions.assertEquals(testReviewerId, savedReview.reviewerId, "Reviewer ID không khớp");
Assertions.assertEquals(testEateryId, savedReview.eateryId, "Eatery ID không khớp");
Assertions.assertEquals(5, savedReview.rating, "Rating không khớp");
Assertions.assertEquals("Món ăn tuyệt vời!", savedReview.comment, "Comment không khớp");
Assertions.assertNotNull(savedReview.id, "ID phải được tự động sinh ra sau khi persist");
}
}
@@ -29,4 +29,6 @@ public class InventoryServiceTest {
assertEquals(1, InventoryItemEntity.find("name", name).count());
}
}
@@ -35,7 +35,7 @@ public class ReviewServiceTest {
.body(input)
.when()
.post("/api/review/create")
.then();
.then().statusCode(201);
assertEquals(1, ReviewEntity.find("reviewerId", reviewerId).count());
}
@@ -7,4 +7,4 @@ quarkus.http.host=0.0.0.0
%test.quarkus.datasource.jdbc.url=jdbc:h2:mem:test_db;DB_CLOSE_DELAY=-1
## Orm
%test.quarkus.hibernate-orm.database.generation=drop-and-create
%test.quarkus.hibernate-orm.database.generation=drop-and-create