Skip to content

Commit e4a9a9b

Browse files
committed
refactor: update EmployeeDaoImplTest to use isolated test data and setup/teardown for reliable CRUD and search tests
1 parent bbcccea commit e4a9a9b

1 file changed

Lines changed: 107 additions & 45 deletions

File tree

Lines changed: 107 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
package dao.impl;
22

33
import dao.EmployeeDao;
4+
import dao.PositionDao;
5+
import dao.TeamDao;
6+
import db.ConnectionManager;
47
import entities.Employee;
5-
import entities.enums.CivilStatus;
68
import entities.enums.EmployeeFetchType;
7-
import entities.enums.Gender;
8-
import entry.HumanResourceInformationSystem;
9-
import org.junit.jupiter.api.AfterEach;
10-
import org.junit.jupiter.api.BeforeEach;
11-
import org.junit.jupiter.api.Test;
12-
13-
import java.time.LocalDate;
9+
import lombok.extern.slf4j.Slf4j;
10+
import org.h2.Driver;
11+
import org.h2.tools.RunScript;
12+
import org.junit.jupiter.api.*;
13+
14+
import java.io.InputStreamReader;
15+
import java.sql.Connection;
16+
import java.sql.SQLException;
17+
import java.sql.Statement;
1418
import java.util.Map;
19+
import java.util.Objects;
1520
import java.util.Optional;
1621
import java.util.concurrent.CompletableFuture;
1722

@@ -21,65 +26,95 @@
2126
* Test class for EmployeeDaoImpl.
2227
* Tests CRUD operations and search functionalities.
2328
*/
29+
@Slf4j
30+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
2431
class EmployeeDaoImplTest {
2532

2633
private EmployeeDao employeeDao;
27-
28-
@BeforeEach
29-
void setUp() {
30-
// Initialize the DAO
34+
private PositionDao positionDao;
35+
private TeamDao teamDao;
36+
37+
@BeforeAll
38+
void setUpDatabase() {
39+
ConnectionManager.setEnvFile(".env.test");
40+
ConnectionManager.setDriver(Driver.load());
41+
try (Connection conn = ConnectionManager.getConnection()) {
42+
RunScript.execute(conn, new InputStreamReader(Objects.requireNonNull(EmployeeDaoImplTest.class.getClassLoader().getResourceAsStream("hris_h2.sql"))));
43+
} catch (SQLException e) {
44+
throw new RuntimeException(e);
45+
}
46+
// Initialize DAOs
47+
positionDao = new PositionDaoImpl();
48+
teamDao = new TeamDaoImpl();
3149
employeeDao = new EmployeeDaoImpl();
3250
}
3351

52+
@AfterAll
3453
@AfterEach
35-
void tearDown() {
36-
// Clean up if necessary
54+
void cleanUp() {
55+
try (Connection conn = ConnectionManager.getConnection();
56+
Statement stmt = conn.createStatement()) {
57+
//noinspection SqlWithoutWhere
58+
stmt.execute("DELETE FROM employees");
59+
//noinspection SqlWithoutWhere
60+
stmt.execute("DELETE FROM positions");
61+
//noinspection SqlWithoutWhere
62+
stmt.execute("DELETE FROM teams");
63+
} catch (Exception e) {
64+
log.error(e.getMessage(), e);
65+
}
3766
}
3867

3968
@Test
4069
void testCreateEmployee() {
41-
Employee employee = Employee.builder()
42-
.employeeNumber(9999)
43-
.positionId(1)
44-
.teamId(1)
45-
.firstName("Test")
46-
.middleName("User")
47-
.lastName("Example")
48-
.contactNumber("1234567890")
49-
.gender(Gender.MALE)
50-
.dateOfBirth(LocalDate.of(1990, 1, 1))
51-
.civilStatus(CivilStatus.SINGLE)
52-
.build();
53-
54-
CompletableFuture<Integer> future = employeeDao.createEmployee(employee);
55-
Integer id = future.join();
56-
57-
assertNotNull(id);
70+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
71+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
72+
73+
int id = EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "Test", "User", "Example", 9999);
74+
5875
assertTrue(id > 0);
5976
}
6077

6178
@Test
6279
void testGetEmployeeById() {
63-
// Assuming an employee with ID 1 exists
64-
CompletableFuture<Optional<Employee>> future = employeeDao.getEmployeeById(1);
80+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
81+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
82+
83+
// Create a test employee
84+
int id = EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "Test", "User", 1001);
85+
86+
// Now test get
87+
CompletableFuture<Optional<Employee>> future = employeeDao.getEmployeeById(id);
6588
Optional<Employee> employee = future.join();
6689

6790
assertTrue(employee.isPresent());
68-
assertEquals(1, employee.get().getId());
91+
assertEquals(id, employee.get().getId());
6992
}
7093

7194
@Test
7295
void testGetEmployeeByEmployeeNumber() {
73-
// Assuming an employee with number 1001 exists
96+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
97+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
98+
99+
// Create a test employee
100+
EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "Test", "User", 1001);
101+
102+
// Now test get
74103
CompletableFuture<Optional<Employee>> future = employeeDao.getEmployeeByEmployeeNumber(1001);
75-
Optional<Employee> employee = future.join();
104+
Optional<Employee> retrieved = future.join();
76105

77-
assertTrue(employee.isPresent());
78-
assertEquals(1001, employee.get().getEmployeeNumber());
106+
assertTrue(retrieved.isPresent());
107+
assertEquals(1001, retrieved.get().getEmployeeNumber());
79108
}
80109

