diff --git a/account-service/src/test/java/com/drinkool/entities/CustomerEntityTest.java b/account-service/src/test/java/com/drinkool/entities/CustomerEntityTest.java index 2bac81d..a21454a 100644 --- a/account-service/src/test/java/com/drinkool/entities/CustomerEntityTest.java +++ b/account-service/src/test/java/com/drinkool/entities/CustomerEntityTest.java @@ -10,37 +10,47 @@ import org.junit.jupiter.api.Test; @QuarkusTest public class CustomerEntityTest { - @Inject - EntityManager entityManager; + @Inject + EntityManager entityManager; - @Test - @Transactional - public void testCustomerPersistence() { - // 1. Khởi tạo đúng Entity (CustomerEntity chứ không phải CustomerEntityTest) - CustomerEntity customer = new CustomerEntity(); - - // Gán đúng biến name, phone và hashedPassword (các trường kế thừa từ UserModel) - customer.name = "Nguyen Van A"; - customer.phone = "+84987654321"; - customer.hashedPassword = "dummy_hashed_password"; - - // 2. Lưu vào DB - entityManager.persist(customer); - entityManager.flush(); - entityManager.clear(); + @Test + @Transactional + public void testCustomerPersistence() { + // 1. Khởi tạo đúng Entity (CustomerEntity chứ không phải CustomerEntityTest) + CustomerEntity customer = new CustomerEntity(); - // 3. Truy vấn lại để kiểm tra (Sửa lại class map của query thành CustomerEntity) - var query = entityManager.createQuery( - "SELECT c FROM CustomerEntity c WHERE c.phone = :phone", CustomerEntity.class); - query.setParameter("phone", "+84987654321"); - - // Nhận kết quả về đúng kiểu CustomerEntity - CustomerEntity savedCustomer = query.getSingleResult(); + // Gán đúng biến name, phone và hashedPassword (các trường kế thừa từ UserModel) + customer.name = "Nguyen Van A"; + customer.phone = "+84987654321"; + customer.hashedPassword = "dummy_hashed_password"; - // 4. Assert (Kiểm chứng) - Assertions.assertNotNull(savedCustomer, "Customer không được null"); - Assertions.assertEquals("Nguyen Van A", savedCustomer.name, "Tên không khớp"); - Assertions.assertEquals("+84987654321", savedCustomer.phone, "Số điện thoại không khớp"); - Assertions.assertNotNull(savedCustomer.id, "ID chưa được sinh ra"); - } -} \ No newline at end of file + // 2. Lưu vào DB + entityManager.persist(customer); + entityManager.flush(); + entityManager.clear(); + + // 3. Truy vấn lại để kiểm tra (Sửa lại class map của query thành CustomerEntity) + var query = entityManager.createQuery( + "SELECT c FROM CustomerEntity c WHERE c.phone = :phone", + CustomerEntity.class + ); + query.setParameter("phone", "+84987654321"); + + // Nhận kết quả về đúng kiểu CustomerEntity + CustomerEntity savedCustomer = query.getSingleResult(); + + // 4. Assert (Kiểm chứng) + Assertions.assertNotNull(savedCustomer, "Customer không được null"); + Assertions.assertEquals( + "Nguyen Van A", + savedCustomer.name, + "Tên không khớp" + ); + Assertions.assertEquals( + "+84987654321", + savedCustomer.phone, + "Số điện thoại không khớp" + ); + Assertions.assertNotNull(savedCustomer.id, "ID chưa được sinh ra"); + } +} diff --git a/account-service/src/test/java/com/drinkool/models/UserModelTest.java b/account-service/src/test/java/com/drinkool/models/UserModelTest.java index 0e38f93..6073c7d 100644 --- a/account-service/src/test/java/com/drinkool/models/UserModelTest.java +++ b/account-service/src/test/java/com/drinkool/models/UserModelTest.java @@ -17,120 +17,134 @@ class TestUserEntity extends UserModel {} @QuarkusTest public class UserModelTest { - // Helper method để tạo số điện thoại ngẫu nhiên hợp lệ - private String generateValidPhone() { - return "+8477" + String.format("%07d", (new Random()).nextInt(10000000)); - } + // Helper method để tạo số điện thoại ngẫu nhiên hợp lệ + private String generateValidPhone() { + return "+8477" + String.format("%07d", (new Random()).nextInt(10000000)); + } - // 1. Test case: Đăng ký thành công (đầy đủ tham số) - @Test - @Transactional - public void testSignupSuccess() { - TestUserEntity user = new TestUserEntity(); - String phone = generateValidPhone(); - String password = "02092006Danh"; - - user.signup("Tran Huu Danh", phone, password); + // 1. Test case: Đăng ký thành công (đầy đủ tham số) + @Test + @Transactional + public void testSignupSuccess() { + TestUserEntity user = new TestUserEntity(); + String phone = generateValidPhone(); + String password = "02092006Danh"; - assertNotNull(user.id, "ID not null after persist"); - assertEquals("Tran Huu Danh", user.name); - assertEquals(phone, user.phone); - assertNotNull(user.hashedPassword, "Password phải được hash"); + user.signup("Tran Huu Danh", phone, password); - TestUserEntity savedUser = TestUserEntity.find("phone", phone).firstResult(); - assertNotNull(savedUser, "Phải tìm thấy user trong database"); - } + assertNotNull(user.id, "ID not null after persist"); + assertEquals("Tran Huu Danh", user.name); + assertEquals(phone, user.phone); + assertNotNull(user.hashedPassword, "Password phải được hash"); - // 2. Test case: Đăng ký thành công (chỉ dùng số điện thoại) - @Test - @Transactional - public void testSignupOneParamSuccess() { - TestUserEntity user = new TestUserEntity(); - String phone = generateValidPhone(); - - user.signup(phone); + TestUserEntity savedUser = TestUserEntity.find( + "phone", + phone + ).firstResult(); + assertNotNull(savedUser, "Phải tìm thấy user trong database"); + } - assertNotNull(user.id, "ID not null after persist"); - assertEquals(phone, user.name, "Tên mặc định phải là số điện thoại"); - assertEquals(phone, user.phone); - assertNotNull(user.hashedPassword, "Password tự động phải được tạo và hash"); - } + // 2. Test case: Đăng ký thành công (chỉ dùng số điện thoại) + @Test + @Transactional + public void testSignupOneParamSuccess() { + TestUserEntity user = new TestUserEntity(); + String phone = generateValidPhone(); - // 3. Test case: Đăng ký thất bại do số điện thoại đã tồn tại - @Test - @Transactional - public void testSignupFailExistedUser() { - String phone = generateValidPhone(); - String password = "tungtungtungshahua"; - - // Tạo user đầu tiên - TestUserEntity existUser = new TestUserEntity(); - existUser.signup("Nguyen Thanh Quy", phone, password); + user.signup(phone); - // Tạo user thứ hai với cùng số điện thoại - TestUserEntity newUser = new TestUserEntity(); - BadRequestException exception = assertThrows(BadRequestException.class, () -> { - newUser.signup("Nguyen Viet Anh", phone, "02092006Anh"); - }); + assertNotNull(user.id, "ID not null after persist"); + assertEquals(phone, user.name, "Tên mặc định phải là số điện thoại"); + assertEquals(phone, user.phone); + assertNotNull( + user.hashedPassword, + "Password tự động phải được tạo và hash" + ); + } - assertEquals("ExistedUser", exception.getMessage()); - } + // 3. Test case: Đăng ký thất bại do số điện thoại đã tồn tại + @Test + @Transactional + public void testSignupFailExistedUser() { + String phone = generateValidPhone(); + String password = "tungtungtungshahua"; - // 4. Test case: Đăng ký thất bại do số điện thoại sai định dạng - @Test - @Transactional - public void testSignupFailInvalidPhoneNumber() { - TestUserEntity user = new TestUserEntity(); - String invalidPhone = "12345"; + // Tạo user đầu tiên + TestUserEntity existUser = new TestUserEntity(); + existUser.signup("Nguyen Thanh Quy", phone, password); - BadRequestException exception = assertThrows(BadRequestException.class, () -> { - user.signup("Lam Vi Hoang", invalidPhone, "Pass123"); - }); + // Tạo user thứ hai với cùng số điện thoại + TestUserEntity newUser = new TestUserEntity(); + BadRequestException exception = assertThrows( + BadRequestException.class, + () -> { + newUser.signup("Nguyen Viet Anh", phone, "02092006Anh"); + } + ); - assertEquals("InvalidPhoneNumber", exception.getMessage()); - } + assertEquals("ExistedUser", exception.getMessage()); + } - // 5. Test case: Đăng nhập thành công - @Test - @Transactional - public void testLoginSuccess() { - TestUserEntity user = new TestUserEntity(); - String phone = generateValidPhone(); - String password = "02092006Danh"; - - user.signup("Tran Huu Danh", phone, password); + // 4. Test case: Đăng ký thất bại do số điện thoại sai định dạng + @Test + @Transactional + public void testSignupFailInvalidPhoneNumber() { + TestUserEntity user = new TestUserEntity(); + String invalidPhone = "12345"; - boolean loginResult = user.login(password); + BadRequestException exception = assertThrows( + BadRequestException.class, + () -> { + user.signup("Lam Vi Hoang", invalidPhone, "Pass123"); + } + ); - assertTrue(loginResult, "Đăng nhập phải thành công với mật khẩu đúng"); - } + assertEquals("InvalidPhoneNumber", exception.getMessage()); + } - // 6. Test case: Đăng nhập thất bại do sai mật khẩu - @Test - @Transactional - public void testLoginFailWrongPassword() { - TestUserEntity user = new TestUserEntity(); - String phone = generateValidPhone(); - String truePassword = "02092006Danh"; - String wrongPassword = "02092006danhh"; + // 5. Test case: Đăng nhập thành công + @Test + @Transactional + public void testLoginSuccess() { + TestUserEntity user = new TestUserEntity(); + String phone = generateValidPhone(); + String password = "02092006Danh"; - user.signup("Tran Huu Danh", phone, truePassword); - - boolean loginResult = user.login(wrongPassword); + user.signup("Tran Huu Danh", phone, password); - assertFalse(loginResult, "Đăng nhập phải thất bại với mật khẩu sai"); - } + boolean loginResult = user.login(password); - // 7. Test case: Đăng nhập thất bại do hashedPassword bị null - @Test - @Transactional - public void testLoginFailNullHashedPassword() { - TestUserEntity user = new TestUserEntity(); - user.hashedPassword = null; // Cố tình set null để test lỗi + assertTrue(loginResult, "Đăng nhập phải thành công với mật khẩu đúng"); + } - boolean loginResult = user.login("anhdomixi"); - - assertFalse(loginResult, "Đăng nhập phải thất bại nếu hashedPassword là null"); - } + // 6. Test case: Đăng nhập thất bại do sai mật khẩu + @Test + @Transactional + public void testLoginFailWrongPassword() { + TestUserEntity user = new TestUserEntity(); + String phone = generateValidPhone(); + String truePassword = "02092006Danh"; + String wrongPassword = "02092006danhh"; + user.signup("Tran Huu Danh", phone, truePassword); + + boolean loginResult = user.login(wrongPassword); + + assertFalse(loginResult, "Đăng nhập phải thất bại với mật khẩu sai"); + } + + // 7. Test case: Đăng nhập thất bại do hashedPassword bị null + @Test + @Transactional + public void testLoginFailNullHashedPassword() { + TestUserEntity user = new TestUserEntity(); + user.hashedPassword = null; // Cố tình set null để test lỗi + + boolean loginResult = user.login("anhdomixi"); + + assertFalse( + loginResult, + "Đăng nhập phải thất bại nếu hashedPassword là null" + ); + } } diff --git a/account-service/src/test/java/com/drinkool/services/AuthenticationServiceTest.java b/account-service/src/test/java/com/drinkool/services/AuthenticationServiceTest.java index 162f2c2..4925a41 100644 --- a/account-service/src/test/java/com/drinkool/services/AuthenticationServiceTest.java +++ b/account-service/src/test/java/com/drinkool/services/AuthenticationServiceTest.java @@ -13,14 +13,13 @@ import org.junit.jupiter.api.Test; @QuarkusTest public class AuthenticationServiceTest { - + private Random random = new Random(); private String generateRandomPhone() { return "+8477" + String.format("%07d", random.nextInt(10000000)); } - @Test void testSignup() { String phone = generateRandomPhone(); diff --git a/account-service/src/test/java/com/drinkool/services/OtpServiceTest.java b/account-service/src/test/java/com/drinkool/services/OtpServiceTest.java index f4a9c08..0057f97 100644 --- a/account-service/src/test/java/com/drinkool/services/OtpServiceTest.java +++ b/account-service/src/test/java/com/drinkool/services/OtpServiceTest.java @@ -10,66 +10,77 @@ import org.junit.jupiter.api.Test; @QuarkusTest public class OtpServiceTest { - @Inject - OtpService otpService; + @Inject + OtpService otpService; - // 1. Test case: Tạo và lưu OTP thành công - @Test - public void testGenerateAndSaveOtp() { - String phone = "+8477" + String.format("%07d", new Random().nextInt(10000000)); - String otp = otpService.generateAndSaveOtp(phone); + // 1. Test case: Tạo và lưu OTP thành công + @Test + public void testGenerateAndSaveOtp() { + String phone = + "+8477" + String.format("%07d", new Random().nextInt(10000000)); + String otp = otpService.generateAndSaveOtp(phone); - assertNotNull(otp, "OTP sinh ra không được null"); - assertEquals(6, otp.length(), "OTP phải có độ dài đúng 6 ký tự"); - assertTrue(otp.matches("\\d{6}"), "OTP chỉ được chứa các chữ số"); - } + assertNotNull(otp, "OTP sinh ra không được null"); + assertEquals(6, otp.length(), "OTP phải có độ dài đúng 6 ký tự"); + assertTrue(otp.matches("\\d{6}"), "OTP chỉ được chứa các chữ số"); + } - // 2. Test case: Xác thực OTP thành công - @Test - public void testVerifyOtpSuccess() { - String phone = "+8477" + String.format("%07d", new Random().nextInt(10000000)); - String generatedOtp = otpService.generateAndSaveOtp(phone); + // 2. Test case: Xác thực OTP thành công + @Test + public void testVerifyOtpSuccess() { + String phone = + "+8477" + String.format("%07d", new Random().nextInt(10000000)); + String generatedOtp = otpService.generateAndSaveOtp(phone); - // Xác thực với OTP vừa tạo ra - boolean verifyResult = otpService.verifyOtp(phone, generatedOtp); + // Xác thực với OTP vừa tạo ra + boolean verifyResult = otpService.verifyOtp(phone, generatedOtp); - assertTrue(verifyResult, "Xác thực phải thành công với OTP đúng"); - } + assertTrue(verifyResult, "Xác thực phải thành công với OTP đúng"); + } - // 3. Test case: Xác thực thất bại do sai mã OTP - @Test - public void testVerifyOtpFailWrongOtp() { - String phone = "+8477" + String.format("%07d", new Random().nextInt(10000000)); - otpService.generateAndSaveOtp(phone); // Tạo OTP nhưng không dùng + // 3. Test case: Xác thực thất bại do sai mã OTP + @Test + public void testVerifyOtpFailWrongOtp() { + String phone = + "+8477" + String.format("%07d", new Random().nextInt(10000000)); + otpService.generateAndSaveOtp(phone); // Tạo OTP nhưng không dùng - String wrongOtp = "999999"; // Giả sử mã sai - boolean verifyResult = otpService.verifyOtp(phone, wrongOtp); + String wrongOtp = "999999"; // Giả sử mã sai + boolean verifyResult = otpService.verifyOtp(phone, wrongOtp); - assertFalse(verifyResult, "Xác thực phải thất bại khi truyền sai mã OTP"); - } + assertFalse(verifyResult, "Xác thực phải thất bại khi truyền sai mã OTP"); + } - // 4. Test case: Xác thực thất bại do OTP không tồn tại (chưa tạo hoặc đã hết hạn) - @Test - public void testVerifyOtpFailNotExists() { - String unverifiedPhone = "+8499" + String.format("%07d", new Random().nextInt(10000000)); - - // Cố tình xác thực cho một số điện thoại chưa từng gọi generateAndSaveOtp - boolean verifyResult = otpService.verifyOtp(unverifiedPhone, "123456"); + // 4. Test case: Xác thực thất bại do OTP không tồn tại (chưa tạo hoặc đã hết hạn) + @Test + public void testVerifyOtpFailNotExists() { + String unverifiedPhone = + "+8499" + String.format("%07d", new Random().nextInt(10000000)); - assertFalse(verifyResult, "Xác thực phải thất bại với SĐT không có OTP trong Redis"); - } + // Cố tình xác thực cho một số điện thoại chưa từng gọi generateAndSaveOtp + boolean verifyResult = otpService.verifyOtp(unverifiedPhone, "123456"); - // 5. Test case: Đảm bảo OTP chỉ được sử dụng 1 lần (đã bị xóa sau khi verify thành công bằng lệnh getdel) - @Test - public void testVerifyOtpConsumedAfterSuccess() { - String phone = "+8477" + String.format("%07d", new Random().nextInt(10000000)); - String generatedOtp = otpService.generateAndSaveOtp(phone); + assertFalse( + verifyResult, + "Xác thực phải thất bại với SĐT không có OTP trong Redis" + ); + } - // Lần 1: Xác thực thành công - assertTrue(otpService.verifyOtp(phone, generatedOtp)); + // 5. Test case: Đảm bảo OTP chỉ được sử dụng 1 lần (đã bị xóa sau khi verify thành công bằng lệnh getdel) + @Test + public void testVerifyOtpConsumedAfterSuccess() { + String phone = + "+8477" + String.format("%07d", new Random().nextInt(10000000)); + String generatedOtp = otpService.generateAndSaveOtp(phone); - // Lần 2: Xác thực lại cùng mã đó sẽ thất bại vì key đã bị getdel xóa khỏi Redis - boolean secondVerifyResult = otpService.verifyOtp(phone, generatedOtp); - assertFalse(secondVerifyResult, "OTP không được phép tái sử dụng sau khi đã verify thành công"); - } -} \ No newline at end of file + // Lần 1: Xác thực thành công + assertTrue(otpService.verifyOtp(phone, generatedOtp)); + + // Lần 2: Xác thực lại cùng mã đó sẽ thất bại vì key đã bị getdel xóa khỏi Redis + boolean secondVerifyResult = otpService.verifyOtp(phone, generatedOtp); + assertFalse( + secondVerifyResult, + "OTP không được phép tái sử dụng sau khi đã verify thành công" + ); + } +} diff --git a/account-service/src/test/java/com/drinkool/utils/PhoneValidatorTest.java b/account-service/src/test/java/com/drinkool/utils/PhoneValidatorTest.java index c35bcdd..10676a3 100644 --- a/account-service/src/test/java/com/drinkool/utils/PhoneValidatorTest.java +++ b/account-service/src/test/java/com/drinkool/utils/PhoneValidatorTest.java @@ -5,37 +5,49 @@ import org.junit.jupiter.api.Test; public class PhoneValidatorTest { - @Test - public void testValidVietnamesePhoneNumbers() { - // Số điện thoại VN hợp lệ (có mã vùng hoặc số 0 ở đầu đều được) - Assertions.assertTrue(PhoneValidator.isValidInternationalPhone("0987654321")); - Assertions.assertTrue(PhoneValidator.isValidInternationalPhone("+84987654321")); - Assertions.assertTrue(PhoneValidator.isValidInternationalPhone("84987654321")); - } + @Test + public void testValidVietnamesePhoneNumbers() { + // Số điện thoại VN hợp lệ (có mã vùng hoặc số 0 ở đầu đều được) + Assertions.assertTrue( + PhoneValidator.isValidInternationalPhone("0987654321") + ); + Assertions.assertTrue( + PhoneValidator.isValidInternationalPhone("+84987654321") + ); + Assertions.assertTrue( + PhoneValidator.isValidInternationalPhone("84987654321") + ); + } - @Test - public void testValidInternationalPhoneNumbers() { - // Số điện thoại quốc tế hợp lệ (Ví dụ: Mỹ +1) - Assertions.assertTrue(PhoneValidator.isValidInternationalPhone("+14155552671")); - } + @Test + public void testValidInternationalPhoneNumbers() { + // Số điện thoại quốc tế hợp lệ (Ví dụ: Mỹ +1) + Assertions.assertTrue( + PhoneValidator.isValidInternationalPhone("+14155552671") + ); + } - @Test - public void testInvalidPhoneNumbers() { - // Chuỗi không phải số điện thoại - Assertions.assertFalse(PhoneValidator.isValidInternationalPhone("not-a-phone-number")); - - // Số điện thoại quá ngắn hoặc sai định dạng - Assertions.assertFalse(PhoneValidator.isValidInternationalPhone("123")); - Assertions.assertFalse(PhoneValidator.isValidInternationalPhone("099999999999999")); - - // Chuỗi rỗng - Assertions.assertFalse(PhoneValidator.isValidInternationalPhone("")); - } + @Test + public void testInvalidPhoneNumbers() { + // Chuỗi không phải số điện thoại + Assertions.assertFalse( + PhoneValidator.isValidInternationalPhone("not-a-phone-number") + ); - @Test - public void testNullPhoneNumber() { - // Cố tình truyền null để xem hàm xử lý thế nào - // Lưu ý: Đọc thêm phần "Mẹo nhỏ" bên dưới để pass được test này - Assertions.assertFalse(PhoneValidator.isValidInternationalPhone(null)); - } -} \ No newline at end of file + // Số điện thoại quá ngắn hoặc sai định dạng + Assertions.assertFalse(PhoneValidator.isValidInternationalPhone("123")); + Assertions.assertFalse( + PhoneValidator.isValidInternationalPhone("099999999999999") + ); + + // Chuỗi rỗng + Assertions.assertFalse(PhoneValidator.isValidInternationalPhone("")); + } + + @Test + public void testNullPhoneNumber() { + // Cố tình truyền null để xem hàm xử lý thế nào + // Lưu ý: Đọc thêm phần "Mẹo nhỏ" bên dưới để pass được test này + Assertions.assertFalse(PhoneValidator.isValidInternationalPhone(null)); + } +} diff --git a/eatery-service/src/main/java/com/drinkool/entities/MenuItemEntity.java b/eatery-service/src/main/java/com/drinkool/entities/MenuItemEntity.java index a1091df..81da14b 100644 --- a/eatery-service/src/main/java/com/drinkool/entities/MenuItemEntity.java +++ b/eatery-service/src/main/java/com/drinkool/entities/MenuItemEntity.java @@ -47,7 +47,7 @@ public class MenuItemEntity extends BaseEntity { menu.name = name; menu.price = price; - + menu.persist(); return menu; diff --git a/eatery-service/src/test/java/com/drinkool/entities/InventoryItemEntityTest.java b/eatery-service/src/test/java/com/drinkool/entities/InventoryItemEntityTest.java index 6544fab..4aecfc0 100644 --- a/eatery-service/src/test/java/com/drinkool/entities/InventoryItemEntityTest.java +++ b/eatery-service/src/test/java/com/drinkool/entities/InventoryItemEntityTest.java @@ -8,37 +8,43 @@ 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); + @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"; - // 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"); - } + // 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); - @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, "Đơn vị không khớp"); + Assertions.assertNotNull( + item.id, + "ID phải được sinh ra tự động sau khi persist" + ); + } - // 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"); - } -} \ No newline at end of file + @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" + ); + } +} diff --git a/eatery-service/src/test/java/com/drinkool/entities/MenuItemEntityTest.java b/eatery-service/src/test/java/com/drinkool/entities/MenuItemEntityTest.java index 24adf80..e6b62ac 100644 --- a/eatery-service/src/test/java/com/drinkool/entities/MenuItemEntityTest.java +++ b/eatery-service/src/test/java/com/drinkool/entities/MenuItemEntityTest.java @@ -9,50 +9,82 @@ 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; + @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); + // 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"); - } + // 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); + @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"); + // 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 + 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); + // 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"); + // 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"); - } -} \ No newline at end of file + // 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" + ); + } +} diff --git a/eatery-service/src/test/java/com/drinkool/entities/MenuItemIngredientEntityTest.java b/eatery-service/src/test/java/com/drinkool/entities/MenuItemIngredientEntityTest.java index b1252dc..f9f84f8 100644 --- a/eatery-service/src/test/java/com/drinkool/entities/MenuItemIngredientEntityTest.java +++ b/eatery-service/src/test/java/com/drinkool/entities/MenuItemIngredientEntityTest.java @@ -9,48 +9,52 @@ 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"; - int inventoryItemQuantity = 10; // Đổi thành int cho khớp với kiểu của EateryInventoryItemEntity - 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"; - // 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! + // 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); - } -} \ No newline at end of file + assertNotNull(savedEntity); + assertEquals(menuItem.id, savedEntity.menuItem.id); + assertEquals(inventoryItem.id, savedEntity.inventoryItem.id); + assertEquals(requiredQuantity, savedEntity.requiredQuantity); + } +} diff --git a/eatery-service/src/test/java/com/drinkool/entities/ReviewEntityTest.java b/eatery-service/src/test/java/com/drinkool/entities/ReviewEntityTest.java index 8a956f1..956b795 100644 --- a/eatery-service/src/test/java/com/drinkool/entities/ReviewEntityTest.java +++ b/eatery-service/src/test/java/com/drinkool/entities/ReviewEntityTest.java @@ -3,33 +3,55 @@ package com.drinkool.entities; import com.drinkool.models.ReviewModel; import io.quarkus.test.junit.QuarkusTest; import jakarta.transaction.Transactional; +import java.util.UUID; 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!"); + @Test + @Transactional + public void testCreateReview() { + // 1. Chuẩn bị dữ liệu (Arrange) + UUID testReviewerId = UUID.randomUUID(); + UUID testEateryId = UUID.randomUUID(); - // 2. Thực thi (Act) - ReviewEntity savedReview = ReviewEntity.create(testReviewerId, testEateryId, inputModel); + // 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!"); - // 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"); - } -} \ No newline at end of file + // 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" + ); + } +} diff --git a/eatery-service/src/test/java/com/drinkool/services/InventoryServiceTest.java b/eatery-service/src/test/java/com/drinkool/services/InventoryServiceTest.java index 1496b92..e6e2ca8 100644 --- a/eatery-service/src/test/java/com/drinkool/services/InventoryServiceTest.java +++ b/eatery-service/src/test/java/com/drinkool/services/InventoryServiceTest.java @@ -29,6 +29,4 @@ public class InventoryServiceTest { assertEquals(1, InventoryItemEntity.find("name", name).count()); } - - } diff --git a/eatery-service/src/test/java/com/drinkool/services/ReviewServiceTest.java b/eatery-service/src/test/java/com/drinkool/services/ReviewServiceTest.java index ab0bcdf..69c5c34 100644 --- a/eatery-service/src/test/java/com/drinkool/services/ReviewServiceTest.java +++ b/eatery-service/src/test/java/com/drinkool/services/ReviewServiceTest.java @@ -35,7 +35,8 @@ public class ReviewServiceTest { .body(input) .when() .post("/api/review/create") - .then().statusCode(201); + .then() + .statusCode(201); assertEquals(1, ReviewEntity.find("reviewerId", reviewerId).count()); }