diff --git a/src/main/java/uk/gov/ons/census/supporttool/endpoint/SurveyCasesEndpoint.java b/src/main/java/uk/gov/ons/census/supporttool/endpoint/SurveyCasesEndpoint.java index 71ea160..2ef9931 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/endpoint/SurveyCasesEndpoint.java +++ b/src/main/java/uk/gov/ons/census/supporttool/endpoint/SurveyCasesEndpoint.java @@ -36,7 +36,7 @@ public class SurveyCasesEndpoint { private final AuthUser authUser; private static final String searchCasesPartialQuery = - "SELECT c.id, c.case_ref, e.name collex_name"; + "SELECT c.id, c.case_ref, e.name collex_name, c.address_line1, c.case_type, c.postcode, c.uprn, c.address_type"; private static final String searchCasesInSurveyPartialQuery = searchCasesPartialQuery + " FROM cases.cases c, cases.collection_exercise e WHERE c.collection_exercise_id = e.id" @@ -55,28 +55,31 @@ public SurveyCasesEndpoint( @GetMapping(value = "/{surveyId}") @ResponseBody - public List searchCasesBySampleData( + public List searchCasesByColumnNameTerm( @Value("#{request.getAttribute('userEmail')}") String userEmail, @PathVariable(value = "surveyId") UUID surveyId, @RequestParam(value = "searchTerm") String searchTerm, @RequestParam(value = "collexId", required = false) Optional collexId, @RequestParam(value = "invalid", required = false) Optional caseInvalid, - @RequestParam(value = "refusal", required = false) - Optional refusalReceived) { + @RequestParam(value = "refusal", required = false) Optional refusalReceived, + @RequestParam(value = "nameTerm", required = false, defaultValue = "postcode") + String nameTerm) { checkSurveySearchCasesPermission(userEmail, surveyId); + checkCaseSearchNameTerm(nameTerm); String escapedSearchTerm = escapeSqlLikeSpecialCharacters(searchTerm); String likeSearchTerm = String.format("%%%s%%", escapedSearchTerm); StringBuilder queryStringBuilder = new StringBuilder(searchCasesInSurveyPartialQuery); queryStringBuilder - .append(" AND EXISTS (SELECT * FROM jsonb_each_text(c.sample) AS x(ky, val)") - .append( - " WHERE LOWER(REPLACE(x.val, ' ', '')) LIKE LOWER(REPLACE(:likeSearchTerm, ' ', '')) ESCAPE '\\')"); + .append(" AND LOWER(REPLACE(c.") + .append(nameTerm) + .append(", ' ', '')) ") + .append(" LIKE LOWER(REPLACE(:likeSearchTerm, ' ', '')) ESCAPE '\\' "); Map namedParameters = new HashMap(); namedParameters.put("surveyId", surveyId); - namedParameters.put("likeSearchTerm", likeSearchTerm); + namedParameters.put("likeSearchTerm", likeSearchTerm.toLowerCase()); if (collexId.isPresent()) { queryStringBuilder.append(" AND e.id = :collexId"); @@ -157,4 +160,27 @@ private void checkSurveySearchCasesPermission(String userEmail, UUID surveyId) { private String escapeSqlLikeSpecialCharacters(String stringToEscape) { return stringToEscape.replace("%", "\\%").replace("_", "\\_"); } + + private void checkCaseSearchNameTerm(String nameTerm) { + // Allowed column names + List allowedNameTerms = + List.of( + "postcode", + "address_line1", + "address_line2", + "address_line3", + "town_name", + "organisation_name", + "case_ref", + "apb_code", + "case_type", + "uprn", + "region"); + + // Validate + if (!allowedNameTerms.contains(nameTerm)) { + throw new ResponseStatusException( + HttpStatus.BAD_REQUEST, "Invalid nameTerm. Allowed values: " + allowedNameTerms); + } + } } diff --git a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/EmailFulfilment.java b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/EmailFulfilment.java index 6866651..036b1b5 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/EmailFulfilment.java +++ b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/EmailFulfilment.java @@ -2,9 +2,9 @@ import java.util.Map; import java.util.UUID; -import lombok.Data; -@Data +@SuppressWarnings("SameNameButDifferent") +@lombok.Data public class EmailFulfilment { private UUID caseId; private String email; diff --git a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestDTO.java b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestDTO.java index 0a4e47c..ef44b58 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestDTO.java +++ b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestDTO.java @@ -1,8 +1,7 @@ package uk.gov.ons.census.supporttool.model.dto.rest; -import lombok.Data; - -@Data +@SuppressWarnings("SameNameButDifferent") +@lombok.Data public class RequestDTO { private RequestHeaderDTO header; private RequestPayloadDTO payload; diff --git a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestHeaderDTO.java b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestHeaderDTO.java index d7c4d52..890fbc2 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestHeaderDTO.java +++ b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestHeaderDTO.java @@ -1,9 +1,9 @@ package uk.gov.ons.census.supporttool.model.dto.rest; import java.util.UUID; -import lombok.Data; -@Data +@SuppressWarnings("SameNameButDifferent") +@lombok.Data public class RequestHeaderDTO { private String source; private String channel; diff --git a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestPayloadDTO.java b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestPayloadDTO.java index b3736aa..86cb1c6 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestPayloadDTO.java +++ b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/RequestPayloadDTO.java @@ -2,9 +2,9 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; -import lombok.Data; -@Data +@SuppressWarnings("SameNameButDifferent") +@lombok.Data @JsonInclude(Include.NON_NULL) public class RequestPayloadDTO { private SmsFulfilment smsFulfilment; diff --git a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/SkipMessageRequest.java b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/SkipMessageRequest.java index c884682..b6c8828 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/SkipMessageRequest.java +++ b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/SkipMessageRequest.java @@ -1,8 +1,7 @@ package uk.gov.ons.census.supporttool.model.dto.rest; -import lombok.Data; - -@Data +@SuppressWarnings("SameNameButDifferent") +@lombok.Data public class SkipMessageRequest { private String messageHash; private String skippingUser; diff --git a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/SmsFulfilment.java b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/SmsFulfilment.java index 01373eb..dd7f5c8 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/SmsFulfilment.java +++ b/src/main/java/uk/gov/ons/census/supporttool/model/dto/rest/SmsFulfilment.java @@ -2,9 +2,9 @@ import java.util.Map; import java.util.UUID; -import lombok.Data; -@Data +@SuppressWarnings("SameNameButDifferent") +@lombok.Data public class SmsFulfilment { private UUID caseId; private String phoneNumber; diff --git a/src/main/java/uk/gov/ons/census/supporttool/model/dto/ui/CaseSearchResult.java b/src/main/java/uk/gov/ons/census/supporttool/model/dto/ui/CaseSearchResult.java index 0df672d..2aec247 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/model/dto/ui/CaseSearchResult.java +++ b/src/main/java/uk/gov/ons/census/supporttool/model/dto/ui/CaseSearchResult.java @@ -1,6 +1,5 @@ package uk.gov.ons.census.supporttool.model.dto.ui; -import java.util.Map; import java.util.UUID; import lombok.Data; @@ -8,6 +7,10 @@ public class CaseSearchResult { public UUID id; public String caseRef; - public Map sample; + public String addressLine1; + public String postcode; + public String caseType; + public String uprn; + public String addressType; public String collectionExerciseName; } diff --git a/src/main/java/uk/gov/ons/census/supporttool/utility/CaseSearchResultsMapper.java b/src/main/java/uk/gov/ons/census/supporttool/utility/CaseSearchResultsMapper.java index 6141501..4d795f5 100644 --- a/src/main/java/uk/gov/ons/census/supporttool/utility/CaseSearchResultsMapper.java +++ b/src/main/java/uk/gov/ons/census/supporttool/utility/CaseSearchResultsMapper.java @@ -20,6 +20,11 @@ public CaseSearchResult mapRow(ResultSet resultSet, int rowNum) { caseContainerDto.setId(resultSet.getObject("id", UUID.class)); caseContainerDto.setCaseRef(resultSet.getString("case_ref")); caseContainerDto.setCollectionExerciseName(resultSet.getString("collex_name")); + caseContainerDto.setAddressLine1(resultSet.getString("address_line1")); + caseContainerDto.setAddressType(resultSet.getString("address_type")); + caseContainerDto.setCaseType(resultSet.getString("case_type")); + caseContainerDto.setUprn(resultSet.getString("uprn")); + caseContainerDto.setPostcode(resultSet.getString("postcode")); } catch (SQLException e) { log.atError().setMessage("Error mapping case search results").log(); throw new RuntimeException("Error mapping case search results", e); diff --git a/src/test/java/uk/gov/ons/census/supporttool/endpoint/AllEndpointsIT.java b/src/test/java/uk/gov/ons/census/supporttool/endpoint/AllEndpointsIT.java index d4af17c..9805f6b 100644 --- a/src/test/java/uk/gov/ons/census/supporttool/endpoint/AllEndpointsIT.java +++ b/src/test/java/uk/gov/ons/census/supporttool/endpoint/AllEndpointsIT.java @@ -200,6 +200,14 @@ void testCaseEndpoints() { (bundle) -> String.format("cases/%s", bundle.getCaseId())); } + @Test + void testCaseSearchTermEndpoints() { + integrationTestHelper.testGet( + port, + UserGroupAuthorisedActivityType.SEARCH_CASES, + (bundle) -> String.format("surveyCases/%s?searchTerm=XX0", bundle.getSurveyId())); + } + @Test void testCollectionExerciseEndpoints() { integrationTestHelper.testGet( diff --git a/src/test/java/uk/gov/ons/census/supporttool/endpoint/SurveyCasesEndpointUnitTest.java b/src/test/java/uk/gov/ons/census/supporttool/endpoint/SurveyCasesEndpointUnitTest.java new file mode 100644 index 0000000..51eca53 --- /dev/null +++ b/src/test/java/uk/gov/ons/census/supporttool/endpoint/SurveyCasesEndpointUnitTest.java @@ -0,0 +1,283 @@ +package uk.gov.ons.census.supporttool.endpoint; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.springframework.http.HttpStatus; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.web.server.ResponseStatusException; +import uk.gov.ons.census.common.model.entity.Survey; +import uk.gov.ons.census.common.model.entity.UserGroupAuthorisedActivityType; +import uk.gov.ons.census.supporttool.model.dto.ui.UIRefusalTypeDTO; +import uk.gov.ons.census.supporttool.model.repository.SurveyRepository; +import uk.gov.ons.census.supporttool.security.AuthUser; +import uk.gov.ons.census.supporttool.utility.CaseSearchResultsMapper; + +class SurveyCasesEndpointUnitTest { + + private SurveyRepository surveyRepository; + private NamedParameterJdbcTemplate jdbc; + private CaseSearchResultsMapper mapper; + private AuthUser authUser; + + private SurveyCasesEndpoint endpoint; + + private final UUID SURVEY_ID = UUID.randomUUID(); + + @BeforeEach + void setup() { + surveyRepository = mock(SurveyRepository.class); + jdbc = mock(NamedParameterJdbcTemplate.class); + mapper = mock(CaseSearchResultsMapper.class); + authUser = mock(AuthUser.class); + + endpoint = new SurveyCasesEndpoint(surveyRepository, jdbc, mapper, authUser); + } + + // ------------------------------------------------------------------------- + // PERMISSION CHECKS + // ------------------------------------------------------------------------- + @Test + void searchCasesByColumnNameTerm_throws404_whenSurveyNotFound() { + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.empty()); + + assertThrows( + ResponseStatusException.class, + () -> + endpoint.searchCasesByColumnNameTerm( + "user@test.com", + SURVEY_ID, + "AB12", + Optional.empty(), + Optional.empty(), + Optional.empty(), + "postcode")); + } + + @Test + void searchCasesByColumnNameTerm_callsPermissionCheck() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + when(jdbc.query(anyString(), anyMap(), eq(mapper))).thenReturn(Collections.emptyList()); + + endpoint.searchCasesByColumnNameTerm( + "user@test.com", + SURVEY_ID, + "AB12", + Optional.empty(), + Optional.empty(), + Optional.empty(), + "postcode"); + + verify(authUser) + .checkUserPermission( + "user@test.com", SURVEY_ID, UserGroupAuthorisedActivityType.SEARCH_CASES); + } + + // ------------------------------------------------------------------------- + // QUERY BUILDING — BASE CASE + // ------------------------------------------------------------------------- + @Test + void searchCasesByColumnNameTerm_buildsCorrectQuery() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + when(jdbc.query(anyString(), anyMap(), eq(mapper))).thenReturn(Collections.emptyList()); + + endpoint.searchCasesByColumnNameTerm( + "user@test.com", + SURVEY_ID, + "AB12", + Optional.empty(), + Optional.empty(), + Optional.empty(), + "postcode"); + + ArgumentCaptor queryCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor> paramsCaptor = ArgumentCaptor.forClass(Map.class); + + verify(jdbc).query(queryCaptor.capture(), paramsCaptor.capture(), eq(mapper)); + + String query = queryCaptor.getValue(); + + Map params = paramsCaptor.getValue(); + + assertTrue(query.contains("FROM cases.cases c")); + assertTrue( + query.contains( + "AND LOWER(REPLACE(c.postcode, ' ', '')) LIKE LOWER(REPLACE(:likeSearchTerm, ' ', ''))")); + + assertTrue(query.contains("LIMIT 100")); + + assertEquals("%ab12%", params.get("likeSearchTerm")); + assertEquals(SURVEY_ID, params.get("surveyId")); + } + + // ------------------------------------------------------------------------- + // QUERY BUILDING — OPTIONAL PARAMETERS + // ------------------------------------------------------------------------- + @Test + void searchCasesByColumnNameTerm_withCollexId() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + UUID collexId = UUID.randomUUID(); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + when(jdbc.query(anyString(), anyMap(), eq(mapper))).thenReturn(Collections.emptyList()); + + endpoint.searchCasesByColumnNameTerm( + "user@test.com", + SURVEY_ID, + "AB12", + Optional.of(collexId), + Optional.empty(), + Optional.empty(), + "postcode"); + + ArgumentCaptor queryCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor> paramsCaptor = ArgumentCaptor.forClass(Map.class); + + verify(jdbc).query(queryCaptor.capture(), paramsCaptor.capture(), eq(mapper)); + + assertTrue(queryCaptor.getValue().contains("AND e.id = :collexId")); + assertEquals(collexId, paramsCaptor.getValue().get("collexId")); + } + + @Test + void searchCasesByColumnNameTerm_withCaseInvalid() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + when(jdbc.query(anyString(), anyMap(), eq(mapper))).thenReturn(Collections.emptyList()); + + endpoint.searchCasesByColumnNameTerm( + "user@test.com", + SURVEY_ID, + "AB12", + Optional.empty(), + Optional.of(true), + Optional.empty(), + "postcode"); + + ArgumentCaptor queryCaptor = ArgumentCaptor.forClass(String.class); + verify(jdbc).query(queryCaptor.capture(), anyMap(), eq(mapper)); + + assertTrue(queryCaptor.getValue().contains("AND c.invalid = :caseInvalid")); + } + + @Test + void searchCasesByColumnNameTerm_withRefusalReceived_notRefused() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + when(jdbc.query(anyString(), anyMap(), eq(mapper))).thenReturn(Collections.emptyList()); + + endpoint.searchCasesByColumnNameTerm( + "user@test.com", + SURVEY_ID, + "AB12", + Optional.empty(), + Optional.empty(), + Optional.of(UIRefusalTypeDTO.NOT_REFUSED), + "postcode"); + + ArgumentCaptor queryCaptor = ArgumentCaptor.forClass(String.class); + verify(jdbc).query(queryCaptor.capture(), anyMap(), eq(mapper)); + + assertTrue(queryCaptor.getValue().contains("c.refusal_received IS NULL")); + } + + @Test + void searchCasesByColumnNameTerm_withRefusalReceived_specificType() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + when(jdbc.query(anyString(), anyMap(), eq(mapper))).thenReturn(Collections.emptyList()); + + endpoint.searchCasesByColumnNameTerm( + "user@test.com", + SURVEY_ID, + "AB12", + Optional.empty(), + Optional.empty(), + Optional.of(UIRefusalTypeDTO.HARD_REFUSAL), + "postcode"); + + ArgumentCaptor queryCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor> paramsCaptor = ArgumentCaptor.forClass(Map.class); + + verify(jdbc).query(queryCaptor.capture(), paramsCaptor.capture(), eq(mapper)); + + assertTrue(queryCaptor.getValue().contains("c.refusal_received = :refusalReceived")); + assertEquals("HARD_REFUSAL", paramsCaptor.getValue().get("refusalReceived")); + } + + // ------------------------------------------------------------------------- + // GET CASE BY CASE REF + // ------------------------------------------------------------------------- + @Test + void getCaseByCaseRef_buildsCorrectQuery() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + when(jdbc.query(anyString(), anyMap(), eq(mapper))).thenReturn(Collections.emptyList()); + + endpoint.getCaseByCaseRef(SURVEY_ID, 12345L, "user@test.com"); + + verify(jdbc).query(argThat(q -> q.contains("c.case_ref = :caseRef")), anyMap(), eq(mapper)); + } + + // ------------------------------------------------------------------------- + // GET CASE BY QID + // ------------------------------------------------------------------------- + @Test + void getCaseByQid_buildsCorrectQuery() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + when(jdbc.query(anyString(), anyMap(), eq(mapper))).thenReturn(Collections.emptyList()); + + endpoint.getCaseByQid(SURVEY_ID, "Q123", "user@test.com"); + + verify(jdbc).query(argThat(q -> q.contains("u.qid = :qid")), anyMap(), eq(mapper)); + } + + @Test + void searchCasesByColumnNameTerm_invalidNameTerm_throwsBadRequest() { + Survey survey = new Survey(); + survey.setId(SURVEY_ID); + + when(surveyRepository.findById(SURVEY_ID)).thenReturn(Optional.of(survey)); + + ResponseStatusException ex = + assertThrows( + ResponseStatusException.class, + () -> + endpoint.searchCasesByColumnNameTerm( + "user@test.com", + SURVEY_ID, + "AB12", + Optional.empty(), + Optional.empty(), + Optional.empty(), + "invalid_column" // <-- invalid + )); + + assertEquals(HttpStatus.BAD_REQUEST, ex.getStatusCode()); + assertNotNull(ex.getReason()); + assertTrue(ex.getReason().contains("Invalid nameTerm")); + } +} diff --git a/src/test/java/uk/gov/ons/census/supporttool/testhelper/BundleOfUsefulTestStuff.java b/src/test/java/uk/gov/ons/census/supporttool/testhelper/BundleOfUsefulTestStuff.java index 1e15f28..758ee56 100644 --- a/src/test/java/uk/gov/ons/census/supporttool/testhelper/BundleOfUsefulTestStuff.java +++ b/src/test/java/uk/gov/ons/census/supporttool/testhelper/BundleOfUsefulTestStuff.java @@ -1,9 +1,9 @@ package uk.gov.ons.census.supporttool.testhelper; import java.util.UUID; -import lombok.Data; -@Data +@SuppressWarnings("SameNameButDifferent") +@lombok.Data public class BundleOfUsefulTestStuff { private UUID surveyId; private UUID collexId; diff --git a/ui/src/SurveyCaseSearch.jsx b/ui/src/SurveyCaseSearch.jsx index 10ec02c..314022e 100644 --- a/ui/src/SurveyCaseSearch.jsx +++ b/ui/src/SurveyCaseSearch.jsx @@ -29,7 +29,6 @@ class SurveyCaseSearch extends Component { getAuthorisedBackendData = async () => { const authorisedActivities = await this.getAuthorisedActivities(); // Only need to do this once; don't refresh it repeatedly as it changes infrequently - this.getSampleColumns(authorisedActivities); this.getCollectionExercises(authorisedActivities); }; @@ -113,6 +112,26 @@ class SurveyCaseSearch extends Component { {caze.collectionExerciseName}, ); + caseCells.push( + {caze.addressLine1}, + ); + + caseCells.push( + {caze.postcode}, + ); + + caseCells.push( + {caze.caseType}, + ); + + caseCells.push( + {caze.uprn}, + ); + + caseCells.push( + {caze.addressType}, + ); + return caseCells; }; @@ -122,6 +141,16 @@ class SurveyCaseSearch extends Component { tableHeaderRows.push(Collection Exercise); + tableHeaderRows.push(Address Line 1); + + tableHeaderRows.push(Post Code); + + tableHeaderRows.push(Case Type); + + tableHeaderRows.push(UPRN); + + tableHeaderRows.push(Address Type); + return tableHeaderRows; } diff --git a/ui/src/SurveySampleSearch.jsx b/ui/src/SurveySampleSearch.jsx index acd0f74..f0a2fb1 100644 --- a/ui/src/SurveySampleSearch.jsx +++ b/ui/src/SurveySampleSearch.jsx @@ -74,7 +74,7 @@ class SurveySampleSearch extends Component { this.props.onSearchExecuteAndPopulateList( searchUrl, this.state.searchTerm, - "sample data containing", + "Postcode matching", ); }; @@ -157,7 +157,7 @@ class SurveySampleSearch extends Component { required style={{ minWidth: SEARCH_FIELD_WIDTH }} error={this.state.searchTermFailedValidation} - label="Search All Sample Data" + label="Search By Postcode" onChange={this.onSearchChange} value={this.state.searchTerm} /> @@ -166,7 +166,7 @@ class SurveySampleSearch extends Component { variant="contained" style={{ margin: 10, minWidth: SEARCH_BUTTON_WIDTH }} > - Search Sample Data + Search By Post Code