test(user-service): add UserDao integration tests and update Testcontainers

This commit is contained in:
user
2026-10-03 12:21:51 +04:00
parent a8570fc6f0
commit aecc12efee
2 changed files with 122 additions and 2 deletions
+2 -2
View File
@@ -72,13 +72,13 @@
<dependency> <dependency>
<groupId>org.testcontainers</groupId> <groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId> <artifactId>junit-jupiter</artifactId>
<version>1.20.3</version> <version>1.21.4</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.testcontainers</groupId> <groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId> <artifactId>postgresql</artifactId>
<version>1.20.3</version> <version>1.21.4</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
@@ -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()));
}
}