From fd888e1b4531aaab7814f25a6e062e518b51ca04 Mon Sep 17 00:00:00 2001 From: Nicolas Glassey Date: Sun, 8 Mar 2026 18:53:45 +0100 Subject: [PATCH 1/4] test(employees): hire method is now a simple create method (CRUD way) --- .../java/ch/etml/es/payroll/controllers/EmployeePostTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePostTest.java b/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePostTest.java index 20bd848..425e1f9 100644 --- a/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePostTest.java +++ b/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePostTest.java @@ -37,7 +37,7 @@ void given_an_empty_employee_database() { } @Test - void when_hiring_new_employee_then_employee_is_created_and_persisted() { + void when_posting_new_employee_then_employee_is_created_and_persisted() { // GIVEN Employee newEmployee = new Employee("Doe", "Supervisor"); @@ -68,7 +68,7 @@ void when_hiring_new_employee_then_employee_is_created_and_persisted() { } @Test - void when_hiring_existing_employee_then_conflict_is_returned() { + void when_posting_existing_employee_then_conflict_is_returned() { // GIVEN Employee existingEmployee = new Employee("Doe", "Supervisor"); employeeRepository.save(existingEmployee); From eb7dda8214dd66ec83a3971d6427d3400fae7785 Mon Sep 17 00:00:00 2001 From: Nicolas Glassey Date: Sun, 8 Mar 2026 18:54:04 +0100 Subject: [PATCH 2/4] refactor(employees): hire method is now a simple create method (CRUD way) --- .../ch/etml/es/payroll/controllers/EmployeeController.java | 4 ++-- .../java/ch/etml/es/payroll/services/EmployeeService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/employees/src/main/java/ch/etml/es/payroll/controllers/EmployeeController.java b/employees/src/main/java/ch/etml/es/payroll/controllers/EmployeeController.java index a94a1b3..54c0a5e 100644 --- a/employees/src/main/java/ch/etml/es/payroll/controllers/EmployeeController.java +++ b/employees/src/main/java/ch/etml/es/payroll/controllers/EmployeeController.java @@ -43,8 +43,8 @@ Employee one(@PathVariable Long id){ -d "{\"name\": \"Russel George\", \"role\": \"gardener\"}" */ @PostMapping("") - public ResponseEntity hireEmployee(@RequestBody Employee employee) { - Employee created = EmployeeService.hire(employee); + public ResponseEntity createEmployee(@RequestBody Employee employee) { + Employee created = EmployeeService.create(employee); URI location = ServletUriComponentsBuilder .fromCurrentRequest() diff --git a/employees/src/main/java/ch/etml/es/payroll/services/EmployeeService.java b/employees/src/main/java/ch/etml/es/payroll/services/EmployeeService.java index 8cb47f6..9e64a7c 100644 --- a/employees/src/main/java/ch/etml/es/payroll/services/EmployeeService.java +++ b/employees/src/main/java/ch/etml/es/payroll/services/EmployeeService.java @@ -14,7 +14,7 @@ public EmployeeService(EmployeeRepository repository) { EmployeeService.repository = repository; } - public static Employee hire(Employee employee) { + public static Employee create(Employee employee) { Employee existing = repository.findByName(employee.getName()) .orElse(null); From 24aae6cf45583c175f1e024fcdc1f9cd5d6b35b2 Mon Sep 17 00:00:00 2001 From: Nicolas Glassey Date: Sun, 8 Mar 2026 19:16:25 +0100 Subject: [PATCH 3/4] test(employees): add test cases for PUT verb --- .../payroll/controllers/EmployeePutTest.java | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePutTest.java diff --git a/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePutTest.java b/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePutTest.java new file mode 100644 index 0000000..c699704 --- /dev/null +++ b/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePutTest.java @@ -0,0 +1,103 @@ +package ch.etml.es.payroll.controllers; + +import ch.etml.es.payroll.entities.Employee; +import ch.etml.es.payroll.PayrollApplication; +import ch.etml.es.payroll.repositories.EmployeeRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ActiveProfiles; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest( + classes = PayrollApplication.class, + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT +) +@ActiveProfiles("test") +class EmployeePutTest { + + @Autowired + private TestRestTemplate restTemplate; + + @Autowired + private EmployeeRepository employeeRepository; + + private Employee existingEmployee; + + @BeforeEach + void given_an_existing_employee() { + employeeRepository.deleteAll(); + + Employee employee = new Employee("Doe", "Supervisor"); + existingEmployee = employeeRepository.save(employee); + } + + @Test + void when_updating_existing_employee_then_success() { + // GIVEN + Employee updatedInfo = new Employee("Doe", "Manager"); // change role + HttpEntity request = new HttpEntity<>(updatedInfo); + + // WHEN + ResponseEntity response = + restTemplate.exchange( + "/v1/employees/{id}", + HttpMethod.PUT, + request, + Employee.class, + existingEmployee.getId() + ); + + // THEN (HTTP) + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + + // THEN (body) + Employee updatedEmployee = response.getBody(); + assertThat(updatedEmployee).isNotNull(); + assertThat(updatedEmployee.getId()).isEqualTo(existingEmployee.getId()); + assertThat(updatedEmployee.getRole()).isNotNull(); + + // THEN (database) + Employee dbEmployee = employeeRepository.findById(existingEmployee.getId()).orElseThrow(); + assertThat(dbEmployee.getRole()).isEqualTo("MANAGER"); + } + + @Test + void when_updating_nonexistent_employee_then_created() { + // GIVEN + Long nonExistentId = 999L; + Employee newEmployee = new Employee("Smith", "Engineer"); + HttpEntity request = new HttpEntity<>(newEmployee); + + // WHEN + ResponseEntity response = + restTemplate.exchange( + "/v1/employees/{id}", + HttpMethod.PUT, + request, + Employee.class, + nonExistentId + ); + + // THEN (HTTP) + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); + + // THEN (body) + Employee createdEmployee = response.getBody(); + assertThat(createdEmployee).isNotNull(); + assertThat(createdEmployee.getId()).isNotNull(); + assertThat(createdEmployee.getName()).isEqualTo("Smith"); + assertThat(createdEmployee.getRole()).isEqualTo("ENGINEER"); + + // THEN (database) + Employee dbEmployee = employeeRepository.findById(createdEmployee.getId()).orElseThrow(); + assertThat(dbEmployee.getName()).isEqualTo("Smith"); + } +} \ No newline at end of file From 7c8ff64ad44562e1f30e93b0ef40418c7444b140 Mon Sep 17 00:00:00 2001 From: Nicolas Glassey Date: Mon, 9 Mar 2026 19:13:59 +0100 Subject: [PATCH 4/4] test(EmployeePut): improve test isolation to avoid parallel execution side effects --- .../ch/etml/es/payroll/controllers/EmployeePutTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePutTest.java b/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePutTest.java index c699704..30f6c95 100644 --- a/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePutTest.java +++ b/employees/src/test/java/ch/etml/es/payroll/controllers/EmployeePutTest.java @@ -12,6 +12,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ActiveProfiles; import static org.assertj.core.api.Assertions.assertThat; @@ -21,6 +22,7 @@ webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT ) @ActiveProfiles("test") +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) class EmployeePutTest { @Autowired @@ -34,9 +36,10 @@ class EmployeePutTest { @BeforeEach void given_an_existing_employee() { employeeRepository.deleteAll(); + employeeRepository.flush(); Employee employee = new Employee("Doe", "Supervisor"); - existingEmployee = employeeRepository.save(employee); + existingEmployee = employeeRepository.saveAndFlush(employee); } @Test @@ -72,7 +75,7 @@ void when_updating_existing_employee_then_success() { @Test void when_updating_nonexistent_employee_then_created() { // GIVEN - Long nonExistentId = 999L; + Long nonExistentId = Long.MAX_VALUE; Employee newEmployee = new Employee("Smith", "Engineer"); HttpEntity request = new HttpEntity<>(newEmployee);