From aecc12efeed4065e7edb8975cd7f0b28b80258b6 Mon Sep 17 00:00:00 2001 From: user Date: Sat, 3 Oct 2026 12:21:51 +0400 Subject: [PATCH] test(user-service): add UserDao integration tests and update Testcontainers --- second-part/hw-03/user-service/pom.xml | 4 +- .../com/example/UserDaoIntegrationTest.java | 120 ++++++++++++++++++ 2 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 second-part/hw-03/user-service/src/test/java/com/example/UserDaoIntegrationTest.java diff --git a/second-part/hw-03/user-service/pom.xml b/second-part/hw-03/user-service/pom.xml index 4597166..3c6440e 100644 --- a/second-part/hw-03/user-service/pom.xml +++ b/second-part/hw-03/user-service/pom.xml @@ -72,13 +72,13 @@ org.testcontainers junit-jupiter - 1.20.3 + 1.21.4 test org.testcontainers postgresql - 1.20.3 + 1.21.4 test diff --git a/second-part/hw-03/user-service/src/test/java/com/example/UserDaoIntegrationTest.java b/second-part/hw-03/user-service/src/test/java/com/example/UserDaoIntegrationTest.java new file mode 100644 index 0000000..a314282 --- /dev/null +++ b/second-part/hw-03/user-service/src/test/java/com/example/UserDaoIntegrationTest.java @@ -0,0 +1,120 @@ +package com.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + +import java.util.Properties; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.Transaction; +import org.hibernate.cfg.Configuration; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.PostgreSQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +@Testcontainers +class UserDaoIntegrationTest { + + @Container + static final PostgreSQLContainer POSTGRES = + new PostgreSQLContainer<>("postgres:16-alpine") + .withDatabaseName("user_service_test") + .withUsername("postgres") + .withPassword("postgres"); + + private static SessionFactory sessionFactory; + private UserDao userDao; + + @BeforeAll + static void setUpSessionFactory() { + Properties properties = new Properties(); + properties.put("hibernate.connection.driver_class", "org.postgresql.Driver"); + properties.put("hibernate.connection.url", POSTGRES.getJdbcUrl()); + properties.put("hibernate.connection.username", POSTGRES.getUsername()); + properties.put("hibernate.connection.password", POSTGRES.getPassword()); + properties.put("hibernate.hbm2ddl.auto", "create-drop"); + properties.put("hibernate.show_sql", "false"); + + sessionFactory = + new Configuration() + .addProperties(properties) + .addAnnotatedClass(User.class) + .buildSessionFactory(); + } + + @AfterAll + static void tearDownSessionFactory() { + if (sessionFactory != null) { + sessionFactory.close(); + } + } + + @BeforeEach + void cleanDatabase() { + try (Session session = sessionFactory.openSession()) { + Transaction transaction = session.beginTransaction(); + session.createMutationQuery("delete from User").executeUpdate(); + transaction.commit(); + } + + userDao = new UserDao(sessionFactory); + } + + @Test + void createPersistsUser() { + User user = new User("user1", "user1@example.com", 30); + + User result = userDao.create(user); + + assertNotNull(result.getId()); + assertNotNull(result.getCreatedAt()); + + User persisted = userDao.findById(result.getId()); + assertNotNull(persisted); + assertEquals("user1", persisted.getName()); + assertEquals("user1@example.com", persisted.getEmail()); + assertEquals(30, persisted.getAge()); + } + + @Test + void findByIdReturnsUser() { + User user = userDao.create(new User("user2", "user2@example.com", 25)); + + User result = userDao.findById(user.getId()); + + assertNotNull(result); + assertEquals(user.getId(), result.getId()); + assertEquals("user2", result.getName()); + } + + @Test + void updateChangesPersistedUser() { + User user = userDao.create(new User("user3", "user3@example.com", 28)); + user.setName("user3 Updated"); + user.setEmail("user3.updated@example.com"); + user.setAge(29); + + User result = userDao.update(user); + + assertNotNull(result); + User updated = userDao.findById(user.getId()); + assertNotNull(updated); + assertEquals("user3 Updated", updated.getName()); + assertEquals("user3.updated@example.com", updated.getEmail()); + assertEquals(29, updated.getAge()); + } + + @Test + void deleteByIdRemovesUser() { + User user = userDao.create(new User("user3", "user3@example.com", 40)); + + userDao.deleteById(user.getId()); + + assertNull(userDao.findById(user.getId())); + } +}