test(user-service): add UserDao integration tests and update Testcontainers
This commit is contained in:
@@ -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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user