test(user-service): add UserDao integration tests and update Testcontainers
This commit is contained in:
@@ -72,13 +72,13 @@
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<version>1.20.3</version>
|
||||
<version>1.21.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<version>1.20.3</version>
|
||||
<version>1.21.4</version>
|
||||
<scope>test</scope>
|
||||
</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()));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user