11package dao .impl ;
22
33import dao .EmployeeDao ;
4+ import dao .PositionDao ;
5+ import dao .TeamDao ;
6+ import db .ConnectionManager ;
47import entities .Employee ;
5- import entities .enums .CivilStatus ;
68import 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 ;
1418import java .util .Map ;
19+ import java .util .Objects ;
1520import java .util .Optional ;
1621import java .util .concurrent .CompletableFuture ;
1722
2126 * Test class for EmployeeDaoImpl.
2227 * Tests CRUD operations and search functionalities.
2328 */
29+ @ Slf4j
30+ @ TestInstance (TestInstance .Lifecycle .PER_CLASS )
2431class 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