diff --git a/build.gradle b/build.gradle index 840a5176c..48a740513 100644 --- a/build.gradle +++ b/build.gradle @@ -516,8 +516,6 @@ dependencies { pactTestImplementation sourceSets.test.runtimeClasspath } - - dependencyManagement { dependencies { diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/UpdateStaffReferenceProfileTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/UpdateStaffReferenceProfileTest.java index 5b4ac7531..10eb75cd1 100644 --- a/src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/UpdateStaffReferenceProfileTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/UpdateStaffReferenceProfileTest.java @@ -11,11 +11,13 @@ import org.skyscreamer.jsonassert.JSONCompareMode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import uk.gov.hmcts.reform.cwrdapi.controllers.request.CaseWorkerLocationRequest; import uk.gov.hmcts.reform.cwrdapi.controllers.request.CaseWorkerServicesRequest; import uk.gov.hmcts.reform.cwrdapi.controllers.request.SkillsRequest; import uk.gov.hmcts.reform.cwrdapi.controllers.request.StaffProfileCreationRequest; import uk.gov.hmcts.reform.cwrdapi.controllers.request.StaffProfileRoleRequest; +import uk.gov.hmcts.reform.cwrdapi.controllers.response.SearchStaffUserResponse; import uk.gov.hmcts.reform.cwrdapi.domain.StaffAudit; import uk.gov.hmcts.reform.cwrdapi.repository.CaseWorkerLocationRepository; import uk.gov.hmcts.reform.cwrdapi.repository.CaseWorkerProfileRepository; @@ -31,9 +33,12 @@ import static org.apache.logging.log4j.util.Strings.EMPTY; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static uk.gov.hmcts.reform.cwrdapi.util.CaseWorkerConstants.DUPLICATE_PRIMARY_AND_SECONDARY_ROLES; import static uk.gov.hmcts.reform.cwrdapi.util.CaseWorkerConstants.DUPLICATE_SERVICE_CODE_IN_AREA_OF_WORK; import static uk.gov.hmcts.reform.cwrdapi.util.CaseWorkerConstants.INVALID_EMAIL; +import static uk.gov.hmcts.reform.cwrdapi.util.CaseWorkerConstants.INVALID_PROFILE; import static uk.gov.hmcts.reform.cwrdapi.util.CaseWorkerConstants.NO_PRIMARY_LOCATION_PRESENT_PROFILE; import static uk.gov.hmcts.reform.cwrdapi.util.CaseWorkerConstants.NO_PRIMARY_ROLE_PRESENT_PROFILE; @@ -112,7 +117,7 @@ void should_return_update_staff_user_with_status_code_200_child_tables_size() th request.setFirstName("StaffProfilefirstNameCN"); request.setLastName("StaffProfilelastNameCN"); - + request.setResendInvite(false); Map response = caseworkerReferenceDataClient .updateStaffProfile(request,ROLE_STAFF_ADMIN); @@ -403,6 +408,63 @@ void should_return_update_staff_user_with_status_code_400_invalid_roles() throws } + @Test + void should_return_reinvite_staff_user_with_status_code_404_profile_doesnot_exist() throws Exception { + + StaffProfileCreationRequest request = caseWorkerReferenceDataClient.createStaffProfileCreationRequest(); + request.setEmailId("test@test.com"); + request.setResendInvite(true); + + Map response = caseworkerReferenceDataClient + .updateStaffProfile(request,ROLE_STAFF_ADMIN); + + assertThat(response.get("http_status")).isEqualTo("404"); + String responseBody = (String) response.get("response_body"); + assertThat(responseBody.contains(INVALID_PROFILE)).isTrue(); + + } + + @Test + void should_return_reinvite_staff_user_with_status_code_200_profile() throws Exception { + + StaffProfileCreationRequest request = caseWorkerReferenceDataClient.createStaffProfileCreationRequest(); + userProfilePostUserWireMockForStaffProfile(HttpStatus.CREATED); + request.setResendInvite(true); + + Map createResponse = caseworkerReferenceDataClient.createStaffProfile(request,ROLE_STAFF_ADMIN); + Map createBody = (Map)createResponse.get("body"); + Map resendResponse = caseworkerReferenceDataClient.updateStaffProfile(request,ROLE_STAFF_ADMIN); + + assertThat(resendResponse).isNotNull(); + assertThat(resendResponse.get("http_status")).isEqualTo("200 OK"); + Map resendResponseBody = (Map) resendResponse.get("body"); + assertEquals(createBody.get("case_worker_id"), resendResponseBody.get("case_worker_id")); + } + + @Test + void should_update_IdamId_when_reinvite_staff_user_true_in_crd() throws Exception { + + StaffProfileCreationRequest request = caseWorkerReferenceDataClient.createStaffProfileCreationRequest(); + userProfilePostUserWireMockForStaffProfile(false); + userProfilePostUserWireMockForStaffProfile(true); + + Map createResponse = caseworkerReferenceDataClient.createStaffProfile(request,ROLE_STAFF_ADMIN); + request.setResendInvite(true); + Map createBody = (Map)createResponse.get("body"); + Map resendResponse = caseworkerReferenceDataClient.updateStaffProfile(request,ROLE_STAFF_ADMIN); + assertThat(resendResponse).isNotNull(); + assertThat(resendResponse.get("http_status")).isEqualTo("200 OK"); + Map resendResponseBody = (Map) resendResponse.get("body"); + assertNotEquals(createBody.get("case_worker_id"), resendResponseBody.get("case_worker_id")); + + String path = "/profile/search-by-name"; + ResponseEntity fetchStaff = caseworkerReferenceDataClient + .searchStaffUserByNameExchange(path, request.getFirstName(), "1", "1", + ROLE_STAFF_ADMIN); + assertEquals(resendResponseBody.get("case_worker_id"), fetchStaff.getBody()[0].getCaseWorkerId()); + assertNotEquals(fetchStaff.getBody()[0].getCaseWorkerId(), createBody.get("case_worker_id")); + } + public StaffProfileCreationRequest getStaffProfileCreationRequest() { StaffProfileRoleRequest staffProfileRoleRequest1 = @@ -470,4 +532,7 @@ public StaffProfileCreationRequest getStaffProfileCreationRequest() { } + + + } \ No newline at end of file diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/util/AuthorizationEnabledIntegrationTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/util/AuthorizationEnabledIntegrationTest.java index eb1788d24..2bc03d4e2 100644 --- a/src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/util/AuthorizationEnabledIntegrationTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/util/AuthorizationEnabledIntegrationTest.java @@ -37,6 +37,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.delete; +import static com.github.tomakehurst.wiremock.client.WireMock.equalToJson; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.put; @@ -253,6 +254,19 @@ public void userProfilePostUserWireMockForStaffProfile(HttpStatus status) { + "}"))); } + public void userProfilePostUserWireMockForStaffProfile(boolean resend) { + userProfileService.stubFor(post(urlPathMatching("/v1/userprofile")) + .withRequestBody(equalToJson("{ \"resendInvite\": " + resend + "}", true, + true)) + .willReturn(aResponse() + .withHeader("Content-Type", "application/json") + .withStatus(201) + .withBody("{" + + " \"idamId\":\"" + UUID.randomUUID() + "\"," + + " \"idamRegistrationResponse\":\"" + 201 + "\"" + + "}"))); + } + public static class CaseWorkerTransformer extends ResponseTransformer { @Override public Response transform(Request request, Response response, FileSource files, Parameters parameters) { diff --git a/src/main/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataController.java b/src/main/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataController.java index 16fd55cb8..1987e9d50 100644 --- a/src/main/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataController.java +++ b/src/main/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataController.java @@ -406,15 +406,17 @@ public ResponseEntity> searchStaffProfile( public ResponseEntity updateStaffUserProfile(@RequestBody StaffProfileCreationRequest staffProfileCreationRequest) { log.info("Inside updateStaffUserProfile Controller"); - StaffProfileCreationResponse staffProfileCreationResponse = null; + StaffProfileCreationResponse staffProfileCreationResponse; - staffProfileCreationResponse = staffRefDataService.updateStaffProfile(staffProfileCreationRequest); + if (staffProfileCreationRequest.isResendInvite()) { + staffProfileCreationResponse = staffRefDataService.reinviteStaffProfile(staffProfileCreationRequest); + } else { + staffProfileCreationResponse = staffRefDataService.updateStaffProfile(staffProfileCreationRequest); + } if (isNotEmpty(staffProfileCreationResponse)) { staffRefDataService.publishStaffProfileToTopic(staffProfileCreationResponse); } return ResponseEntity.status(HttpStatus.OK).body(staffProfileCreationResponse); } - - } diff --git a/src/main/java/uk/gov/hmcts/reform/cwrdapi/controllers/request/StaffProfileCreationRequest.java b/src/main/java/uk/gov/hmcts/reform/cwrdapi/controllers/request/StaffProfileCreationRequest.java index d4d36751a..abc3f2195 100644 --- a/src/main/java/uk/gov/hmcts/reform/cwrdapi/controllers/request/StaffProfileCreationRequest.java +++ b/src/main/java/uk/gov/hmcts/reform/cwrdapi/controllers/request/StaffProfileCreationRequest.java @@ -87,4 +87,8 @@ public class StaffProfileCreationRequest { @JsonProperty("skills") private List skills; + + @JsonProperty("is_resend_invite") + private boolean resendInvite; + } diff --git a/src/main/java/uk/gov/hmcts/reform/cwrdapi/service/StaffRefDataService.java b/src/main/java/uk/gov/hmcts/reform/cwrdapi/service/StaffRefDataService.java index 7533ab608..4d0c69c79 100644 --- a/src/main/java/uk/gov/hmcts/reform/cwrdapi/service/StaffRefDataService.java +++ b/src/main/java/uk/gov/hmcts/reform/cwrdapi/service/StaffRefDataService.java @@ -45,7 +45,7 @@ public interface StaffRefDataService { ResponseEntity> retrieveStaffProfile(SearchRequest searchRequest, PageRequest pageRequest); - + StaffProfileCreationResponse reinviteStaffProfile(StaffProfileCreationRequest profileRequest); StaffProfileCreationResponse updateStaffProfile(StaffProfileCreationRequest staffProfileRequest); } diff --git a/src/main/java/uk/gov/hmcts/reform/cwrdapi/service/impl/StaffRefDataServiceImpl.java b/src/main/java/uk/gov/hmcts/reform/cwrdapi/service/impl/StaffRefDataServiceImpl.java index b960b893b..9bebf6749 100644 --- a/src/main/java/uk/gov/hmcts/reform/cwrdapi/service/impl/StaffRefDataServiceImpl.java +++ b/src/main/java/uk/gov/hmcts/reform/cwrdapi/service/impl/StaffRefDataServiceImpl.java @@ -325,7 +325,7 @@ public UserProfileCreationRequest createUserProfileRequest(StaffProfileCreationR UserCategory.CASEWORKER, UserTypeRequest.INTERNAL, userRoles, - false); + profileRequest.isResendInvite()); } /** @@ -669,6 +669,36 @@ public StaffProfileCreationResponse updateStaffProfile(StaffProfileCreationReque return response; } + @Override + public StaffProfileCreationResponse reinviteStaffProfile(StaffProfileCreationRequest profileRequest) { + + CaseWorkerProfile caseWorkerProfile = caseWorkerProfileRepo + .findByEmailId(profileRequest.getEmailId().toLowerCase()); + //if caseworker profile does not have the input emailid throw error + if (caseWorkerProfile == null) { + staffProfileAuditService.saveStaffAudit(AuditStatus.FAILURE, PROFILE_NOT_PRESENT_IN_SRD, + StringUtils.EMPTY, profileRequest, STAFF_PROFILE_UPDATE); + throw new StaffReferenceException(HttpStatus.NOT_FOUND, PROFILE_NOT_PRESENT_IN_SRD, + PROFILE_NOT_PRESENT_IN_SRD); + } + ResponseEntity responseEntity = createUserProfileInIdamUP(profileRequest); + UserProfileCreationResponse upResponse = (UserProfileCreationResponse) (responseEntity.getBody()); + + // update idamid in case its different in idam + if (upResponse != null && !upResponse.getIdamId().equals(caseWorkerProfile.getCaseWorkerId())) { + caseWorkerProfileRepo.delete(caseWorkerProfile); + cwrCommonRepository.flush(); + caseWorkerProfile.setCaseWorkerId(upResponse.getIdamId()); + caseWorkerProfile.getCaseWorkerLocations().forEach(e -> e.setCaseWorkerId(upResponse.getIdamId())); + caseWorkerProfile.getCaseWorkerRoles().forEach(e -> e.setCaseWorkerId(upResponse.getIdamId())); + caseWorkerProfile.getCaseWorkerWorkAreas().forEach(e -> e.setCaseWorkerId(upResponse.getIdamId())); + caseWorkerProfile.getCaseWorkerSkills().forEach(e -> e.setCaseWorkerId(upResponse.getIdamId())); + caseWorkerProfileRepo.save(caseWorkerProfile); + } + return new StaffProfileCreationResponse(caseWorkerProfile.getCaseWorkerId()); + } + + private CaseWorkerProfile validateStaffProfileForUpdate(StaffProfileCreationRequest profileRequest) { // get all existing profile from db (used IN clause) diff --git a/src/main/java/uk/gov/hmcts/reform/cwrdapi/util/CaseWorkerConstants.java b/src/main/java/uk/gov/hmcts/reform/cwrdapi/util/CaseWorkerConstants.java index 7a87a2e51..564938c48 100644 --- a/src/main/java/uk/gov/hmcts/reform/cwrdapi/util/CaseWorkerConstants.java +++ b/src/main/java/uk/gov/hmcts/reform/cwrdapi/util/CaseWorkerConstants.java @@ -98,6 +98,7 @@ private CaseWorkerConstants() { public static final String USER_NAME_PATTERN = "^[A-Za-z0-9]+[\\w!#$%&'’.*+/=?`{|}~^-]+" + "(?:\\.[\\w!#$%&’*+/=?`{|}~^-]+)*"; public static final String INVALID_EMAIL = "You must add a valid email address"; + public static final String INVALID_PROFILE = "User does not exist in SRD"; public static final String FILE_NO_DATA_ERROR_MESSAGE = "There is no data in the file uploaded." + " Upload a valid file in xlsx or xls format"; @@ -217,6 +218,9 @@ private CaseWorkerConstants() { public static final String PROFILE_NOT_PRESENT_IN_UP_OR_IDAM = "User does not exists in UP/IDAM"; public static final String IDAM_STATUS_NOT_ACTIVE = "User is in pending status or does not exist in IDAM"; + + public static final String IDAM_STATUS_ACTIVE = "User is already ACTIVE in IDAM"; + public static final String IDAM_STATUS_USER_PROFILE = "User does not exists in IDAM"; public static final String NO_PRIMARY_ROLE_PRESENT_PROFILE = "You must add Primary Role" + TRY_AGAIN; diff --git a/src/test/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataControllerTest.java b/src/test/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataControllerTest.java index 9dee03c6c..1482cd492 100644 --- a/src/test/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataControllerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataControllerTest.java @@ -640,9 +640,9 @@ private boolean verifyAllUserTypes(List actualResultUserTy @Test void should_return_staffCreateResponse_with_status_code_200() { - ResponseEntity actual = staffRefDataController .createStaffUserProfile(request); assertThat(actual.getStatusCodeValue()).isEqualTo(201); } + } diff --git a/src/test/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataUserProfileControllerTest.java b/src/test/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataUserProfileControllerTest.java index 9ca3ce99c..c642c407e 100644 --- a/src/test/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataUserProfileControllerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/cwrdapi/controllers/StaffRefDataUserProfileControllerTest.java @@ -61,4 +61,17 @@ void shouldUpdateStaffUserProfileEmptyResponseTest() { verify(staffRefDataService,times(1)) .updateStaffProfile(staffProfileCreationRequest); } + + @Test + void shouldUpdateStaffUserProfileResendInviteTest() { + StaffProfileCreationRequest staffProfileCreationRequest = StaffProfileCreationRequest + .staffProfileCreationRequest() + .build(); + + staffProfileCreationRequest.setResendInvite(true); + staffRefDataController.updateStaffUserProfile(staffProfileCreationRequest); + + verify(staffRefDataService,times(1)) + .reinviteStaffProfile(staffProfileCreationRequest); + } } diff --git a/src/test/java/uk/gov/hmcts/reform/cwrdapi/service/impl/StaffRefDataServiceImplTest.java b/src/test/java/uk/gov/hmcts/reform/cwrdapi/service/impl/StaffRefDataServiceImplTest.java index 0d4a80cd3..6d56c756c 100644 --- a/src/test/java/uk/gov/hmcts/reform/cwrdapi/service/impl/StaffRefDataServiceImplTest.java +++ b/src/test/java/uk/gov/hmcts/reform/cwrdapi/service/impl/StaffRefDataServiceImplTest.java @@ -80,6 +80,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyList; @@ -1386,4 +1387,49 @@ private StaffProfileCreationRequest getStaffProfileUpdateRequest() { return staffProfileCreationRequest; } + + @Test + void test_reInviteStaffProfile_when_no_emailId_found() throws JsonProcessingException { + when(caseWorkerProfileRepository.findByEmailId(any())).thenReturn(null); + Exception ex = assertThrows(StaffReferenceException.class, () -> staffRefDataServiceImpl.reinviteStaffProfile( + staffProfileCreationRequest)); + assertNotNull(ex); + assertEquals("User does not exist in SRD", ex.getMessage()); + //verify(staffRefDataServiceImpl, times(0)) + // .createUserProfileInIdamUP(staffProfileCreationRequest); + } + + @Test + void test_reInviteStaffProfile_success() throws JsonProcessingException { + when(caseWorkerProfileRepository.findByEmailId(any())).thenReturn(caseWorkerProfile); + UserProfileCreationResponse userProfileCreationResponse = new UserProfileCreationResponse(); + userProfileCreationResponse.setIdamId("12345678"); + userProfileCreationResponse.setIdamRegistrationResponse(201); + + String body = mapper.writeValueAsString(userProfileCreationResponse); + when(userProfileFeignClient.createUserProfile(any(),any())).thenReturn(Response.builder() + .request(mock(Request.class)).body(body, defaultCharset()).status(201).build()); + staffRefDataServiceImpl.reinviteStaffProfile(staffProfileCreationRequest); + verify(staffAuditRepository, times(0)).save(any()); + verify(caseWorkerProfileRepository, times(1)) + .findByEmailId(any()); + } + + @Test + void test_reInviteStaffProfile_Bad_Request() throws JsonProcessingException { + when(caseWorkerProfileRepository.findByEmailId(any())).thenReturn(caseWorkerProfile); + UserProfileCreationResponse userProfileCreationResponse = new UserProfileCreationResponse(); + userProfileCreationResponse.setIdamId("12345678"); + userProfileCreationResponse.setIdamRegistrationResponse(1); + + String body = mapper.writeValueAsString(userProfileCreationResponse); + when(userProfileFeignClient.createUserProfile(any(),any())).thenReturn(Response.builder() + .request(mock(Request.class)).body(body, defaultCharset()).status(400).build()); + StaffReferenceException ex = assertThrows(StaffReferenceException.class, () -> staffRefDataServiceImpl + .reinviteStaffProfile( + staffProfileCreationRequest)); + assertNotNull(ex); + assertEquals(HttpStatus.BAD_REQUEST, ex.getStatus()); + } + }