diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/judicialapi/SearchUsersIntegrationTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/judicialapi/SearchUsersIntegrationTest.java index 7ece7c83c..1f3e1b441 100644 --- a/src/integrationTest/java/uk/gov/hmcts/reform/judicialapi/SearchUsersIntegrationTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/reform/judicialapi/SearchUsersIntegrationTest.java @@ -135,7 +135,8 @@ void shouldReturn400WhenSearchStringDoesNotContainRequiredLength(String role) { userSearchRequest, role, false); assertThat(response).containsEntry("http_status", "400"); var responseBody = (String) response.get("response_body"); - assertTrue(responseBody.contains("should have atleast 3 characters")); + assertTrue(responseBody.contains("searchString must be at least 3 characters including letters, " + + "apostrophe, hyphen")); } @ParameterizedTest @@ -150,7 +151,8 @@ void shouldReturn400WhenSearchStringContainsOtherThanLetters(String role) { userSearchRequest, role, false); assertThat(response).containsEntry("http_status", "400"); var responseBody = (String) response.get("response_body"); - assertTrue(responseBody.contains("should contains letters only")); + assertTrue(responseBody.contains("searchString must be at least 3 characters including letters, " + + "apostrophe, hyphen")); } @ParameterizedTest @@ -196,5 +198,93 @@ void shouldReturn200WhenUserProfileRequestedForGivenSearchStringWithEmptyAdditio assertThat(response).containsEntry("http_status", "200 OK"); } + @ParameterizedTest + @ValueSource(strings = { "jrd-system-user","jrd-admin"}) + void shouldReturn200WhenUserProfileApostropheString(String role) { + UserSearchRequest userSearchRequest = UserSearchRequest.builder() + .searchString("Am'") + .build(); + var response = judicialReferenceDataClient.searchUsers( + userSearchRequest, role, false); + var profiles = (List>)response.get("body"); + assertEquals(1, profiles.size()); + assertEquals("test802@test.net", profiles.get(0).get("emailId")); + assertEquals("Am'ar", profiles.get(0).get("knownAs")); + assertThat(response).containsEntry("http_status", "200 OK"); + } + + @ParameterizedTest + @ValueSource(strings = { "jrd-system-user","jrd-admin"}) + void shouldReturn200WhenUserProfileApostropheStrings(String role) { + UserSearchRequest userSearchRequest = UserSearchRequest.builder() + .searchString("O'j") + .build(); + var response = judicialReferenceDataClient.searchUsers( + userSearchRequest, role, false); + var profiles = (List>)response.get("body"); + assertEquals(1, profiles.size()); + assertEquals("test803@test.net", profiles.get(0).get("emailId")); + assertEquals("O'jas", profiles.get(0).get("knownAs")); + assertThat(response).containsEntry("http_status", "200 OK"); + } + + @ParameterizedTest + @ValueSource(strings = { "jrd-system-user","jrd-admin"}) + void shouldReturn200WhenUserProfileHyphenString(String role) { + UserSearchRequest userSearchRequest = UserSearchRequest.builder() + .searchString("Li-a") + .build(); + var response = judicialReferenceDataClient.searchUsers( + userSearchRequest, role, false); + var profiles = (List>)response.get("body"); + assertEquals(1, profiles.size()); + assertEquals("test804@test.net", profiles.get(0).get("emailId")); + assertEquals("Li-am", profiles.get(0).get("knownAs")); + assertThat(response).containsEntry("http_status", "200 OK"); + } + @ParameterizedTest + @ValueSource(strings = { "jrd-system-user","jrd-admin"}) + void shouldReturn200WhenUserProfileHyphenStrings(String role) { + UserSearchRequest userSearchRequest = UserSearchRequest.builder() + .searchString("V-e") + .build(); + var response = judicialReferenceDataClient.searchUsers( + userSearchRequest, role, false); + var profiles = (List>)response.get("body"); + assertEquals(1, profiles.size()); + assertEquals("test805@test.net", profiles.get(0).get("emailId")); + assertEquals("V-ed", profiles.get(0).get("knownAs")); + assertThat(response).containsEntry("http_status", "200 OK"); + } + + @ParameterizedTest + @ValueSource(strings = { "jrd-system-user","jrd-admin"}) + void shouldReturn200WhenUserProfileEmptySpace(String role) { + UserSearchRequest userSearchRequest = UserSearchRequest.builder() + .searchString("J Ro") + .build(); + var response = judicialReferenceDataClient.searchUsers( + userSearchRequest, role, false); + var profiles = (List>)response.get("body"); + assertEquals(1, profiles.size()); + assertEquals("test806@test.net", profiles.get(0).get("emailId")); + assertEquals("J Rock", profiles.get(0).get("knownAs")); + assertThat(response).containsEntry("http_status", "200 OK"); + } + + @ParameterizedTest + @ValueSource(strings = { "jrd-system-user","jrd-admin"}) + void shouldReturn200WhenUserProfileEmptySpaces(String role) { + UserSearchRequest userSearchRequest = UserSearchRequest.builder() + .searchString("To N") + .build(); + var response = judicialReferenceDataClient.searchUsers( + userSearchRequest, role, false); + var profiles = (List>)response.get("body"); + assertEquals(1, profiles.size()); + assertEquals("test807@test.net", profiles.get(0).get("emailId")); + assertEquals("To Nick", profiles.get(0).get("knownAs")); + assertThat(response).containsEntry("http_status", "200 OK"); + } } diff --git a/src/integrationTest/resources/db/testmigration/V1_31__alter_jrd_tables.sql b/src/integrationTest/resources/db/testmigration/V1_31__alter_jrd_tables.sql index 36639ed4d..e99fda1e5 100644 --- a/src/integrationTest/resources/db/testmigration/V1_31__alter_jrd_tables.sql +++ b/src/integrationTest/resources/db/testmigration/V1_31__alter_jrd_tables.sql @@ -45,7 +45,25 @@ last_working_date, active_flag, extracted_date, created_date, last_loaded_date, object_id, sidam_id, is_judge, is_panel_member, is_magistrate) VALUES('9001', 'A123', 'Sample_KA_1', 'Sample_SN_1', 'Sample_FN_1', 'Ms', 'No Work Pattern (M to F)', 'test900@test.net', '2022-03-01', NULL, true, '2022-03-01 12:25:28.763', '2022-03-01 09:10:44.682', '2022-03-01 09:10:44.682', -'900', '900', true, false, true); +'900', '900', true, false, true), +('8002', 'A124', 'Am''ar', 'Pamet', 'Am''ar Pamet', 'Ms', 'No Work Pattern (M to F)', 'test802@test.net', '2022-03-01', NULL, true, +'2022-03-01 12:25:28.763', '2022-03-01 09:10:44.682', '2022-03-01 09:10:44.682', +'802', '802', true, false, true), +('8003', 'A125', 'O''jas', 'Baet', 'O''jas Baet', 'Ms', 'No Work Pattern (M to F)', 'test803@test.net', '2022-03-01', NULL, true, +'2022-03-01 12:25:28.763', '2022-03-01 09:10:44.682', '2022-03-01 09:10:44.682', +'803', '803', true, false, true), +('8004', 'A126', 'Li-am', 'Kate', 'Li-am Kate', 'Ms', 'No Work Pattern (M to F)', 'test804@test.net', '2022-03-01', NULL, true, +'2022-03-01 12:25:28.763', '2022-03-01 09:10:44.682', '2022-03-01 09:10:44.682', +'804', '804', true, false, true), +('8005', 'A127', 'V-ed', 'Prakasscs', 'V-ed Prakasscs', 'Ms', 'No Work Pattern (M to F)', 'test805@test.net', '2022-03-01', NULL, true, +'2022-03-01 12:25:28.763', '2022-03-01 09:10:44.682', '2022-03-01 09:10:44.682', +'805', '805', true, false, true), +('8006', 'A128', 'J Rock', 'Brian', 'J Rock Brian', 'Ms', 'No Work Pattern (M to F)', 'test806@test.net', '2022-03-01', NULL, true, +'2022-03-01 12:25:28.763', '2022-03-01 09:10:44.682', '2022-03-01 09:10:44.682', +'806', '806', true, false, true), +('8007', 'A129', 'To Nick', 'Cruz', 'To Nick Cruz', 'Ms', 'No Work Pattern (M to F)', 'test807@test.net', '2022-03-01', NULL, true, +'2022-03-01 12:25:28.763', '2022-03-01 09:10:44.682', '2022-03-01 09:10:44.682', +'807', '807', true, false, true); INSERT INTO judicial_office_appointment (judicial_office_appointment_id, per_id, base_location_id, region_id, is_prinicple_appointment, diff --git a/src/main/java/uk/gov/hmcts/reform/judicialapi/controller/request/UserSearchRequest.java b/src/main/java/uk/gov/hmcts/reform/judicialapi/controller/request/UserSearchRequest.java index ca21322ba..76a0478f6 100644 --- a/src/main/java/uk/gov/hmcts/reform/judicialapi/controller/request/UserSearchRequest.java +++ b/src/main/java/uk/gov/hmcts/reform/judicialapi/controller/request/UserSearchRequest.java @@ -9,7 +9,6 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; @Builder @AllArgsConstructor @@ -20,8 +19,8 @@ public class UserSearchRequest { @JsonProperty("searchString") @NotNull(message = "cannot be null") @NotEmpty(message = "cannot be empty") - @Size(min = 3, message = "should have atleast {min} characters") - @Pattern(regexp = "[a-zA-Z]+", message = "should contains letters only") + @Pattern(regexp = "([a-zA-Z\\-\\s']){3,}+", message = "must be at least 3 characters including " + + "letters, apostrophe, hyphen") private String searchString; @JsonProperty("serviceCode")