diff --git a/src/test/java/uk/gov/hmcts/ccd/ElasticsearchIT.java b/src/test/java/uk/gov/hmcts/ccd/ElasticsearchIT.java index 5c832442f4..a8f689359b 100644 --- a/src/test/java/uk/gov/hmcts/ccd/ElasticsearchIT.java +++ b/src/test/java/uk/gov/hmcts/ccd/ElasticsearchIT.java @@ -70,6 +70,7 @@ import static org.elasticsearch.index.query.QueryBuilders.boolQuery; import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; import static org.elasticsearch.index.query.QueryBuilders.matchQuery; +import static org.elasticsearch.index.query.QueryBuilders.rangeQuery; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.CoreMatchers.is; @@ -187,6 +188,7 @@ public class ElasticsearchIT extends ElasticsearchBaseTest { private static final String REFERENCE_GLOBAL_SEARCH_04 = "4444111122223333"; private static final String REFERENCE_GLOBAL_SEARCH_05 = "1999866820969999"; private static final String REFERENCE_GLOBAL_SEARCH_06 = "1999866820970009"; + private static final String SUPPLEMENTARY_DATA_CASE_REFERENCE = "1589460056217857"; private static final Long GLOBAL_DOCS_SIZE = 1000L; @Inject @@ -819,6 +821,59 @@ void shouldReturnAllSupplementaryDataByDefaultForStandardRequest() throws Except ); } + @Test + void shouldReturnRequestedOrgKeyedSupplementaryDataFromFlattenedField() throws Exception { + ElasticsearchTestRequest searchRequest = ElasticsearchTestRequest.builder() + .query(matchQuery(MetaData.CaseField.CASE_REFERENCE.getDbColumnName(), + SUPPLEMENTARY_DATA_CASE_REFERENCE)) + .supplementaryData(Collections.singletonList("new_case.*")) + .build(); + + CaseSearchResultViewResource caseSearchResultViewResource = executeRequest(searchRequest, CASE_TYPE_A, + "orgcases", false); + + Map supplementaryData = + caseSearchResultViewResource.getCases().getFirst().getSupplementaryData(); + assertAll( + () -> assertThat(caseSearchResultViewResource.getTotal(), is(1L)), + () -> assertThat(supplementaryData.size(), is(1)), + () -> assertThat(supplementaryData.get("new_case").get("OrgY").asBoolean(), is(true)), + () -> assertThat(supplementaryData.get("new_case").get("OrgZ").asBoolean(), is(false)) + ); + } + + @Test + void shouldSearchOrgKeyedSupplementaryDataWhenMappedAsFlattenedFields() throws Exception { + ElasticsearchTestRequest searchRequest = ElasticsearchTestRequest.builder() + .query(boolQuery() + .must(matchQuery(MetaData.CaseField.CASE_REFERENCE.getDbColumnName(), + SUPPLEMENTARY_DATA_CASE_REFERENCE)) + .must(matchQuery("supplementary_data.new_case.OrgY", "true")) + .must(rangeQuery("supplementary_data.orgs_assigned_users.OrgZ").gte(2500).lte(2500))) + .build(); + + CaseSearchResultViewResource caseSearchResultViewResource = executeRequest(searchRequest, CASE_TYPE_A, + "orgcases", false); + + assertThat(caseSearchResultViewResource.getTotal(), is(1L)); + } + + @Test + void shouldReturnErrorForOneSidedRangeOnFlattenedOrgKeyedSupplementaryData() throws Exception { + ElasticsearchTestRequest searchRequest = ElasticsearchTestRequest.builder() + .query(boolQuery() + .must(matchQuery(MetaData.CaseField.CASE_REFERENCE.getDbColumnName(), + SUPPLEMENTARY_DATA_CASE_REFERENCE)) + .must(rangeQuery("supplementary_data.orgs_assigned_users.OrgZ").gte(2500))) + .build(); + + JsonNode exceptionNode = executeErrorRequest(searchRequest, CASE_TYPE_A, "orgcases", 400); + + assertThat(exceptionNode.get(ERROR_MESSAGE).asText(), + containsString("[range] queries on keyed [flattened] fields must include both an upper " + + "and a lower bound")); + } + @Test void shouldReturnErrorWithUnsupportedUseCase() throws Exception { ElasticsearchTestRequest searchRequest = matchAllRequest(); diff --git a/src/test/resources/elasticsearch/config/mappings-aat_cases.json b/src/test/resources/elasticsearch/config/mappings-aat_cases.json index dac408e37f..d4531cd0f7 100644 --- a/src/test/resources/elasticsearch/config/mappings-aat_cases.json +++ b/src/test/resources/elasticsearch/config/mappings-aat_cases.json @@ -462,6 +462,16 @@ } }, "type": "text" + }, + "supplementary_data": { + "properties": { + "new_case": { + "type": "flattened" + }, + "orgs_assigned_users": { + "type": "flattened" + } + } } } } diff --git a/src/test/resources/elasticsearch/data/aat_cases/aat-case-02.json b/src/test/resources/elasticsearch/data/aat_cases/aat-case-02.json index 064cf7e4d6..240a111ac7 100644 --- a/src/test/resources/elasticsearch/data/aat_cases/aat-case-02.json +++ b/src/test/resources/elasticsearch/data/aat_cases/aat-case-02.json @@ -80,6 +80,16 @@ "TextField": "PUBLIC", "YesOrNoField": "PUBLIC" }, + "supplementary_data": { + "new_case": { + "OrgY": true, + "OrgZ": false + }, + "orgs_assigned_users": { + "OrgY": 1, + "OrgZ": 2500 + } + }, "jurisdiction": "AUTOTEST1", "last_modified": "2020-05-14T12:40:56.242Z", "last_state_modified_date": "2020-05-14T12:40:56.240Z",