From 499d1279d1892e0be5c2358a87477ba6cccca666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20K=C3=BCck?= Date: Mon, 14 Oct 2024 10:58:41 +0200 Subject: [PATCH] PMT-16: Edit and create more test cases --- .../java/de/hmmh/pmt/project/CreateTest.java | 105 ++++++++++++------ 1 file changed, 73 insertions(+), 32 deletions(-) diff --git a/src/test/java/de/hmmh/pmt/project/CreateTest.java b/src/test/java/de/hmmh/pmt/project/CreateTest.java index 111d09b..f17ac70 100644 --- a/src/test/java/de/hmmh/pmt/project/CreateTest.java +++ b/src/test/java/de/hmmh/pmt/project/CreateTest.java @@ -1,17 +1,21 @@ package de.hmmh.pmt.project; import de.hmmh.pmt.IntegrationTest; +import de.hmmh.pmt.db.Project; import de.hmmh.pmt.dtos.CreateProjectDTO; import de.hmmh.pmt.employee.dtos.EmployeeResponseDTO; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestClientException; import java.time.LocalDateTime; +import java.util.Map; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -33,14 +37,8 @@ public class CreateTest extends IntegrationTest { createDTO.setStart(LocalDateTime.of(2000, 1, 13, 12, 51)); createDTO.setPlannedEnd(LocalDateTime.of(2002, 3, 21, 11, 42)); - RequestBuilder requestBuilder = MockMvcRequestBuilders - .post(baseUri + "/project") - .accept(MediaType.APPLICATION_JSON) - .content(this.objectMapper.writeValueAsString(createDTO)) - .contentType(MediaType.APPLICATION_JSON); - this.mvc - .perform(requestBuilder) + .perform(getRequest(createDTO)) .andExpect(status().isCreated()) .andExpect(jsonPath("$.id").exists()); } @@ -48,36 +46,27 @@ public class CreateTest extends IntegrationTest { @Test void shouldNotCreateProjectWithSameName() throws Exception { + Map allProjects = createTestProjectData(); + Project spaceStation = allProjects.get("space-station"); + CreateProjectDTO createDTO = new CreateProjectDTO(); - createDTO.setName("Test"); - createDTO.setGoal("A Test Goal"); - createDTO.setCustomerId(10L); - createDTO.setAdministratorId(1L); - createDTO.setStart(LocalDateTime.of(2000, 1, 13, 12, 51)); - createDTO.setPlannedEnd(LocalDateTime.of(2002, 3, 21, 11, 42)); - - RequestBuilder firstProjectRequestBuilder = createProjectRequestBuilder(createDTO); + createDTO.setName(spaceStation.getName()); + createDTO.setGoal(spaceStation.getGoal()); + createDTO.setCustomerId(spaceStation.getCustomerId()); + createDTO.setAdministratorId(spaceStation.getAdministratorId()); + createDTO.setStart(spaceStation.getStart()); + createDTO.setPlannedEnd(spaceStation.getPlannedEnd()); this.mvc - .perform(firstProjectRequestBuilder) - .andExpect(status().isCreated()) - .andExpect(jsonPath("$.id").exists()); - - RequestBuilder secondProjectRequestBuilder = createProjectRequestBuilder(createDTO); - - this.mvc - .perform(secondProjectRequestBuilder) + .perform(getRequest(createDTO)) .andExpect(status().isConflict()); } @Test void shouldNotCreateProjectWhenAdministratorDoesNotExist() throws Exception { - HttpClientErrorException httpClientErrorException = mock(HttpClientErrorException.class); - when(httpClientErrorException.getStatusCode()).thenReturn(HttpStatusCode.valueOf(404)); - - when(this.mockEmployeeApi.findById(1L)) - .thenThrow(httpClientErrorException); + when(this.mockEmployeeApi.findById(Mockito.anyLong())) + .thenThrow(new HttpClientErrorException(HttpStatus.NOT_FOUND)); CreateProjectDTO createDTO = new CreateProjectDTO(); createDTO.setName("Test"); @@ -87,14 +76,66 @@ public class CreateTest extends IntegrationTest { createDTO.setStart(LocalDateTime.of(2000, 1, 13, 12, 51)); createDTO.setPlannedEnd(LocalDateTime.of(2002, 3, 21, 11, 42)); - RequestBuilder projectRequestBuilder = createProjectRequestBuilder(createDTO); - this.mvc - .perform(projectRequestBuilder) + .perform(getRequest(createDTO)) .andExpect(status().isNotFound()); } - private RequestBuilder createProjectRequestBuilder(CreateProjectDTO createDTO) throws Exception { + @Test + void shouldReturnUnavailableWhenEmployeeApiIsDown() throws Exception { + + when(this.mockEmployeeApi.findById(Mockito.anyLong())) + .thenThrow(new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR)); + + CreateProjectDTO createDTO = new CreateProjectDTO(); + createDTO.setName("Test"); + createDTO.setGoal("A Test Goal"); + createDTO.setCustomerId(10L); + createDTO.setAdministratorId(1L); + createDTO.setStart(LocalDateTime.of(2000, 1, 13, 12, 51)); + createDTO.setPlannedEnd(LocalDateTime.of(2002, 3, 21, 11, 42)); + + this.mvc + .perform(getRequest(createDTO)) + .andExpect(status().isServiceUnavailable()); + } + + @Test + void shouldReturnInternalServerErrorOnApiClientCrash() throws Exception { + + when(this.mockEmployeeApi.findById(Mockito.anyLong())) + .thenThrow(new RestClientException("Api Client crash")); + + CreateProjectDTO createDTO = new CreateProjectDTO(); + createDTO.setName("Test"); + createDTO.setGoal("A Test Goal"); + createDTO.setCustomerId(10L); + createDTO.setAdministratorId(1L); + createDTO.setStart(LocalDateTime.of(2000, 1, 13, 12, 51)); + createDTO.setPlannedEnd(LocalDateTime.of(2002, 3, 21, 11, 42)); + + this.mvc + .perform(getRequest(createDTO)) + .andExpect(status().isInternalServerError()); + } + + @Test + void shouldReturnUnprocessableWhenDataIsInvalid() throws Exception { + + CreateProjectDTO createDTO = new CreateProjectDTO(); + createDTO.setName("Test"); + createDTO.setGoal("A Test Goal"); + createDTO.setCustomerId(10L); + createDTO.setAdministratorId(1L); + createDTO.setStart(LocalDateTime.of(2003, 1, 13, 12, 51)); + createDTO.setPlannedEnd(LocalDateTime.of(2002, 3, 21, 11, 42)); + + this.mvc + .perform(getRequest(createDTO)) + .andExpect(status().isUnprocessableEntity()); + } + + private RequestBuilder getRequest(CreateProjectDTO createDTO) throws Exception { return MockMvcRequestBuilders .post(baseUri + "/project")