81110
@Test
82111
void testGetEmployees() {
112+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
113+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
114+
115+
// Create a test employee
116+
EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "Test", "User", 1001);
117+
83118
CompletableFuture<Map<Integer, Employee>> future = employeeDao.getEmployees();
84119
Map<Integer, Employee> employees = future.join();
85120

@@ -89,27 +124,43 @@ void testGetEmployees() {
89124

90125
@Test
91126
void testGetEmployeesByEmployeeNumberLike() {
127+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
128+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
129+
130+
// Create a test employee
131+
EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "Test", "User", 1001);
132+
92133
CompletableFuture<Map<Integer, Employee>> future = employeeDao.getEmployeesByEmployeeNumberLike("100");
93134
Map<Integer, Employee> employees = future.join();
94135

95136
assertNotNull(employees);
96-
// Assuming there are employees with numbers starting with 100
97137
assertFalse(employees.isEmpty());
98138
}
99139

100140
@Test
101141
void testGetEmployeesByNameLike() {
142+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
143+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
144+
145+
// Create a test employee with "John" in name
146+
EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "John", "Doe", 2001);
147+
102148
CompletableFuture<Map<Integer, Employee>> future = employeeDao.getEmployeesByNameLike("John");
103149
Map<Integer, Employee> employees = future.join();
104150

105151
assertNotNull(employees);
106-
// Assuming there are employees with name containing "John"
152+
assertFalse(employees.isEmpty());
107153
}
108154

109155
@Test
110156
void testUpdateEmployeeByEmployeeId() {
111-
// Assuming an employee with ID 1 exists
112-
Optional<Employee> optionalEmployee = employeeDao.getEmployeeById(1).join();
157+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
158+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
159+
160+
// Create a test employee
161+
int id = EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "Test", "User", 1001);
162+
163+
Optional<Employee> optionalEmployee = employeeDao.getEmployeeById(id).join();
113164
assertTrue(optionalEmployee.isPresent());
114165

115166
Employee employee = optionalEmployee.get();
@@ -121,14 +172,19 @@ void testUpdateEmployeeByEmployeeId() {
121172
assertTrue(result);
122173

123174
// Verify update
124-
Optional<Employee> updatedEmployee = employeeDao.getEmployeeById(1).join();
175+
Optional<Employee> updatedEmployee = employeeDao.getEmployeeById(id).join();
125176
assertTrue(updatedEmployee.isPresent());
126177
assertEquals("UpdatedName", updatedEmployee.get().getFirstName());
127178
}
128179

129180
@Test
130181
void testSoftDeleteEmployeeByEmployeeNumber() {
131-
// Assuming an employee with number 9999 was created in create test
182+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
183+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
184+
185+
// Create a test employee
186+
EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "Test", "User", "Example", 9999);
187+
132188
CompletableFuture<Boolean> future = employeeDao.softDeleteEmployeeByEmployeeNumber(9999);
133189
Boolean result = future.join();
134190

@@ -142,10 +198,16 @@ void testSoftDeleteEmployeeByEmployeeNumber() {
142198

143199
@Test
144200
void testCountEmployees() {
201+
int positionId = PositionTestUtils.createPosition(positionDao, "Manager", 50000.0);
202+
int teamId = TeamTestUtils.createTeam(teamDao, "Development");
203+
204+
// Create a test employee
205+
EmployeeTestUtils.createEmployee(employeeDao, positionId, teamId, "Test", "User", 1001);
206+
145207
CompletableFuture<Integer> future = employeeDao.countEmployees();
146208
Integer count = future.join();
147209

148210
assertNotNull(count);
149-
assertTrue(count >= 0);
211+
assertTrue(count > 0);
150212
}
151213
}

0 commit comments

Comments
 (0)