diff --git a/api/agencyservice.yaml b/api/agencyservice.yaml index 8e22e737..d6bbc4e6 100644 --- a/api/agencyservice.yaml +++ b/api/agencyservice.yaml @@ -38,36 +38,39 @@ paths: description: "BAD REQUEST - invalid/incomplete request or body object" 500: description: "INTERNAL SERVER ERROR - server encountered unexpected condition" - /agencies/data/{agencyId}: + /agencies/{agencyIds}: get: tags: - "agency-controller" - summary: "Returns the information of provided agency (Id). [Authorization: none]" - operationId: "getAgency" + summary: "Returns the information of provided agencies (Ids). [Authorization: none]" + operationId: "getAgencies" security: - Bearer: [] parameters: - in: "path" required: true - description: "Agency Id" - name: "agencyId" - type: integer - format: int64 + description: "List of comma-seperated Agency IDs" + name: "agencyIds" + type: "array" + items: + type: integer + format: int64 responses: 200: description: "OK - successfull operation" schema: - $ref: "#/definitions/AgencyResponseDTO" + type: "array" + items: + $ref: "#/definitions/AgencyResponseDTO" 400: description: "BAD REQUEST - invalid/incomplete request or body object" 401: description: "UNAUTHORIZED - no/invalid CSRF token" 500: - description: "INTERNAL SERVER ERROR - server encountered unexpected condition" - + description: "INTERNAL SERVER ERROR - server encountered unexpected condition" + + # Model/object definitions # definitions: - AgencyDTO: - type: "object" - AgencyDataResponseDTO: + AgencyResponseDTO: type: "object" \ No newline at end of file diff --git a/src/main/java/de/caritas/cob/AgencyService/api/controller/AgencyController.java b/src/main/java/de/caritas/cob/AgencyService/api/controller/AgencyController.java index 722e5ff4..3ca8aee1 100644 --- a/src/main/java/de/caritas/cob/AgencyService/api/controller/AgencyController.java +++ b/src/main/java/de/caritas/cob/AgencyService/api/controller/AgencyController.java @@ -49,7 +49,7 @@ public ResponseEntity> getAgencies(@Valid String postcod } List agencies = - agencyService.getListOfAgencies(postcode, optionalConsultingType.get()); + agencyService.getAgencies(postcode, optionalConsultingType.get()); return (agencies != null && agencies.size() > 0) ? new ResponseEntity>(agencies, HttpStatus.OK) @@ -57,15 +57,16 @@ public ResponseEntity> getAgencies(@Valid String postcod } /** - * Returns information of the provided agency (Id) + * Returns information of the provided agencies + * @param agencyIds the List of agency IDs + * @return the List of agencies with information */ @Override - public ResponseEntity getAgency(@PathVariable("agencyId") Long agencyId) { + public ResponseEntity> getAgencies(@PathVariable("agencyIds") List agencyIds) { - AgencyResponseDTO agency = agencyService.getAgency(agencyId); + List agencies = agencyService.getAgencies(agencyIds); - return (agency != null) ? new ResponseEntity(agency, HttpStatus.OK) - : new ResponseEntity(HttpStatus.NOT_FOUND); + return agencies.isEmpty() ? new ResponseEntity<>(HttpStatus.NOT_FOUND) + : new ResponseEntity<>(agencies, HttpStatus.OK); } - } diff --git a/src/main/java/de/caritas/cob/AgencyService/api/repository/agency/AgencyRepository.java b/src/main/java/de/caritas/cob/AgencyService/api/repository/agency/AgencyRepository.java index 144f547a..34ef24bf 100644 --- a/src/main/java/de/caritas/cob/AgencyService/api/repository/agency/AgencyRepository.java +++ b/src/main/java/de/caritas/cob/AgencyService/api/repository/agency/AgencyRepository.java @@ -31,4 +31,7 @@ List findByPostCodeAndConsultingType(@Param(value = "postcode") String p @Param(value = "length") int length, @Param(value = "type") ConsultingType consultingType); Optional findByIdAndDeleteDateNull(Long agencyId); + + List findByIdIn(List agencyIds); + } diff --git a/src/main/java/de/caritas/cob/AgencyService/api/service/AgencyService.java b/src/main/java/de/caritas/cob/AgencyService/api/service/AgencyService.java index de31140f..f8cecd42 100644 --- a/src/main/java/de/caritas/cob/AgencyService/api/service/AgencyService.java +++ b/src/main/java/de/caritas/cob/AgencyService/api/service/AgencyService.java @@ -40,7 +40,7 @@ public AgencyService(ConsultingTypeManager consultingTypeManager, * @param postCode * @return */ - public List getListOfAgencies(String postCode, ConsultingType consultingType) { + public List getAgencies(String postCode, ConsultingType consultingType) { ConsultingTypeSettings consultingTypeSettings = consultingTypeManager.getConsultantTypeSettings(consultingType); @@ -88,27 +88,20 @@ public List getListOfAgencies(String postCode, ConsultingType } /** - * Returns the agency which matches to the provided agencyId - * - * @param agencyId + * Returns a list of {@link AgencyResponseDTO} which match the provided agencyIds + * + * @param agencyIds * @return */ - public AgencyResponseDTO getAgency(Long agencyId) { - - Optional agency; - + public List getAgencies(List agencyIds) { + List agencies; try { - agency = agencyRepository.findByIdAndDeleteDateNull(agencyId); + agencies = agencyRepository.findByIdIn(agencyIds); } catch (DataAccessException ex) { logService.logDatabaseError(ex); - throw new ServiceException("Database error while getting agency"); - } - - if (agency.isPresent()) { - return convertToAgencyResponseDTO(agency.get()); - } else { - return null; + throw new ServiceException("Database error while getting agencies"); } + return agencies.stream().map(this::convertToAgencyResponseDTO).collect(Collectors.toList()); } /** diff --git a/src/main/java/de/caritas/cob/AgencyService/config/SecurityConfig.java b/src/main/java/de/caritas/cob/AgencyService/config/SecurityConfig.java index 07e77a2f..3d82b685 100644 --- a/src/main/java/de/caritas/cob/AgencyService/config/SecurityConfig.java +++ b/src/main/java/de/caritas/cob/AgencyService/config/SecurityConfig.java @@ -67,8 +67,9 @@ protected void configure(HttpSecurity http) throws Exception { CsrfFilter.class) .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .sessionAuthenticationStrategy(sessionAuthenticationStrategy()).and().authorizeRequests() - .antMatchers("/agencies/data/*").permitAll().antMatchers(SpringFoxConfig.whiteList) - .permitAll().antMatchers("/agencies").permitAll().anyRequest().denyAll(); + .antMatchers("/agencies/*").permitAll() + .antMatchers(SpringFoxConfig.whiteList).permitAll() + .antMatchers("/agencies").permitAll().anyRequest().denyAll(); } /** diff --git a/src/test/java/de/caritas/cob/AgencyService/api/controller/AgencyControllerIT.java b/src/test/java/de/caritas/cob/AgencyService/api/controller/AgencyControllerIT.java index e23f61f4..e09e04b7 100644 --- a/src/test/java/de/caritas/cob/AgencyService/api/controller/AgencyControllerIT.java +++ b/src/test/java/de/caritas/cob/AgencyService/api/controller/AgencyControllerIT.java @@ -1,5 +1,17 @@ package de.caritas.cob.AgencyService.api.controller; +import static de.caritas.cob.AgencyService.testHelper.PathConstants.PATH_GET_AGENCIES_WITH_IDS; +import static de.caritas.cob.AgencyService.testHelper.PathConstants.PATH_GET_LIST_OF_AGENCIES; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_ID; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_RESPONSE_DTO; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_RESPONSE_DTO_LIST; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.INVALIDAGENCY_ID; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.INVALID_CONSULTING_TYPE_QUERY; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.INVALID_POSTCODE_QUERY; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.VALID_CONSULTING_TYPE_QUERY; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.VALID_FULL_POSTCODE; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.VALID_MEDIUM_POSTCODE; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.VALID_MEDIUM_POSTCODE_QUERY; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -7,6 +19,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; @@ -27,17 +40,6 @@ @AutoConfigureMockMvc(secure = false) public class AgencyControllerIT { - private final String VALID_MEDIUM_POSTCODE = "postcode=884"; - private final String VALID_CONSULTING_TYPE = "consultingType=1"; - private final String INVALID_POSTCODE = "postcode=12"; - private final String INVALID_CONSULTING_TYPE = "consultingType=99999"; - private final String PATH_GET_LIST_OF_AGENCIES = "/agencies"; - private final String PATH_GET_AGENCY = "/agencies/data/"; - private final String AGENCY_ID = "12"; - private final String INVALIDAGENCY_ID = "12xX"; - private final AgencyResponseDTO AGENCY_RESPONSE_DTO = new AgencyResponseDTO(1L, "name", "12345", "testcity", - "description", false, false, ConsultingType.SUCHT.getValue()); - @Autowired private MockMvc mvc; @@ -45,96 +47,96 @@ public class AgencyControllerIT { private AgencyService agencyService; @Test - public void getAgencies_Should_ReturnNoContent_WhenServiceReturnsEmptyList() throws Exception { + public void getAgencies_Should_ReturnNoContent_When_ServiceReturnsEmptyList() throws Exception { - when(agencyService.getListOfAgencies(Mockito.anyString(), Mockito.any(ConsultingType.class))) + when(agencyService.getAgencies(Mockito.anyString(), Mockito.any(ConsultingType.class))) .thenReturn(null); mvc.perform( - get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_MEDIUM_POSTCODE + "&" + VALID_CONSULTING_TYPE) + get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_MEDIUM_POSTCODE_QUERY + "&" + VALID_CONSULTING_TYPE_QUERY) .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNoContent()); } @Test - public void getAgencies_Should_ReturnBadRequest_WhenPostcodeParamIsInvalid() throws Exception { + public void getAgencies_Should_ReturnBadRequest_When_PostcodeParamIsInvalid() throws Exception { mvc.perform( - get(PATH_GET_LIST_OF_AGENCIES + "?" + INVALID_POSTCODE + "&" + VALID_CONSULTING_TYPE) + get(PATH_GET_LIST_OF_AGENCIES + "?" + INVALID_POSTCODE_QUERY + "&" + VALID_CONSULTING_TYPE_QUERY) .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isBadRequest()); } @Test - public void getAgencies_Should_ReturnBadRequest_WhenConsultingTypeParamIsInvalid() + public void getAgencies_Should_ReturnBadRequest_When_ConsultingTypeParamIsInvalid() throws Exception { mvc.perform( - get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_MEDIUM_POSTCODE + "&" + INVALID_CONSULTING_TYPE) + get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_MEDIUM_POSTCODE_QUERY + "&" + INVALID_CONSULTING_TYPE_QUERY) .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isBadRequest()); } @Test - public void getAgencies_Should_ReturnBadRequest_WhenPostcodeParamIsNotProvided() + public void getAgencies_Should_ReturnBadRequest_When_PostcodeParamIsNotProvided() throws Exception { - mvc.perform(get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_CONSULTING_TYPE) + mvc.perform(get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_CONSULTING_TYPE_QUERY) .accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest()); } @Test - public void getAgencies_Should_ReturnBadRequest_WhenConsultingTypeParamIsNotProvided() + public void getAgencies_Should_ReturnBadRequest_When_ConsultingTypeParamIsNotProvided() throws Exception { - mvc.perform(get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_MEDIUM_POSTCODE) + mvc.perform(get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_MEDIUM_POSTCODE_QUERY) .accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest()); } @Test - public void getAgencies_Should_ReturnListAndOK_WhenServiceReturnsList() throws Exception { + public void getAgencies_Should_ReturnListAndOk_When_ServiceReturnsList() throws Exception { List agencies = new ArrayList(); agencies.add(AGENCY_RESPONSE_DTO); - when(agencyService.getListOfAgencies(Mockito.anyString(), Mockito.any(ConsultingType.class))) + when(agencyService.getAgencies(Mockito.anyString(), Mockito.any(ConsultingType.class))) .thenReturn(agencies); mvc.perform( - get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_MEDIUM_POSTCODE + "&" + VALID_CONSULTING_TYPE) + get(PATH_GET_LIST_OF_AGENCIES + "?" + VALID_MEDIUM_POSTCODE_QUERY + "&" + VALID_CONSULTING_TYPE_QUERY) .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("[0].name").value(AGENCY_RESPONSE_DTO.getName())); - verify(agencyService, atLeastOnce()).getListOfAgencies(Mockito.anyString(), + verify(agencyService, atLeastOnce()).getAgencies(Mockito.anyString(), Mockito.any(ConsultingType.class)); } @Test - public void getAgency_Should_ReturnNoContent_WhenServiceReturnsNoAgency() throws Exception { + public void getAgencies_With_Ids_Should_ReturnNoContent_When_ServiceReturnsNoAgency() throws Exception { - when(agencyService.getAgency(Mockito.anyLong())).thenReturn(null); + when(agencyService.getAgencies(Mockito.anyList())).thenReturn(Collections.emptyList()); - mvc.perform(get(PATH_GET_AGENCY + AGENCY_ID).accept(MediaType.APPLICATION_JSON)) + mvc.perform(get(PATH_GET_AGENCIES_WITH_IDS + AGENCY_ID).accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()); } @Test - public void getAgency_Should_ReturnBadRequest_WhenPathParamIsInvalid() throws Exception { + public void getAgencies_With_Ids_Should_ReturnBadRequest_When_IdInvalid() throws Exception { - mvc.perform(get(PATH_GET_AGENCY + INVALIDAGENCY_ID).contentType(MediaType.APPLICATION_JSON) + mvc.perform(get(PATH_GET_AGENCIES_WITH_IDS + INVALIDAGENCY_ID).contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest()); } @Test - public void getAgency_Should_ReturnAgencyAndOK_WhenServiceReturnsAgency() throws Exception { + public void getAgencies_With_Ids_Should_ReturnAgencyAndOk_When_ServiceReturnsAgency() throws Exception { - when(agencyService.getAgency(Mockito.anyLong())).thenReturn(AGENCY_RESPONSE_DTO); + when(agencyService.getAgencies(Mockito.anyList())).thenReturn(AGENCY_RESPONSE_DTO_LIST); - mvc.perform(get(PATH_GET_AGENCY + AGENCY_ID).accept(MediaType.APPLICATION_JSON)) + mvc.perform(get(PATH_GET_AGENCIES_WITH_IDS + AGENCY_ID + "," + AGENCY_ID).accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) - .andExpect(jsonPath("name").value(AGENCY_RESPONSE_DTO.getName())); + .andExpect(jsonPath("[0].name").value(AGENCY_RESPONSE_DTO.getName())); - verify(agencyService, atLeastOnce()).getAgency(Mockito.anyLong()); + verify(agencyService, atLeastOnce()).getAgencies(Mockito.anyList()); } } diff --git a/src/test/java/de/caritas/cob/AgencyService/api/service/AgencyServiceTest.java b/src/test/java/de/caritas/cob/AgencyService/api/service/AgencyServiceTest.java index 90abd665..6d65b9dd 100644 --- a/src/test/java/de/caritas/cob/AgencyService/api/service/AgencyServiceTest.java +++ b/src/test/java/de/caritas/cob/AgencyService/api/service/AgencyServiceTest.java @@ -1,9 +1,23 @@ package de.caritas.cob.AgencyService.api.service; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_ID; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_IDS_LIST; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_LIST; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_OFFLINE; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_ONLINE_U25; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_RESPONSE_DTO; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.AGENCY_SUCHT; import static de.caritas.cob.AgencyService.testHelper.TestConstants.CONSULTING_TYPE_EMIGRATION; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.CONSULTING_TYPE_SETTINGS_EMIGRATION; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.CONSULTING_TYPE_SETTINGS_WITHOUT_WHITESPOT_AGENCY; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.CONSULTING_TYPE_SETTINGS_WITH_WHITESPOT_AGENCY; import static de.caritas.cob.AgencyService.testHelper.TestConstants.CONSULTING_TYPE_SUCHT; -import static de.caritas.cob.AgencyService.testHelper.TestConstants.CONSULTING_TYPE_U25; -import static de.caritas.cob.AgencyService.testHelper.TestConstants.WHITESPOT_AGENCY_ID; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.EMPTY_AGENCY_LIST; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.FIELD_AGENCY_ID; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.POSTCODE; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.VALID_FULL_POSTCODE; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.VALID_MEDIUM_INT; +import static de.caritas.cob.AgencyService.testHelper.TestConstants.VALID_MEDIUM_POSTCODE; import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.everyItem; import static org.hamcrest.CoreMatchers.instanceOf; @@ -15,8 +29,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.Collections; import java.util.Optional; import org.hamcrest.collection.IsEmptyCollection; import org.junit.Test; @@ -28,9 +41,6 @@ import org.springframework.dao.DataAccessException; import de.caritas.cob.AgencyService.api.exception.ServiceException; import de.caritas.cob.AgencyService.api.manager.consultingType.ConsultingTypeManager; -import de.caritas.cob.AgencyService.api.manager.consultingType.ConsultingTypeSettings; -import de.caritas.cob.AgencyService.api.manager.consultingType.registration.Registration; -import de.caritas.cob.AgencyService.api.manager.consultingType.whiteSpot.WhiteSpot; import de.caritas.cob.AgencyService.api.model.AgencyResponseDTO; import de.caritas.cob.AgencyService.api.repository.agency.Agency; import de.caritas.cob.AgencyService.api.repository.agency.AgencyRepository; @@ -38,46 +48,6 @@ @RunWith(MockitoJUnitRunner.class) public class AgencyServiceTest { - private final String POSTCODE = "postcode"; - private final String FIELD_AGENCY_ID = "id"; - private final String VALID_FULL_POSTCODE = "12345"; - private final String AGENCY_CITY = "Test city"; - private final String VALID_MEDIUM_POSTCODE = "884"; - private final int VALID_MEDIUM_INT = 3; - private final Long AGENCY_ID = 98L; - private final String AGENCY_NAME = "Test agency"; - private final String AGENCY_DESCRIPTION = "Test description"; - private final Agency AGENCY_SUCHT = new Agency(AGENCY_ID, 10L, AGENCY_NAME, AGENCY_DESCRIPTION, - VALID_FULL_POSTCODE, "Test city", false, CONSULTING_TYPE_SUCHT, false, null); - private final Agency AGENCY_ONLINE_U25 = - new Agency(AGENCY_ID, 10L, AGENCY_NAME, AGENCY_DESCRIPTION, VALID_FULL_POSTCODE, "Test city", - false, CONSULTING_TYPE_U25, false, null); - private final Agency AGENCY_OFFLINE = new Agency(AGENCY_ID, 10L, AGENCY_NAME, AGENCY_DESCRIPTION, - VALID_FULL_POSTCODE, "Test city", false, CONSULTING_TYPE_SUCHT, true, null); - private final Agency TEAM_AGENCY = new Agency(AGENCY_ID, 10L, AGENCY_NAME, AGENCY_DESCRIPTION, - VALID_FULL_POSTCODE, "Test city", true, CONSULTING_TYPE_SUCHT, false, null); - private final AgencyResponseDTO AGENCY_RESPONSE_DTO = - new AgencyResponseDTO(AGENCY_ID, AGENCY_NAME, VALID_FULL_POSTCODE, AGENCY_CITY, AGENCY_DESCRIPTION, false, - false, CONSULTING_TYPE_SUCHT.getValue()); - private final int MIN_POSTCODE_SIZE_3 = 3; - private final int MIN_POSTCODE_SIZE_5 = 5; - private final WhiteSpot WHITESPOT_AGENCIES_SUCHT = new WhiteSpot(true, WHITESPOT_AGENCY_ID); - private final WhiteSpot WHITESPOT_AGENCIES_U25 = new WhiteSpot(false, WHITESPOT_AGENCY_ID); - private final WhiteSpot WHITESPOT_AGENCIES_EMIGRATION = new WhiteSpot(false, WHITESPOT_AGENCY_ID); - private final Registration REGISTRATION_SUCHT = new Registration(MIN_POSTCODE_SIZE_3); - private final Registration REGISTRATION_U25 = new Registration(MIN_POSTCODE_SIZE_3); - private final Registration REGISTRATION_EMIGRATION = new Registration(MIN_POSTCODE_SIZE_5); - private final ConsultingTypeSettings CONSULTING_TYPE_SETTINGS_WITH_WHITESPOT_AGENCY = - new ConsultingTypeSettings(CONSULTING_TYPE_SUCHT, WHITESPOT_AGENCIES_SUCHT, - REGISTRATION_SUCHT); - private final ConsultingTypeSettings CONSULTING_TYPE_SETTINGS_WITHOUT_WHITESPOT_AGENCY = - new ConsultingTypeSettings(CONSULTING_TYPE_U25, WHITESPOT_AGENCIES_U25, REGISTRATION_U25); - private final ConsultingTypeSettings CONSULTING_TYPE_SETTINGS_EMIGRATION = - new ConsultingTypeSettings(CONSULTING_TYPE_U25, WHITESPOT_AGENCIES_EMIGRATION, - REGISTRATION_EMIGRATION); - private final List EMPTY_AGENCY_LIST = new ArrayList(); - private final List AGENCY_LIST = Arrays.asList(AGENCY_SUCHT); - @InjectMocks private AgencyService agencyService; @Mock @@ -100,7 +70,7 @@ public void getListOfAgencies_Should_ReturnServiceExceptionAndLogDatabaseError_O CONSULTING_TYPE_SUCHT)).thenThrow(dbEx); try { - agencyService.getListOfAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT); + agencyService.getAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT); fail("Expected exception: ServiceException"); } catch (ServiceException serviceException) { assertTrue("Excepted ServiceException thrown", true); @@ -122,7 +92,7 @@ public void getListOfAgencies_Should_ReturnServiceExceptionAndLogNumberFormatErr when(agencyRepository.findByIdAndDeleteDateNull(Mockito.anyLong())).thenThrow(nfEx); try { - agencyService.getListOfAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT); + agencyService.getAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT); fail("Expected exception: ServiceException"); } catch (ServiceException serviceException) { assertTrue("Excepted ServiceException thrown", true); @@ -146,7 +116,7 @@ public void getListOfAgencies_Should_ReturnServiceExceptionAndLogDatabaseError_O when(agencyRepository.findByIdAndDeleteDateNull(Mockito.anyLong())).thenThrow(dbEx); try { - agencyService.getListOfAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT); + agencyService.getAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT); fail("Expected exception: ServiceException"); } catch (ServiceException serviceException) { assertTrue("Excepted ServiceException thrown", true); @@ -164,9 +134,9 @@ public void getListOfAgencies_Should_ReturnListOfAgencyResponseDTO_WhenDBSelectI when(consultingTypeManager.getConsultantTypeSettings(Mockito.any())) .thenReturn(CONSULTING_TYPE_SETTINGS_WITH_WHITESPOT_AGENCY); - assertThat(agencyService.getListOfAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT), + assertThat(agencyService.getAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT), everyItem(instanceOf(AgencyResponseDTO.class))); - assertThat(agencyService.getListOfAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT)) + assertThat(agencyService.getAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT)) .extracting(POSTCODE).contains(VALID_FULL_POSTCODE); } @@ -182,7 +152,7 @@ public void getListOfAgencies_Should_ReturnWhiteSpotAgency_WhenNoAgencyFoundForG when(consultingTypeManager.getConsultantTypeSettings(Mockito.any())) .thenReturn(CONSULTING_TYPE_SETTINGS_WITH_WHITESPOT_AGENCY); - assertThat(agencyService.getListOfAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT)) + assertThat(agencyService.getAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT)) .extracting(FIELD_AGENCY_ID).contains(AGENCY_ID); } @@ -195,32 +165,32 @@ public void getListOfAgencies_Should_ReturnEmptyList_WhenNoAgencyFoundForGivenPo when(consultingTypeManager.getConsultantTypeSettings(Mockito.any())) .thenReturn(CONSULTING_TYPE_SETTINGS_WITHOUT_WHITESPOT_AGENCY); - assertThat(agencyService.getListOfAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT), + assertThat(agencyService.getAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_SUCHT), IsEmptyCollection.empty()); } @Test - public void getListOfAgencies_Should_ReturnEmptyList_WhenPostcodeSizeIsSmallerThanMinSettingsValue() + public void getListOfAgencies_Should_ReturnEmptyList_When_PostcodeSizeIsSmallerThanMinSettingsValue() throws Exception { when(consultingTypeManager.getConsultantTypeSettings(Mockito.any())) .thenReturn(CONSULTING_TYPE_SETTINGS_EMIGRATION); - assertThat(agencyService.getListOfAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_EMIGRATION), + assertThat(agencyService.getAgencies(VALID_MEDIUM_POSTCODE, CONSULTING_TYPE_EMIGRATION), IsEmptyCollection.empty()); } @Test - public void getAgency_Should_ReturnServiceExceptionAndLogDatabaseError_OnDatabaseError() + public void getAgencies_With_Ids_Should_ReturnServiceExceptionAndLogDatabaseError_OnDatabaseError() throws Exception { @SuppressWarnings("serial") DataAccessException dbEx = new DataAccessException("db error") {}; - when(agencyRepository.findByIdAndDeleteDateNull(AGENCY_ID)).thenThrow(dbEx); + when(agencyRepository.findByIdIn(AGENCY_IDS_LIST)).thenThrow(dbEx); try { - agencyService.getAgency(AGENCY_ID); + agencyService.getAgencies(Collections.singletonList(AGENCY_ID)); fail("Expected exception: ServiceException"); } catch (ServiceException serviceException) { assertTrue("Excepted ServiceException thrown", true); @@ -230,31 +200,13 @@ public void getAgency_Should_ReturnServiceExceptionAndLogDatabaseError_OnDatabas } @Test - public void getAgency_Should_Return_False_WhenAgencyIsNoTeamAgency() throws Exception { - - when(agencyRepository.findByIdAndDeleteDateNull(AGENCY_ID)) - .thenReturn(Optional.of(AGENCY_SUCHT)); - AgencyResponseDTO result = agencyService.getAgency(AGENCY_ID); - assertEquals(false, result.isTeamAgency()); - } - - @Test - public void getAgency_Should_Return_True_WhenAgencyIsTeamAgency() throws Exception { - - when(agencyRepository.findByIdAndDeleteDateNull(AGENCY_ID)) - .thenReturn(Optional.of(TEAM_AGENCY)); - AgencyResponseDTO result = agencyService.getAgency(AGENCY_ID); - assertEquals(true, result.isTeamAgency()); - } - - @Test - public void getAgency_Should_ReturnAgencyResponseDTO_WhenDBSelectIsSuccessfull() + public void getAgencies_With_Ids_Should_ReturnListOfAgencyResponseDTO_When_DBSelectIsSuccessfull() throws Exception { - when(agencyRepository.findByIdAndDeleteDateNull(AGENCY_ID)) - .thenReturn(Optional.of(AGENCY_SUCHT)); + when(agencyRepository.findByIdIn(AGENCY_IDS_LIST)) + .thenReturn(AGENCY_LIST); - AgencyResponseDTO result = agencyService.getAgency(AGENCY_ID); + AgencyResponseDTO result = agencyService.getAgencies(AGENCY_IDS_LIST).get(0); assertEquals(AGENCY_RESPONSE_DTO.getPostcode(), result.getPostcode()); assertEquals(AGENCY_RESPONSE_DTO.getCity(), result.getCity()); @@ -264,34 +216,39 @@ public void getAgency_Should_ReturnAgencyResponseDTO_WhenDBSelectIsSuccessfull() assertEquals(AGENCY_RESPONSE_DTO.isTeamAgency(), result.isTeamAgency()); assertEquals(AGENCY_RESPONSE_DTO.isOffline(), result.isOffline()); assertEquals(AGENCY_RESPONSE_DTO.getConsultingType(), result.getConsultingType()); + assertThat(agencyService.getAgencies(Collections.singletonList(AGENCY_ID)), + everyItem(instanceOf(AgencyResponseDTO.class))); } @Test - public void getAgency_Should_ReturnCorrectOfflineFlag_WhenAgencyIsOnline() throws Exception { + public void getAgencies_With_Ids_Should_ReturnCorrectOfflineFlag_When_AgencyIsOnline() throws Exception { - when(agencyRepository.findByIdAndDeleteDateNull(AGENCY_ID)) - .thenReturn(Optional.of(AGENCY_ONLINE_U25)); - AgencyResponseDTO result = agencyService.getAgency(AGENCY_ID); - assertEquals(result.isOffline(), false); + when(agencyRepository.findByIdIn(AGENCY_IDS_LIST)) + .thenReturn(Collections.singletonList(AGENCY_ONLINE_U25)); + + AgencyResponseDTO result = agencyService.getAgencies(Collections.singletonList(AGENCY_ID)).get(0); + assertEquals(result.isOffline(), false); } @Test - public void getAgency_Should_ReturnCorrectOfflineFlag_WhenAgencyIsOffline() throws Exception { + public void getAgencies_With_Ids_Should_ReturnCorrectOfflineFlag_When_AgencyIsOffline() throws Exception { - when(agencyRepository.findByIdAndDeleteDateNull(AGENCY_ID)) - .thenReturn(Optional.of(AGENCY_OFFLINE)); - AgencyResponseDTO result = agencyService.getAgency(AGENCY_ID); - assertEquals(result.isOffline(), true); + when(agencyRepository.findByIdIn(AGENCY_IDS_LIST)) + .thenReturn(Collections.singletonList(AGENCY_OFFLINE)); + + AgencyResponseDTO result = agencyService.getAgencies(AGENCY_IDS_LIST).get(0); + assertEquals(result.isOffline(), true); } @Test - public void getAgency_Should_ReturnNull_WhenNoAgencyFound() throws Exception { + public void getAgencies_Should_ReturnEmptyList_When_NoAgencyFoundForGivenId() + throws Exception { - when(agencyRepository.findByIdAndDeleteDateNull(AGENCY_ID)).thenReturn(Optional.empty()); + when(agencyRepository.findByIdIn(AGENCY_IDS_LIST)).thenReturn(new ArrayList()); - assertEquals(null, agencyService.getAgency(AGENCY_ID)); + assertThat(agencyService.getAgencies(AGENCY_IDS_LIST), + IsEmptyCollection.empty()); } - } diff --git a/src/test/java/de/caritas/cob/AgencyService/testHelper/PathConstants.java b/src/test/java/de/caritas/cob/AgencyService/testHelper/PathConstants.java new file mode 100644 index 00000000..eca31887 --- /dev/null +++ b/src/test/java/de/caritas/cob/AgencyService/testHelper/PathConstants.java @@ -0,0 +1,8 @@ +package de.caritas.cob.AgencyService.testHelper; + +public class PathConstants { + + public static final String PATH_GET_LIST_OF_AGENCIES = "/agencies"; + public static final String PATH_GET_AGENCIES_WITH_IDS = "/agencies/"; + +} diff --git a/src/test/java/de/caritas/cob/AgencyService/testHelper/TestConstants.java b/src/test/java/de/caritas/cob/AgencyService/testHelper/TestConstants.java index 1f8ac091..e7ccf51a 100644 --- a/src/test/java/de/caritas/cob/AgencyService/testHelper/TestConstants.java +++ b/src/test/java/de/caritas/cob/AgencyService/testHelper/TestConstants.java @@ -1,6 +1,11 @@ package de.caritas.cob.AgencyService.testHelper; +import de.caritas.cob.AgencyService.api.model.AgencyResponseDTO; +import de.caritas.cob.AgencyService.api.repository.agency.Agency; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import de.caritas.cob.AgencyService.api.manager.consultingType.ConsultingTypeSettings; import de.caritas.cob.AgencyService.api.manager.consultingType.registration.Registration; @@ -128,4 +133,50 @@ public class TestConstants { put(CONSULTING_TYPE_SUCHT.getValue(), CONSULTING_TYPE_SETTINGS_SUCHT); } }; + + public static final String POSTCODE = "postcode"; + public static final String FIELD_AGENCY_ID = "id"; + public static final String VALID_FULL_POSTCODE = "12345"; + public static final String AGENCY_CITY = "Test city"; + public static final String VALID_MEDIUM_POSTCODE = "884"; + public static final String VALID_MEDIUM_POSTCODE_QUERY = "postcode=884"; + public static final int VALID_MEDIUM_INT = 3; + public static final Long AGENCY_ID = 98L; + public static final String AGENCY_NAME = "Test agency"; + public static final String AGENCY_DESCRIPTION = "Test description"; + public static final Agency AGENCY_SUCHT = new Agency(AGENCY_ID, 10L, AGENCY_NAME, AGENCY_DESCRIPTION, + VALID_FULL_POSTCODE, "Test city", false, CONSULTING_TYPE_SUCHT, false, null); + public static final Agency AGENCY_ONLINE_U25 = + new Agency(AGENCY_ID, 10L, AGENCY_NAME, AGENCY_DESCRIPTION, VALID_FULL_POSTCODE, "Test city", + false, CONSULTING_TYPE_U25, false, null); + public static final Agency AGENCY_OFFLINE = new Agency(AGENCY_ID, 10L, AGENCY_NAME, AGENCY_DESCRIPTION, + VALID_FULL_POSTCODE, "Test city", false, CONSULTING_TYPE_SUCHT, true, null); + public static final Agency TEAM_AGENCY = new Agency(AGENCY_ID, 10L, AGENCY_NAME, AGENCY_DESCRIPTION, + VALID_FULL_POSTCODE, "Test city", true, CONSULTING_TYPE_SUCHT, false, null); + public static final AgencyResponseDTO AGENCY_RESPONSE_DTO = + new AgencyResponseDTO(AGENCY_ID, AGENCY_NAME, VALID_FULL_POSTCODE, AGENCY_CITY, AGENCY_DESCRIPTION, false, + false, CONSULTING_TYPE_SUCHT.getValue()); + public static final List AGENCY_RESPONSE_DTO_LIST = Collections.singletonList(AGENCY_RESPONSE_DTO); + public static final int MIN_POSTCODE_SIZE_3 = 3; + public static final int MIN_POSTCODE_SIZE_5 = 5; + public static final WhiteSpot WHITESPOT_AGENCIES_SUCHT = new WhiteSpot(true, WHITESPOT_AGENCY_ID); + public static final WhiteSpot WHITESPOT_AGENCIES_U25 = new WhiteSpot(false, WHITESPOT_AGENCY_ID); + public static final WhiteSpot WHITESPOT_AGENCIES_EMIGRATION = new WhiteSpot(false, WHITESPOT_AGENCY_ID); + public static final Registration REGISTRATION_SUCHT = new Registration(MIN_POSTCODE_SIZE_3); + public static final Registration REGISTRATION_U25 = new Registration(MIN_POSTCODE_SIZE_3); + public static final Registration REGISTRATION_EMIGRATION = new Registration(MIN_POSTCODE_SIZE_5); + public static final ConsultingTypeSettings CONSULTING_TYPE_SETTINGS_WITH_WHITESPOT_AGENCY = + new ConsultingTypeSettings(CONSULTING_TYPE_SUCHT, WHITESPOT_AGENCIES_SUCHT, + REGISTRATION_SUCHT); + public static final ConsultingTypeSettings CONSULTING_TYPE_SETTINGS_WITHOUT_WHITESPOT_AGENCY = + new ConsultingTypeSettings(CONSULTING_TYPE_U25, WHITESPOT_AGENCIES_U25, REGISTRATION_U25); + + public static final List EMPTY_AGENCY_LIST = new ArrayList(); + public static final List AGENCY_LIST = Collections.singletonList(AGENCY_SUCHT); + public static final List AGENCY_IDS_LIST = Collections.singletonList(AGENCY_ID); + + public static final String VALID_CONSULTING_TYPE_QUERY = "consultingType=0"; + public static final String INVALID_POSTCODE_QUERY = "postcode=12"; + public static final String INVALID_CONSULTING_TYPE_QUERY = "consultingType=99999"; + public static final String INVALIDAGENCY_ID = "12xX"; }