From 2094215e20231774073ec779f56dd2cfbe27c8ac Mon Sep 17 00:00:00 2001 From: Luciano Fiandesio Date: Wed, 20 May 2026 11:11:36 +0200 Subject: [PATCH] fix: include itemFilters in hasDateQueryItem check to prevent E7205 on stage date filters (#23954) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: include itemFilters in hasDateQueryItem check to prevent E7205 on stage date filters --------- Co-authored-by: Jan Henrik Ă˜verland --- .../data/DefaultEventQueryValidator.java | 2 +- .../tracker/MetadataItemsHandler.java | 10 +- .../event/data/EventQueryValidatorTest.java | 18 ++++ .../tracker/MetadataItemsHandlerTest.java | 57 ++++++++++ .../EnrollmentsAggregate4AutoTest.java | 2 +- .../EnrollmentsAggregate6AutoTest.java | 2 +- .../query/EnrollmentsQuery2AutoTest.java | 4 +- .../aggregate/EventsAggregate11AutoTest.java | 101 ++++++++++++++++++ .../aggregate/EventsAggregate2AutoTest.java | 2 +- .../aggregate/EventsAggregate5AutoTest.java | 2 +- .../aggregate/EventsAggregate7AutoTest.java | 4 +- .../aggregate/EventsAggregate8AutoTest.java | 4 +- .../generator/scenarios/event-aggregated.json | 7 ++ 13 files changed, 201 insertions(+), 14 deletions(-) diff --git a/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryValidator.java b/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryValidator.java index cb5269ed70e8..bb79d2e76f60 100644 --- a/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryValidator.java +++ b/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryValidator.java @@ -205,7 +205,7 @@ public ErrorMessage validateForErrorMessage(EventQueryParams params) { } private boolean hasDateQueryItem(EventQueryParams params) { - return params.getItems().stream() + return params.getItemsAndItemFilters().stream() .anyMatch( item -> EventAnalyticsColumnName.OCCURRED_DATE_COLUMN_NAME.equals(item.getItemId()) diff --git a/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandler.java b/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandler.java index b97f87787c50..ddd67cfee90d 100644 --- a/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandler.java +++ b/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandler.java @@ -870,13 +870,17 @@ private List getDimensionItemUidsFrom( private static void addItemFiltersToDimensionItems( List itemsFilter, Map> dimensionItems) { for (QueryItem item : itemsFilter) { + String itemUid = ResponseHelper.getItemUid(item); + if (item.hasOptionSet()) { - dimensionItems.put(item.getItemId(), item.getOptionSetFilterItemsOrAll()); + dimensionItems.put(itemUid, item.getOptionSetFilterItemsOrAll()); } else if (item.hasLegendSet()) { - dimensionItems.put(item.getItemId(), item.getLegendSetFilterItemsOrAll()); + dimensionItems.put(itemUid, item.getLegendSetFilterItemsOrAll()); + } else if (!item.getDimensionValues().isEmpty()) { + dimensionItems.put(itemUid, item.getDimensionValues()); } else { dimensionItems.put( - item.getItemId(), + itemUid, item.getFiltersAsString() != null ? List.of(item.getFiltersAsString()) : emptyList()); } } diff --git a/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EventQueryValidatorTest.java b/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EventQueryValidatorTest.java index 3936e3cbe280..9bc68d9da793 100644 --- a/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EventQueryValidatorTest.java +++ b/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/event/data/EventQueryValidatorTest.java @@ -494,6 +494,24 @@ void validateSuccessWithStageDateItem_ScheduledDate() { assertNull(error); } + @Test + void validateSuccessWithStageDateItemFilter_OccurredDate() { + BaseDimensionalItemObject item = + new BaseDimensionalItemObject(EventAnalyticsColumnName.OCCURRED_DATE_COLUMN_NAME); + QueryItem qi = new QueryItem(item, prA, null, ValueType.DATE, AggregationType.NONE, null); + + EventQueryParams params = + new EventQueryParams.Builder() + .withProgram(prA) + .withOrganisationUnits(List.of(ouA)) + .addItemFilter(qi) + .build(); + + // Should not throw - stage date item filter provides period context + ErrorMessage error = eventQueryValidator.validateForErrorMessage(params); + assertNull(error); + } + @Test void validateSuccessWithStaticDateItem_EnrollmentDate() { BaseDimensionalItemObject item = diff --git a/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandlerTest.java b/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandlerTest.java index a549041ce8e8..e06687d5ef28 100644 --- a/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandlerTest.java +++ b/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/tracker/MetadataItemsHandlerTest.java @@ -1619,6 +1619,63 @@ void shouldIgnoreDimensionValuesForNonDateItems() { assertNotNull(items); assertFalse(items.containsKey("202205")); } + + @Test + @DisplayName( + "should include stage-prefixed dimension values for date item filters with period identifiers") + void shouldIncludeStagePrefixedDimensionValuesForDateItemFilters() { + // Given + Grid grid = new ListGrid(); + + org.hisp.dhis.program.ProgramStage programStage = createProgramStage('S', programA); + programStage.setUid("A03MvHHogjR"); + + org.hisp.dhis.common.BaseDimensionalItemObject eventDateItem = + new org.hisp.dhis.common.BaseDimensionalItemObject("occurreddate"); + eventDateItem.setUid("occurreddate"); + eventDateItem.setName("Event date"); + + QueryItem queryItem = new QueryItem(eventDateItem, null, ValueType.DATE, null, null); + queryItem.setProgramStage(programStage); + queryItem.setCustomHeader( + org.hisp.dhis.common.AnalyticsCustomHeader.forEventDate(programStage)); + queryItem.addDimensionValue("202205"); + queryItem.addFilter(new QueryFilter(QueryOperator.GE, "2022-05-01")); + queryItem.addFilter(new QueryFilter(QueryOperator.LE, "2022-05-31")); + + EventQueryParams params = + new EventQueryParams.Builder() + .withProgram(programA) + .withSkipMeta(false) + .withEndpointAction(AGGREGATE) + .withOrganisationUnits(List.of(orgUnitA)) + .withPeriods(createPeriodDimensions("2023Q1"), "quarterly") + .addItemFilter(queryItem) + .build(); + + when(userService.getUserByUsername(anyString())).thenReturn(null); + + // When + metadataItemsHandler.addMetadata(grid, params, List.of()); + + // Then + @SuppressWarnings("unchecked") + Map> dimensions = + (Map>) grid.getMetaData().get(DIMENSIONS.getKey()); + assertNotNull(dimensions); + + assertTrue( + dimensions.containsKey("A03MvHHogjR.eventdate"), + "Dimensions should contain stage-prefixed key 'A03MvHHogjR.eventdate'"); + assertEquals( + List.of("202205"), + dimensions.get("A03MvHHogjR.eventdate"), + "Dimension values should contain the period identifier '202205', not the filter string"); + + assertFalse( + dimensions.containsKey("occurreddate"), + "Dimensions should not contain raw 'occurreddate' key for stage-scoped filter items"); + } } @Nested diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/aggregate/EnrollmentsAggregate4AutoTest.java b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/aggregate/EnrollmentsAggregate4AutoTest.java index 597a17ce5bbc..e5a3e4f6924a 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/aggregate/EnrollmentsAggregate4AutoTest.java +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/aggregate/EnrollmentsAggregate4AutoTest.java @@ -256,7 +256,7 @@ public void queryAggregatedenrollmentsmacase2() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"pager\":{\"isLastPage\":true,\"pageSize\":50,\"page\":1},\"items\":{\"ou\":{\"name\":\"Organisation unit\"},\"202208\":{\"name\":\"August 2022\"},\"202307\":{\"name\":\"July 2023\"},\"202209\":{\"name\":\"September 2022\"},\"202305\":{\"name\":\"May 2023\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"202211\":{\"name\":\"November 2022\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"202212\":{\"name\":\"December 2022\"},\"202210\":{\"name\":\"October 2022\"},\"pe\":{},\"VBqh0ynB2wv\":{\"name\":\"Malaria case registration\"},\"pTo4uMt3xur.F3ogKBuviRA\":{\"name\":\"Household location\"},\"pTo4uMt3xur\":{\"name\":\"Malaria case registration\"}},\"dimensions\":{\"F3ogKBuviRA\":[],\"pe\":[\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\",\"202307\"],\"ou\":[\"ImspTQPwCqd\"]}}"; + "{\"pager\":{\"isLastPage\":true,\"pageSize\":50,\"page\":1},\"items\":{\"ou\":{\"name\":\"Organisation unit\"},\"202208\":{\"name\":\"August 2022\"},\"202307\":{\"name\":\"July 2023\"},\"202209\":{\"name\":\"September 2022\"},\"202305\":{\"name\":\"May 2023\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"202211\":{\"name\":\"November 2022\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"202212\":{\"name\":\"December 2022\"},\"202210\":{\"name\":\"October 2022\"},\"pe\":{},\"VBqh0ynB2wv\":{\"name\":\"Malaria case registration\"},\"pTo4uMt3xur.F3ogKBuviRA\":{\"name\":\"Household location\"},\"pTo4uMt3xur\":{\"name\":\"Malaria case registration\"}},\"dimensions\":{\"pTo4uMt3xur.F3ogKBuviRA\":[],\"pe\":[\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\",\"202307\"],\"ou\":[\"ImspTQPwCqd\"]}}"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/aggregate/EnrollmentsAggregate6AutoTest.java b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/aggregate/EnrollmentsAggregate6AutoTest.java index 41816897625f..6aa913d601ef 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/aggregate/EnrollmentsAggregate6AutoTest.java +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/aggregate/EnrollmentsAggregate6AutoTest.java @@ -2576,7 +2576,7 @@ public void dataElementOrgUnitTypeFilter() throws JSONException { // 3. Assert metaData. String expectedMetaData = - "{\"pager\":{\"page\":1,\"pageSize\":50,\"isLastPage\":true},\"items\":{\"bbKtnxRZKEP\":{\"name\":\"Postpartum care visit\"},\"ou\":{\"name\":\"Organisation unit\"},\"edqlbukwRfQ\":{\"name\":\"Second antenatal care visit\"},\"2023\":{\"name\":\"2023\"},\"2022\":{\"name\":\"2022\"},\"2021\":{\"name\":\"2021\"},\"2020\":{\"name\":\"2020\"},\"PFDfvmGpsR3.n1rtSHYf6O6\":{\"name\":\"WHOMCH Hospital \\/ Birth clinic\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"PFDfvmGpsR3\":{\"name\":\"Care at birth\"},\"pe\":{},\"2024\":{\"name\":\"2024\"},\"PUZaKR0Jh2k\":{\"name\":\"Previous deliveries\"},\"WZbXY0S00lP\":{\"name\":\"First antenatal care visit\"},\"WSGAb5XwJ3Y\":{\"name\":\"WHO RMNCH Tracker\"}},\"dimensions\":{\"pe\":[\"2020\",\"2021\",\"2022\",\"2023\",\"2024\"],\"ou\":[\"ImspTQPwCqd\"],\"n1rtSHYf6O6\":[\"in ImspTQPwCqd\"]}}"; + "{\"pager\":{\"page\":1,\"pageSize\":50,\"isLastPage\":true},\"items\":{\"bbKtnxRZKEP\":{\"name\":\"Postpartum care visit\"},\"ou\":{\"name\":\"Organisation unit\"},\"edqlbukwRfQ\":{\"name\":\"Second antenatal care visit\"},\"2023\":{\"name\":\"2023\"},\"2022\":{\"name\":\"2022\"},\"2021\":{\"name\":\"2021\"},\"2020\":{\"name\":\"2020\"},\"PFDfvmGpsR3.n1rtSHYf6O6\":{\"name\":\"WHOMCH Hospital \\/ Birth clinic\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"PFDfvmGpsR3\":{\"name\":\"Care at birth\"},\"pe\":{},\"2024\":{\"name\":\"2024\"},\"PUZaKR0Jh2k\":{\"name\":\"Previous deliveries\"},\"WZbXY0S00lP\":{\"name\":\"First antenatal care visit\"},\"WSGAb5XwJ3Y\":{\"name\":\"WHO RMNCH Tracker\"}},\"dimensions\":{\"pe\":[\"2020\",\"2021\",\"2022\",\"2023\",\"2024\"],\"ou\":[\"ImspTQPwCqd\"],\"PFDfvmGpsR3.n1rtSHYf6O6\":[\"in ImspTQPwCqd\"]}}"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/query/EnrollmentsQuery2AutoTest.java b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/query/EnrollmentsQuery2AutoTest.java index f9fc398703e5..0239f41957f0 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/query/EnrollmentsQuery2AutoTest.java +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/enrollment/query/EnrollmentsQuery2AutoTest.java @@ -284,7 +284,7 @@ public void queryRandom6() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"pager\":{\"page\":1,\"pageSize\":100,\"isLastPage\":true},\"items\":{\"uvMKOn1oWvd.Qvb7NExMqjZ\":{\"uid\":\"Qvb7NExMqjZ\",\"name\":\"Follow-up vector control actions 5\",\"description\":\"Follow-up vector control actions\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"fADIatyOu2g\":{\"uid\":\"fADIatyOu2g\",\"name\":\"LLIN coverage (%)\",\"description\":\"LLIN coverage following a foci response\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"AVERAGE\",\"totalAggregationType\":\"SUM\"},\"ou\":{\"uid\":\"ou\",\"name\":\"Organisation unit\",\"dimensionType\":\"ORGANISATION_UNIT\"},\"coaSpbzZiTB\":{\"uid\":\"coaSpbzZiTB\",\"name\":\"System Focus ID\",\"description\":\"System Focus ID\",\"dimensionItemType\":\"PROGRAM_ATTRIBUTE\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"2021\":{\"name\":\"2021\"},\"MAs88nJc9nL\":{\"uid\":\"MAs88nJc9nL\",\"code\":\"Private Clinic\",\"name\":\"Private Clinic\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"uvMKOn1oWvd.fADIatyOu2g\":{\"uid\":\"fADIatyOu2g\",\"name\":\"LLIN coverage (%)\",\"description\":\"LLIN coverage following a foci response\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"AVERAGE\",\"totalAggregationType\":\"SUM\"},\"ImspTQPwCqd\":{\"uid\":\"ImspTQPwCqd\",\"code\":\"OU_525\",\"name\":\"Sierra Leone\",\"dimensionItemType\":\"ORGANISATION_UNIT\",\"valueType\":\"TEXT\",\"totalAggregationType\":\"SUM\"},\"d6Sr0B2NJYv\":{\"uid\":\"d6Sr0B2NJYv\",\"name\":\"Foci investigations performed\",\"dimensionItemType\":\"PROGRAM_INDICATOR\",\"valueType\":\"NUMBER\",\"aggregationType\":\"COUNT\",\"totalAggregationType\":\"SUM\"},\"Qvb7NExMqjZ\":{\"uid\":\"Qvb7NExMqjZ\",\"name\":\"Follow-up vector control actions 5\",\"description\":\"Follow-up vector control actions\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"CWaAcQYKVpq\":{\"uid\":\"CWaAcQYKVpq\",\"name\":\"Foci investigation & classification\",\"description\":\"Includes the details on the foci investigation (including information on households, population, geography, breeding sites, species types, vector behaviour) as well as its final classification at the time of the investigation. This is a repeatable stage as foci can be investigated more than once and may change their classification as time goes on. \"},\"PVLOW4bCshG\":{\"uid\":\"PVLOW4bCshG\",\"code\":\"NGO\",\"name\":\"NGO\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"oRVt7g429ZO\":{\"uid\":\"oRVt7g429ZO\",\"code\":\"Public facilities\",\"name\":\"Public facilities\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"Bpx0589u8y0\":{\"uid\":\"Bpx0589u8y0\",\"name\":\"Facility Ownership\",\"dimensionType\":\"ORGANISATION_UNIT_GROUP_SET\"},\"uvMKOn1oWvd\":{\"uid\":\"uvMKOn1oWvd\",\"name\":\"Foci response\",\"description\":\"Details the public health response conducted within the foci (including diagnosis and treatment activities, vector control actions and the effectiveness/results of the response). This is a repeatable stage as multiple public health responses for the same foci can occur depending on its classification at the time of investigation.\"},\"w0gFTTmsUcF\":{\"uid\":\"w0gFTTmsUcF\",\"code\":\"Mission\",\"name\":\"Mission\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"M3xtLkYBlKI\":{\"uid\":\"M3xtLkYBlKI\",\"name\":\"Malaria focus investigation\",\"description\":\"It allows to register new focus areas in the system. Each focus area needs to be investigated and classified. Includes the relevant identifiers for the foci including the name and geographical details including the locality and its area. \"}},\"dimensions\":{\"d6Sr0B2NJYv\":[],\"uvMKOn1oWvd.Qvb7NExMqjZ\":[],\"fADIatyOu2g\":[\"= NV\"],\"pe\":[],\"ou\":[\"ImspTQPwCqd\"],\"coaSpbzZiTB\":[],\"Bpx0589u8y0\":[\"MAs88nJc9nL\",\"PVLOW4bCshG\",\"w0gFTTmsUcF\",\"oRVt7g429ZO\"]}}"; + "{\"pager\":{\"page\":1,\"pageSize\":100,\"isLastPage\":true},\"items\":{\"uvMKOn1oWvd.Qvb7NExMqjZ\":{\"uid\":\"Qvb7NExMqjZ\",\"name\":\"Follow-up vector control actions 5\",\"description\":\"Follow-up vector control actions\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"fADIatyOu2g\":{\"uid\":\"fADIatyOu2g\",\"name\":\"LLIN coverage (%)\",\"description\":\"LLIN coverage following a foci response\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"AVERAGE\",\"totalAggregationType\":\"SUM\"},\"ou\":{\"uid\":\"ou\",\"name\":\"Organisation unit\",\"dimensionType\":\"ORGANISATION_UNIT\"},\"coaSpbzZiTB\":{\"uid\":\"coaSpbzZiTB\",\"name\":\"System Focus ID\",\"description\":\"System Focus ID\",\"dimensionItemType\":\"PROGRAM_ATTRIBUTE\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"2021\":{\"name\":\"2021\"},\"MAs88nJc9nL\":{\"uid\":\"MAs88nJc9nL\",\"code\":\"Private Clinic\",\"name\":\"Private Clinic\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"uvMKOn1oWvd.fADIatyOu2g\":{\"uid\":\"fADIatyOu2g\",\"name\":\"LLIN coverage (%)\",\"description\":\"LLIN coverage following a foci response\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"AVERAGE\",\"totalAggregationType\":\"SUM\"},\"ImspTQPwCqd\":{\"uid\":\"ImspTQPwCqd\",\"code\":\"OU_525\",\"name\":\"Sierra Leone\",\"dimensionItemType\":\"ORGANISATION_UNIT\",\"valueType\":\"TEXT\",\"totalAggregationType\":\"SUM\"},\"d6Sr0B2NJYv\":{\"uid\":\"d6Sr0B2NJYv\",\"name\":\"Foci investigations performed\",\"dimensionItemType\":\"PROGRAM_INDICATOR\",\"valueType\":\"NUMBER\",\"aggregationType\":\"COUNT\",\"totalAggregationType\":\"SUM\"},\"Qvb7NExMqjZ\":{\"uid\":\"Qvb7NExMqjZ\",\"name\":\"Follow-up vector control actions 5\",\"description\":\"Follow-up vector control actions\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"CWaAcQYKVpq\":{\"uid\":\"CWaAcQYKVpq\",\"name\":\"Foci investigation & classification\",\"description\":\"Includes the details on the foci investigation (including information on households, population, geography, breeding sites, species types, vector behaviour) as well as its final classification at the time of the investigation. This is a repeatable stage as foci can be investigated more than once and may change their classification as time goes on. \"},\"PVLOW4bCshG\":{\"uid\":\"PVLOW4bCshG\",\"code\":\"NGO\",\"name\":\"NGO\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"oRVt7g429ZO\":{\"uid\":\"oRVt7g429ZO\",\"code\":\"Public facilities\",\"name\":\"Public facilities\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"Bpx0589u8y0\":{\"uid\":\"Bpx0589u8y0\",\"name\":\"Facility Ownership\",\"dimensionType\":\"ORGANISATION_UNIT_GROUP_SET\"},\"uvMKOn1oWvd\":{\"uid\":\"uvMKOn1oWvd\",\"name\":\"Foci response\",\"description\":\"Details the public health response conducted within the foci (including diagnosis and treatment activities, vector control actions and the effectiveness/results of the response). This is a repeatable stage as multiple public health responses for the same foci can occur depending on its classification at the time of investigation.\"},\"w0gFTTmsUcF\":{\"uid\":\"w0gFTTmsUcF\",\"code\":\"Mission\",\"name\":\"Mission\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"M3xtLkYBlKI\":{\"uid\":\"M3xtLkYBlKI\",\"name\":\"Malaria focus investigation\",\"description\":\"It allows to register new focus areas in the system. Each focus area needs to be investigated and classified. Includes the relevant identifiers for the foci including the name and geographical details including the locality and its area. \"}},\"dimensions\":{\"d6Sr0B2NJYv\":[],\"uvMKOn1oWvd.Qvb7NExMqjZ\":[],\"uvMKOn1oWvd.fADIatyOu2g\":[\"= NV\"],\"pe\":[],\"ou\":[\"ImspTQPwCqd\"],\"coaSpbzZiTB\":[],\"Bpx0589u8y0\":[\"MAs88nJc9nL\",\"PVLOW4bCshG\",\"w0gFTTmsUcF\",\"oRVt7g429ZO\"]}}"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); @@ -392,7 +392,7 @@ public void queryRandom7() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"pager\":{\"page\":1,\"pageSize\":100,\"isLastPage\":true},\"items\":{\"uvMKOn1oWvd.Qvb7NExMqjZ\":{\"uid\":\"Qvb7NExMqjZ\",\"name\":\"Follow-up vector control actions 5\",\"description\":\"Follow-up vector control actions\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"fADIatyOu2g\":{\"uid\":\"fADIatyOu2g\",\"name\":\"LLIN coverage (%)\",\"description\":\"LLIN coverage following a foci response\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"AVERAGE\",\"totalAggregationType\":\"SUM\"},\"ou\":{\"uid\":\"ou\",\"name\":\"Organisation unit\",\"dimensionType\":\"ORGANISATION_UNIT\"},\"coaSpbzZiTB\":{\"uid\":\"coaSpbzZiTB\",\"name\":\"System Focus ID\",\"description\":\"System Focus ID\",\"dimensionItemType\":\"PROGRAM_ATTRIBUTE\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"XjcDg2kOmqf\":{\"uid\":\"XjcDg2kOmqf\",\"name\":\"Malaria confirmed Pv (foci)\",\"description\":\"The number of Pv malariacases identified in the a foci during foci investigation\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"SUM\",\"totalAggregationType\":\"SUM\"},\"2021\":{\"name\":\"2021\"},\"MAs88nJc9nL\":{\"uid\":\"MAs88nJc9nL\",\"code\":\"Private Clinic\",\"name\":\"Private Clinic\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"CWaAcQYKVpq.XjcDg2kOmqf\":{\"uid\":\"XjcDg2kOmqf\",\"name\":\"Malaria confirmed Pv (foci)\",\"description\":\"The number of Pv malariacases identified in the a foci during foci investigation\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"SUM\",\"totalAggregationType\":\"SUM\"},\"uvMKOn1oWvd.fADIatyOu2g\":{\"uid\":\"fADIatyOu2g\",\"name\":\"LLIN coverage (%)\",\"description\":\"LLIN coverage following a foci response\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"AVERAGE\",\"totalAggregationType\":\"SUM\"},\"ImspTQPwCqd\":{\"uid\":\"ImspTQPwCqd\",\"code\":\"OU_525\",\"name\":\"Sierra Leone\",\"dimensionItemType\":\"ORGANISATION_UNIT\",\"valueType\":\"TEXT\",\"totalAggregationType\":\"SUM\"},\"d6Sr0B2NJYv\":{\"uid\":\"d6Sr0B2NJYv\",\"name\":\"Foci investigations performed\",\"dimensionItemType\":\"PROGRAM_INDICATOR\",\"valueType\":\"NUMBER\",\"aggregationType\":\"COUNT\",\"totalAggregationType\":\"SUM\"},\"Qvb7NExMqjZ\":{\"uid\":\"Qvb7NExMqjZ\",\"name\":\"Follow-up vector control actions 5\",\"description\":\"Follow-up vector control actions\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"CWaAcQYKVpq\":{\"uid\":\"CWaAcQYKVpq\",\"name\":\"Foci investigation & classification\",\"description\":\"Includes the details on the foci investigation (including information on households, population, geography, breeding sites, species types, vector behaviour) as well as its final classification at the time of the investigation. This is a repeatable stage as foci can be investigated more than once and may change their classification as time goes on. \"},\"PVLOW4bCshG\":{\"uid\":\"PVLOW4bCshG\",\"code\":\"NGO\",\"name\":\"NGO\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"ffbaoqebOT3\":{\"uid\":\"ffbaoqebOT3\",\"name\":\"Name of health facility catchment area\",\"dimensionItemType\":\"PROGRAM_ATTRIBUTE\",\"valueType\":\"TEXT\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"DX4LVYeP7bw\":{\"uid\":\"DX4LVYeP7bw\",\"name\":\"People included\",\"description\":\"Number of people included\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"},\"oRVt7g429ZO\":{\"uid\":\"oRVt7g429ZO\",\"code\":\"Public facilities\",\"name\":\"Public facilities\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"Bpx0589u8y0\":{\"uid\":\"Bpx0589u8y0\",\"name\":\"Facility Ownership\",\"dimensionType\":\"ORGANISATION_UNIT_GROUP_SET\"},\"uvMKOn1oWvd\":{\"uid\":\"uvMKOn1oWvd\",\"name\":\"Foci response\",\"description\":\"Details the public health response conducted within the foci (including diagnosis and treatment activities, vector control actions and the effectiveness/results of the response). This is a repeatable stage as multiple public health responses for the same foci can occur depending on its classification at the time of investigation.\"},\"w0gFTTmsUcF\":{\"uid\":\"w0gFTTmsUcF\",\"code\":\"Mission\",\"name\":\"Mission\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"valueType\":\"NUMBER\",\"totalAggregationType\":\"SUM\"},\"M3xtLkYBlKI\":{\"uid\":\"M3xtLkYBlKI\",\"name\":\"Malaria focus investigation\",\"description\":\"It allows to register new focus areas in the system. Each focus area needs to be investigated and classified. Includes the relevant identifiers for the foci including the name and geographical details including the locality and its area. \"},\"uvMKOn1oWvd.DX4LVYeP7bw\":{\"uid\":\"DX4LVYeP7bw\",\"name\":\"People included\",\"description\":\"Number of people included\",\"dimensionItemType\":\"DATA_ELEMENT\",\"valueType\":\"NUMBER\",\"aggregationType\":\"NONE\",\"totalAggregationType\":\"NONE\"}},\"dimensions\":{\"d6Sr0B2NJYv\":[],\"uvMKOn1oWvd.Qvb7NExMqjZ\":[],\"fADIatyOu2g\":[\"= NV\"],\"pe\":[],\"ou\":[\"ImspTQPwCqd\"],\"coaSpbzZiTB\":[],\"XjcDg2kOmqf\":[\"> 1\"],\"ffbaoqebOT3\":[],\"Bpx0589u8y0\":[\"MAs88nJc9nL\",\"PVLOW4bCshG\",\"w0gFTTmsUcF\",\"oRVt7g429ZO\"],\"uvMKOn1oWvd.DX4LVYeP7bw\":[]}}"; + "{\"pager\":{\"isLastPage\":true,\"pageSize\":100,\"page\":1},\"items\":{\"uvMKOn1oWvd.Qvb7NExMqjZ\":{\"uid\":\"Qvb7NExMqjZ\",\"aggregationType\":\"NONE\",\"valueType\":\"TEXT\",\"name\":\"Follow-up vector control actions 5\",\"description\":\"Follow-up vector control actions\",\"dimensionItemType\":\"DATA_ELEMENT\",\"totalAggregationType\":\"NONE\"},\"fADIatyOu2g\":{\"uid\":\"fADIatyOu2g\",\"aggregationType\":\"AVERAGE\",\"valueType\":\"NUMBER\",\"name\":\"LLIN coverage (%)\",\"description\":\"LLIN coverage following a foci response\",\"dimensionItemType\":\"DATA_ELEMENT\",\"totalAggregationType\":\"SUM\"},\"ou\":{\"uid\":\"ou\",\"dimensionType\":\"ORGANISATION_UNIT\",\"name\":\"Organisation unit\"},\"coaSpbzZiTB\":{\"uid\":\"coaSpbzZiTB\",\"aggregationType\":\"NONE\",\"valueType\":\"TEXT\",\"name\":\"System Focus ID\",\"description\":\"System Focus ID\",\"dimensionItemType\":\"PROGRAM_ATTRIBUTE\",\"totalAggregationType\":\"NONE\"},\"XjcDg2kOmqf\":{\"uid\":\"XjcDg2kOmqf\",\"aggregationType\":\"SUM\",\"valueType\":\"NUMBER\",\"name\":\"Malaria confirmed Pv (foci)\",\"description\":\"The number of Pv malariacases identified in the a foci during foci investigation\",\"dimensionItemType\":\"DATA_ELEMENT\",\"totalAggregationType\":\"SUM\"},\"2021\":{\"name\":\"2021\"},\"MAs88nJc9nL\":{\"uid\":\"MAs88nJc9nL\",\"code\":\"Private Clinic\",\"valueType\":\"NUMBER\",\"name\":\"Private Clinic\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"totalAggregationType\":\"SUM\"},\"CWaAcQYKVpq.XjcDg2kOmqf\":{\"uid\":\"XjcDg2kOmqf\",\"aggregationType\":\"SUM\",\"valueType\":\"NUMBER\",\"name\":\"Malaria confirmed Pv (foci)\",\"description\":\"The number of Pv malariacases identified in the a foci during foci investigation\",\"dimensionItemType\":\"DATA_ELEMENT\",\"totalAggregationType\":\"SUM\"},\"uvMKOn1oWvd.fADIatyOu2g\":{\"uid\":\"fADIatyOu2g\",\"aggregationType\":\"AVERAGE\",\"valueType\":\"NUMBER\",\"name\":\"LLIN coverage (%)\",\"description\":\"LLIN coverage following a foci response\",\"dimensionItemType\":\"DATA_ELEMENT\",\"totalAggregationType\":\"SUM\"},\"ImspTQPwCqd\":{\"uid\":\"ImspTQPwCqd\",\"code\":\"OU_525\",\"valueType\":\"TEXT\",\"name\":\"Sierra Leone\",\"dimensionItemType\":\"ORGANISATION_UNIT\",\"totalAggregationType\":\"SUM\"},\"d6Sr0B2NJYv\":{\"uid\":\"d6Sr0B2NJYv\",\"aggregationType\":\"COUNT\",\"valueType\":\"NUMBER\",\"name\":\"Foci investigations performed\",\"dimensionItemType\":\"PROGRAM_INDICATOR\",\"totalAggregationType\":\"SUM\"},\"Qvb7NExMqjZ\":{\"uid\":\"Qvb7NExMqjZ\",\"aggregationType\":\"NONE\",\"valueType\":\"TEXT\",\"name\":\"Follow-up vector control actions 5\",\"description\":\"Follow-up vector control actions\",\"dimensionItemType\":\"DATA_ELEMENT\",\"totalAggregationType\":\"NONE\"},\"pe\":{\"uid\":\"pe\",\"dimensionType\":\"PERIOD\"},\"CWaAcQYKVpq\":{\"uid\":\"CWaAcQYKVpq\",\"name\":\"Foci investigation & classification\",\"description\":\"Includes the details on the foci investigation (including information on households, population, geography, breeding sites, species types, vector behaviour) as well as its final classification at the time of the investigation. This is a repeatable stage as foci can be investigated more than once and may change their classification as time goes on. \"},\"enrollmentdate\":{\"name\":\"Date of Focus Registration\"},\"PVLOW4bCshG\":{\"uid\":\"PVLOW4bCshG\",\"code\":\"NGO\",\"valueType\":\"NUMBER\",\"name\":\"NGO\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"totalAggregationType\":\"SUM\"},\"ffbaoqebOT3\":{\"uid\":\"ffbaoqebOT3\",\"aggregationType\":\"NONE\",\"valueType\":\"TEXT\",\"name\":\"Name of health facility catchment area\",\"dimensionItemType\":\"PROGRAM_ATTRIBUTE\",\"totalAggregationType\":\"NONE\"},\"DX4LVYeP7bw\":{\"uid\":\"DX4LVYeP7bw\",\"aggregationType\":\"NONE\",\"valueType\":\"NUMBER\",\"name\":\"People included\",\"description\":\"Number of people included\",\"dimensionItemType\":\"DATA_ELEMENT\",\"totalAggregationType\":\"NONE\"},\"oRVt7g429ZO\":{\"uid\":\"oRVt7g429ZO\",\"code\":\"Public facilities\",\"valueType\":\"NUMBER\",\"name\":\"Public facilities\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"totalAggregationType\":\"SUM\"},\"Bpx0589u8y0\":{\"uid\":\"Bpx0589u8y0\",\"dimensionType\":\"ORGANISATION_UNIT_GROUP_SET\",\"name\":\"Facility Ownership\"},\"uvMKOn1oWvd\":{\"uid\":\"uvMKOn1oWvd\",\"name\":\"Foci response\",\"description\":\"Details the public health response conducted within the foci (including diagnosis and treatment activities, vector control actions and the effectiveness\\/results of the response). This is a repeatable stage as multiple public health responses for the same foci can occur depending on its classification at the time of investigation.\"},\"w0gFTTmsUcF\":{\"uid\":\"w0gFTTmsUcF\",\"code\":\"Mission\",\"valueType\":\"NUMBER\",\"name\":\"Mission\",\"dimensionItemType\":\"ORGANISATION_UNIT_GROUP\",\"totalAggregationType\":\"SUM\"},\"M3xtLkYBlKI\":{\"uid\":\"M3xtLkYBlKI\",\"name\":\"Malaria focus investigation\",\"description\":\"It allows to register new focus areas in the system. Each focus area needs to be investigated and classified. Includes the relevant identifiers for the foci including the name and geographical details including the locality and its area. \"},\"uvMKOn1oWvd.DX4LVYeP7bw\":{\"uid\":\"DX4LVYeP7bw\",\"aggregationType\":\"NONE\",\"valueType\":\"NUMBER\",\"name\":\"People included\",\"description\":\"Number of people included\",\"dimensionItemType\":\"DATA_ELEMENT\",\"totalAggregationType\":\"NONE\"}},\"dimensions\":{\"uvMKOn1oWvd.fADIatyOu2g\":[\"= NV\"],\"d6Sr0B2NJYv\":[],\"uvMKOn1oWvd.Qvb7NExMqjZ\":[],\"pe\":[],\"ou\":[\"ImspTQPwCqd\"],\"coaSpbzZiTB\":[],\"enrollmentdate\":[\"2021\"],\"ffbaoqebOT3\":[],\"Bpx0589u8y0\":[\"MAs88nJc9nL\",\"PVLOW4bCshG\",\"w0gFTTmsUcF\",\"oRVt7g429ZO\"],\"uvMKOn1oWvd.DX4LVYeP7bw\":[],\"CWaAcQYKVpq.XjcDg2kOmqf\":[\"> 1\"]}}\n"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate11AutoTest.java b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate11AutoTest.java index 99f3bdc2d237..3180094fc401 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate11AutoTest.java +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate11AutoTest.java @@ -124,6 +124,107 @@ public void stageAndEventDateLastSixMonths() throws JSONException { response, actualHeaders, Map.of("A03MvHHogjR.eventdate", "202101", "value", "949")); } + @Test + public void stageAndEventDateLastSixMonthsAsFilter() throws JSONException { + // Read the 'expect.postgis' system property at runtime to adapt assertions. + boolean expectPostgis = isPostgres(); + + // Given + QueryParamsBuilder params = + new QueryParamsBuilder() + .add("displayProperty=NAME") + .add("totalPages=false") + .add("filter=A03MvHHogjR.EVENT_DATE:LAST_6_MONTHS") + .add("relativePeriodDate=2021-07-01"); + + // When + ApiResponse response = actions.aggregate().get("IpHINAT79UW", JSON, JSON, params); + // Then + // 1. Validate Response Structure (Counts, Headers, Height/Width) + // This helper checks basic counts and dimensions, adapting based on the runtime + // 'expectPostgis' flag. + validateResponseStructure( + response, + expectPostgis, + 1, + 1, + 1); // Pass runtime flag, row count, and expected header counts + + // 2. Extract Headers into a List of Maps for easy access by name + List> actualHeaders = + response.extractList("headers", Map.class).stream() + .map(obj -> (Map) obj) // Ensure correct type + .collect(Collectors.toList()); + + // 3. Assert metaData. + String expectedMetaData = + "{\"items\":{\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"A03MvHHogjR.eventdate\":{\"name\":\"Report date\"},\"IpHINAT79UW\":{\"name\":\"Child Programme\"},\"ZzYYXq4fJie\":{\"name\":\"Baby Postnatal\"},\"ou\":{},\"A03MvHHogjR\":{\"name\":\"Birth\"}},\"dimensions\":{\"A03MvHHogjR.eventdate\":[\"202101\",\"202102\",\"202103\",\"202104\",\"202105\",\"202106\"],\"pe\":[],\"ou\":[\"ImspTQPwCqd\"]}}\n\n"; + String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); + assertEquals(expectedMetaData, actualMetaData, false); + + // 4. Validate Headers By Name (conditionally checking PostGIS headers). + validateHeaderPropertiesByName( + response, actualHeaders, "value", "Value", "NUMBER", "java.lang.Double", false, false); + + // rowContext not found or empty in the response, skipping assertions. + + // 7. Assert row existence by value (unsorted results - validates all columns). + // Validate row exists with values from original row index 0 + validateRowExists(response, actualHeaders, Map.of("value", "5496")); + } + + @Test + public void stageAndEventDateSpecificYearAsFilter() throws JSONException { + // Read the 'expect.postgis' system property at runtime to adapt assertions. + boolean expectPostgis = isPostgres(); + + // Given + QueryParamsBuilder params = + new QueryParamsBuilder() + .add("filter=A03MvHHogjR.EVENT_DATE:2021") + .add("displayProperty=NAME") + .add("sortOrder=desc") + .add("totalPages=false") + .add("outputType=EVENT") + .add("relativePeriodDate=2023-07-01"); + + // When + ApiResponse response = actions.aggregate().get("IpHINAT79UW", JSON, JSON, params); + + // Then + // 1. Validate Response Structure (Counts, Headers, Height/Width) + // This helper checks basic counts and dimensions, adapting based on the runtime + // 'expectPostgis' flag. + validateResponseStructure( + response, + expectPostgis, + 1, + 1, + 1); // Pass runtime flag, row count, and expected header counts + + // 2. Extract Headers into a List of Maps for easy access by name + List> actualHeaders = + response.extractList("headers", Map.class).stream() + .map(obj -> (Map) obj) // Ensure correct type + .collect(Collectors.toList()); + + // 3. Assert metaData. + String expectedMetaData = + "{\"items\":{\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"A03MvHHogjR.eventdate\":{\"name\":\"Report date\"},\"IpHINAT79UW\":{\"name\":\"Child Programme\"},\"ZzYYXq4fJie\":{\"name\":\"Baby Postnatal\"},\"ou\":{},\"A03MvHHogjR\":{\"name\":\"Birth\"}},\"dimensions\":{\"pe\":[],\"ou\":[\"ImspTQPwCqd\"],\"A03MvHHogjR.eventdate\":[\"2021\"]}}"; + String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); + assertEquals(expectedMetaData, actualMetaData, false); + + // 4. Validate Headers By Name (conditionally checking PostGIS headers). + validateHeaderPropertiesByName( + response, actualHeaders, "value", "Value", "NUMBER", "java.lang.Double", false, false); + + // rowContext not found or empty in the response, skipping assertions. + + // 7. Assert row existence by value (unsorted results - validates all columns). + // Validate row exists with values from original row index 0 + validateRowExists(response, actualHeaders, Map.of("value", "11017")); + } + @Test public void stageAndEventDateSpecificYear() throws JSONException { // Read the 'expect.postgis' system property at runtime to adapt assertions. diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate2AutoTest.java b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate2AutoTest.java index d71a35275294..fe73a247c816 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate2AutoTest.java +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate2AutoTest.java @@ -1126,7 +1126,7 @@ public void queryDischargedLast12MonthsByDistricts() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"items\":{\"jUb8gELQApl\":{\"name\":\"Kailahun\"},\"eIQbndfxQMb\":{\"name\":\"Tonkolili\"},\"Vth0fbpFcsO\":{\"name\":\"Kono\"},\"202208\":{\"name\":\"August 2022\"},\"O6uvpzGd5pu\":{\"name\":\"Bo\"},\"bL4ooGhyHRQ\":{\"name\":\"Pujehun\"},\"202209\":{\"name\":\"September 2022\"},\"kJq2mPyFEHo\":{\"name\":\"Kenema\"},\"202305\":{\"name\":\"May 2023\"},\"202207\":{\"name\":\"July 2022\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"gj2fKKyp8OH\":{\"code\":\"MODDIED\",\"name\":\"Died\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"LAST_12_MONTHS\":{\"name\":\"Last 12 months\"},\"Zj7UnCAulEk\":{\"name\":\"Inpatient morbidity and mortality\"},\"202211\":{\"name\":\"November 2022\"},\"202212\":{\"name\":\"December 2022\"},\"at6UHUQatSo\":{\"name\":\"Western Area\"},\"202210\":{\"name\":\"October 2022\"},\"Zj7UnCAulEk.fWIAEtYVEGk\":{\"name\":\"Mode of Discharge\"},\"eBAyeGv0exc\":{\"name\":\"Inpatient morbidity and mortality\"},\"TEQlaapDQoK\":{\"name\":\"Port Loko\"},\"PMa2VCrupOd\":{\"name\":\"Kambia\"},\"ou\":{\"name\":\"Organisation unit\"},\"Fhbf4aKpZmZ\":{\"code\":\"MODABSC\",\"name\":\"Absconded\"},\"fdc6uOvgoji\":{\"name\":\"Bombali\"},\"pe\":{\"name\":\"Period\"},\"fShHdgT7XGb\":{\"code\":\"MODTRANS\",\"name\":\"Transferred\"},\"lc3eMKXaEfw\":{\"name\":\"Bonthe\"},\"qhqAxPSTUXp\":{\"name\":\"Koinadugu\"},\"jmIPBj66vD6\":{\"name\":\"Moyamba\"},\"yeod5tOXpkP\":{\"code\":\"MODDISCH\",\"name\":\"Discharged\"}},\"dimensions\":{\"pe\":[\"202207\",\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\"],\"ou\":[\"jUb8gELQApl\",\"TEQlaapDQoK\",\"eIQbndfxQMb\",\"Vth0fbpFcsO\",\"PMa2VCrupOd\",\"O6uvpzGd5pu\",\"bL4ooGhyHRQ\",\"kJq2mPyFEHo\",\"fdc6uOvgoji\",\"at6UHUQatSo\",\"lc3eMKXaEfw\",\"qhqAxPSTUXp\",\"jmIPBj66vD6\"],\"fWIAEtYVEGk\":[\"yeod5tOXpkP\",\"gj2fKKyp8OH\",\"fShHdgT7XGb\",\"Fhbf4aKpZmZ\"]}}"; + "{\"items\":{\"jUb8gELQApl\":{\"name\":\"Kailahun\"},\"eIQbndfxQMb\":{\"name\":\"Tonkolili\"},\"Vth0fbpFcsO\":{\"name\":\"Kono\"},\"202208\":{\"name\":\"August 2022\"},\"O6uvpzGd5pu\":{\"name\":\"Bo\"},\"bL4ooGhyHRQ\":{\"name\":\"Pujehun\"},\"202209\":{\"name\":\"September 2022\"},\"kJq2mPyFEHo\":{\"name\":\"Kenema\"},\"202305\":{\"name\":\"May 2023\"},\"202207\":{\"name\":\"July 2022\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"gj2fKKyp8OH\":{\"code\":\"MODDIED\",\"name\":\"Died\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"LAST_12_MONTHS\":{\"name\":\"Last 12 months\"},\"Zj7UnCAulEk\":{\"name\":\"Inpatient morbidity and mortality\"},\"202211\":{\"name\":\"November 2022\"},\"202212\":{\"name\":\"December 2022\"},\"at6UHUQatSo\":{\"name\":\"Western Area\"},\"202210\":{\"name\":\"October 2022\"},\"Zj7UnCAulEk.fWIAEtYVEGk\":{\"name\":\"Mode of Discharge\"},\"eBAyeGv0exc\":{\"name\":\"Inpatient morbidity and mortality\"},\"TEQlaapDQoK\":{\"name\":\"Port Loko\"},\"PMa2VCrupOd\":{\"name\":\"Kambia\"},\"ou\":{\"name\":\"Organisation unit\"},\"Fhbf4aKpZmZ\":{\"code\":\"MODABSC\",\"name\":\"Absconded\"},\"fdc6uOvgoji\":{\"name\":\"Bombali\"},\"pe\":{\"name\":\"Period\"},\"fShHdgT7XGb\":{\"code\":\"MODTRANS\",\"name\":\"Transferred\"},\"lc3eMKXaEfw\":{\"name\":\"Bonthe\"},\"qhqAxPSTUXp\":{\"name\":\"Koinadugu\"},\"jmIPBj66vD6\":{\"name\":\"Moyamba\"},\"yeod5tOXpkP\":{\"code\":\"MODDISCH\",\"name\":\"Discharged\"}},\"dimensions\":{\"Zj7UnCAulEk.fWIAEtYVEGk\":[\"yeod5tOXpkP\",\"gj2fKKyp8OH\",\"fShHdgT7XGb\",\"Fhbf4aKpZmZ\"],\"pe\":[\"202207\",\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\"],\"ou\":[\"jUb8gELQApl\",\"TEQlaapDQoK\",\"eIQbndfxQMb\",\"Vth0fbpFcsO\",\"PMa2VCrupOd\",\"O6uvpzGd5pu\",\"bL4ooGhyHRQ\",\"kJq2mPyFEHo\",\"fdc6uOvgoji\",\"at6UHUQatSo\",\"lc3eMKXaEfw\",\"qhqAxPSTUXp\",\"jmIPBj66vD6\"]}}\n"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate5AutoTest.java b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate5AutoTest.java index 9547e4026d71..a450d2e4c71f 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate5AutoTest.java +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate5AutoTest.java @@ -324,7 +324,7 @@ public void queryModeOfDischargeLast12MonthsWide() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"items\":{\"jUb8gELQApl\":{\"name\":\"Kailahun\"},\"eIQbndfxQMb\":{\"name\":\"Tonkolili\"},\"Vth0fbpFcsO\":{\"name\":\"Kono\"},\"202208\":{\"name\":\"August 2022\"},\"O6uvpzGd5pu\":{\"name\":\"Bo\"},\"bL4ooGhyHRQ\":{\"name\":\"Pujehun\"},\"202209\":{\"name\":\"September 2022\"},\"kJq2mPyFEHo\":{\"name\":\"Kenema\"},\"202305\":{\"name\":\"May 2023\"},\"202207\":{\"name\":\"July 2022\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"gj2fKKyp8OH\":{\"code\":\"MODDIED\",\"name\":\"Died\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"LAST_12_MONTHS\":{\"name\":\"Last 12 months\"},\"Zj7UnCAulEk\":{\"name\":\"Inpatient morbidity and mortality\"},\"202211\":{\"name\":\"November 2022\"},\"202212\":{\"name\":\"December 2022\"},\"at6UHUQatSo\":{\"name\":\"Western Area\"},\"202210\":{\"name\":\"October 2022\"},\"Zj7UnCAulEk.fWIAEtYVEGk\":{\"name\":\"Mode of Discharge\"},\"eBAyeGv0exc\":{\"name\":\"Inpatient morbidity and mortality\"},\"TEQlaapDQoK\":{\"name\":\"Port Loko\"},\"PMa2VCrupOd\":{\"name\":\"Kambia\"},\"ou\":{\"name\":\"Organisation unit\"},\"Fhbf4aKpZmZ\":{\"code\":\"MODABSC\",\"name\":\"Absconded\"},\"fdc6uOvgoji\":{\"name\":\"Bombali\"},\"pe\":{\"name\":\"Period\"},\"fShHdgT7XGb\":{\"code\":\"MODTRANS\",\"name\":\"Transferred\"},\"lc3eMKXaEfw\":{\"name\":\"Bonthe\"},\"qhqAxPSTUXp\":{\"name\":\"Koinadugu\"},\"jmIPBj66vD6\":{\"name\":\"Moyamba\"},\"yeod5tOXpkP\":{\"code\":\"MODDISCH\",\"name\":\"Discharged\"}},\"dimensions\":{\"pe\":[\"202207\",\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\"],\"ou\":[\"jUb8gELQApl\",\"TEQlaapDQoK\",\"eIQbndfxQMb\",\"Vth0fbpFcsO\",\"PMa2VCrupOd\",\"O6uvpzGd5pu\",\"bL4ooGhyHRQ\",\"kJq2mPyFEHo\",\"fdc6uOvgoji\",\"at6UHUQatSo\",\"lc3eMKXaEfw\",\"qhqAxPSTUXp\",\"jmIPBj66vD6\"],\"fWIAEtYVEGk\":[\"yeod5tOXpkP\",\"gj2fKKyp8OH\",\"fShHdgT7XGb\",\"Fhbf4aKpZmZ\"]}}"; + "{\"items\":{\"jUb8gELQApl\":{\"name\":\"Kailahun\"},\"eIQbndfxQMb\":{\"name\":\"Tonkolili\"},\"Vth0fbpFcsO\":{\"name\":\"Kono\"},\"202208\":{\"name\":\"August 2022\"},\"O6uvpzGd5pu\":{\"name\":\"Bo\"},\"bL4ooGhyHRQ\":{\"name\":\"Pujehun\"},\"202209\":{\"name\":\"September 2022\"},\"kJq2mPyFEHo\":{\"name\":\"Kenema\"},\"202305\":{\"name\":\"May 2023\"},\"202207\":{\"name\":\"July 2022\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"gj2fKKyp8OH\":{\"code\":\"MODDIED\",\"name\":\"Died\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"LAST_12_MONTHS\":{\"name\":\"Last 12 months\"},\"Zj7UnCAulEk\":{\"name\":\"Inpatient morbidity and mortality\"},\"202211\":{\"name\":\"November 2022\"},\"202212\":{\"name\":\"December 2022\"},\"at6UHUQatSo\":{\"name\":\"Western Area\"},\"202210\":{\"name\":\"October 2022\"},\"Zj7UnCAulEk.fWIAEtYVEGk\":{\"name\":\"Mode of Discharge\"},\"eBAyeGv0exc\":{\"name\":\"Inpatient morbidity and mortality\"},\"TEQlaapDQoK\":{\"name\":\"Port Loko\"},\"PMa2VCrupOd\":{\"name\":\"Kambia\"},\"ou\":{\"name\":\"Organisation unit\"},\"Fhbf4aKpZmZ\":{\"code\":\"MODABSC\",\"name\":\"Absconded\"},\"fdc6uOvgoji\":{\"name\":\"Bombali\"},\"pe\":{\"name\":\"Period\"},\"fShHdgT7XGb\":{\"code\":\"MODTRANS\",\"name\":\"Transferred\"},\"lc3eMKXaEfw\":{\"name\":\"Bonthe\"},\"qhqAxPSTUXp\":{\"name\":\"Koinadugu\"},\"jmIPBj66vD6\":{\"name\":\"Moyamba\"},\"yeod5tOXpkP\":{\"code\":\"MODDISCH\",\"name\":\"Discharged\"}},\"dimensions\":{\"Zj7UnCAulEk.fWIAEtYVEGk\":[\"yeod5tOXpkP\",\"gj2fKKyp8OH\",\"fShHdgT7XGb\",\"Fhbf4aKpZmZ\"],\"pe\":[\"202207\",\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\"],\"ou\":[\"jUb8gELQApl\",\"TEQlaapDQoK\",\"eIQbndfxQMb\",\"Vth0fbpFcsO\",\"PMa2VCrupOd\",\"O6uvpzGd5pu\",\"bL4ooGhyHRQ\",\"kJq2mPyFEHo\",\"fdc6uOvgoji\",\"at6UHUQatSo\",\"lc3eMKXaEfw\",\"qhqAxPSTUXp\",\"jmIPBj66vD6\"]}}\n"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate7AutoTest.java b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate7AutoTest.java index 82ed6078f3e8..89f9b0bf37c4 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate7AutoTest.java +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate7AutoTest.java @@ -504,7 +504,7 @@ public void queryEnrollmentoutput2() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"items\":{\"IpHINAT79UW\":{\"name\":\"Child Programme\"},\"ZzYYXq4fJie\":{\"name\":\"Baby Postnatal\"},\"ou\":{\"name\":\"Organisation unit\"},\"202208\":{\"name\":\"August 2022\"},\"202209\":{\"name\":\"September 2022\"},\"202305\":{\"name\":\"May 2023\"},\"202207\":{\"name\":\"July 2022\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"LAST_12_MONTHS\":{\"name\":\"Last 12 months\"},\"202211\":{\"name\":\"November 2022\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"202212\":{\"name\":\"December 2022\"},\"202210\":{\"name\":\"October 2022\"},\"pe\":{\"name\":\"Period\"},\"ZzYYXq4fJie.w75KJ2mc4zz\":{\"name\":\"First name\"},\"ZzYYXq4fJie.lZGmxYbs97q\":{\"name\":\"Unique ID\"}},\"dimensions\":{\"lZGmxYbs97q\":[],\"pe\":[\"202207\",\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\"],\"ou\":[\"ImspTQPwCqd\"],\"w75KJ2mc4zz\":[\"like a\"]}}"; + "{\"items\":{\"IpHINAT79UW\":{\"name\":\"Child Programme\"},\"ZzYYXq4fJie\":{\"name\":\"Baby Postnatal\"},\"ou\":{\"name\":\"Organisation unit\"},\"202208\":{\"name\":\"August 2022\"},\"202209\":{\"name\":\"September 2022\"},\"202305\":{\"name\":\"May 2023\"},\"202207\":{\"name\":\"July 2022\"},\"202306\":{\"name\":\"June 2023\"},\"202303\":{\"name\":\"March 2023\"},\"202304\":{\"name\":\"April 2023\"},\"202301\":{\"name\":\"January 2023\"},\"202302\":{\"name\":\"February 2023\"},\"LAST_12_MONTHS\":{\"name\":\"Last 12 months\"},\"202211\":{\"name\":\"November 2022\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"202212\":{\"name\":\"December 2022\"},\"202210\":{\"name\":\"October 2022\"},\"pe\":{\"name\":\"Period\"},\"ZzYYXq4fJie.w75KJ2mc4zz\":{\"name\":\"First name\"},\"ZzYYXq4fJie.lZGmxYbs97q\":{\"name\":\"Unique ID\"}},\"dimensions\":{\"pe\":[\"202207\",\"202208\",\"202209\",\"202210\",\"202211\",\"202212\",\"202301\",\"202302\",\"202303\",\"202304\",\"202305\",\"202306\"],\"ou\":[\"ImspTQPwCqd\"],\"ZzYYXq4fJie.w75KJ2mc4zz\":[\"like a\"],\"ZzYYXq4fJie.lZGmxYbs97q\":[]}}\n"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); @@ -551,7 +551,7 @@ public void queryEnrollmentoutput3() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"items\":{\"ou\":{\"name\":\"Organisation unit\"},\"2021\":{\"name\":\"2021\"},\"2020\":{\"name\":\"2020\"},\"uvMKOn1oWvd.zgnTlAH4ZOk\":{\"name\":\"Follow-up vector control action details\"},\"LAST_5_YEARS\":{\"name\":\"Last 5 years\"},\"uvMKOn1oWvd.fADIatyOu2g\":{\"name\":\"LLIN coverage (%)\"},\"2019\":{\"name\":\"2019\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"2018\":{\"name\":\"2018\"},\"2017\":{\"name\":\"2017\"},\"2016\":{\"name\":\"2016\"},\"pe\":{\"name\":\"Period\"},\"uvMKOn1oWvd\":{\"name\":\"Foci response\"},\"M3xtLkYBlKI\":{\"name\":\"Malaria focus investigation\"}},\"dimensions\":{\"uvMKOn1oWvd.fADIatyOu2g\":[],\"pe\":[\"2019\",\"2020\",\"2021\",\"2016\",\"2017\",\"2018\"],\"ou\":[\"ImspTQPwCqd\"],\"zgnTlAH4ZOk\":[]}}"; + "{\"items\":{\"ou\":{\"name\":\"Organisation unit\"},\"2021\":{\"name\":\"2021\"},\"2020\":{\"name\":\"2020\"},\"uvMKOn1oWvd.zgnTlAH4ZOk\":{\"name\":\"Follow-up vector control action details\"},\"LAST_5_YEARS\":{\"name\":\"Last 5 years\"},\"uvMKOn1oWvd.fADIatyOu2g\":{\"name\":\"LLIN coverage (%)\"},\"2019\":{\"name\":\"2019\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"2018\":{\"name\":\"2018\"},\"2017\":{\"name\":\"2017\"},\"2016\":{\"name\":\"2016\"},\"pe\":{\"name\":\"Period\"},\"uvMKOn1oWvd\":{\"name\":\"Foci response\"},\"M3xtLkYBlKI\":{\"name\":\"Malaria focus investigation\"}},\"dimensions\":{\"uvMKOn1oWvd.fADIatyOu2g\":[],\"pe\":[\"2019\",\"2020\",\"2021\",\"2016\",\"2017\",\"2018\"],\"ou\":[\"ImspTQPwCqd\"],\"uvMKOn1oWvd.zgnTlAH4ZOk\":[]}}\n"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate8AutoTest.java b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate8AutoTest.java index 8dc6ed6611c5..02f0d038711f 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate8AutoTest.java +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/event/aggregate/EventsAggregate8AutoTest.java @@ -78,7 +78,7 @@ public void queryEnrollmentoutput4() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"items\":{\"ou\":{\"name\":\"Organisation unit\"},\"2022\":{\"name\":\"2022\"},\"2021\":{\"name\":\"2021\"},\"uvMKOn1oWvd.QRg7SZ6VOAV\":{\"name\":\"Local Focus ID\"},\"2020\":{\"name\":\"2020\"},\"uvMKOn1oWvd.zgnTlAH4ZOk\":{\"name\":\"Follow-up vector control action details\"},\"LAST_5_YEARS\":{\"name\":\"Last 5 years\"},\"uvMKOn1oWvd.Y14cBKFUsg4\":{\"name\":\"Follow-up vector control action details 2\"},\"2019\":{\"name\":\"2019\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"2018\":{\"name\":\"2018\"},\"pe\":{\"name\":\"Period\"},\"uvMKOn1oWvd.ffbaoqebOT3\":{\"name\":\"Name of health facility catchment area\"},\"uvMKOn1oWvd\":{\"name\":\"Foci response\"},\"M3xtLkYBlKI\":{\"name\":\"Malaria focus investigation\"}},\"dimensions\":{\"Y14cBKFUsg4\":[],\"pe\":[\"2019\",\"2020\",\"2021\",\"2018\",\"2022\"],\"ou\":[\"ImspTQPwCqd\"],\"QRg7SZ6VOAV\":[\"like a\"],\"ffbaoqebOT3\":[],\"zgnTlAH4ZOk\":[]}}"; + "{\"items\":{\"ou\":{\"name\":\"Organisation unit\"},\"2022\":{\"name\":\"2022\"},\"2021\":{\"name\":\"2021\"},\"uvMKOn1oWvd.QRg7SZ6VOAV\":{\"name\":\"Local Focus ID\"},\"2020\":{\"name\":\"2020\"},\"uvMKOn1oWvd.zgnTlAH4ZOk\":{\"name\":\"Follow-up vector control action details\"},\"LAST_5_YEARS\":{\"name\":\"Last 5 years\"},\"uvMKOn1oWvd.Y14cBKFUsg4\":{\"name\":\"Follow-up vector control action details 2\"},\"2019\":{\"name\":\"2019\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"2018\":{\"name\":\"2018\"},\"pe\":{\"name\":\"Period\"},\"uvMKOn1oWvd.ffbaoqebOT3\":{\"name\":\"Name of health facility catchment area\"},\"uvMKOn1oWvd\":{\"name\":\"Foci response\"},\"M3xtLkYBlKI\":{\"name\":\"Malaria focus investigation\"}},\"dimensions\":{\"uvMKOn1oWvd.Y14cBKFUsg4\":[],\"pe\":[\"2019\",\"2020\",\"2021\",\"2018\",\"2022\"],\"ou\":[\"ImspTQPwCqd\"],\"uvMKOn1oWvd.ffbaoqebOT3\":[],\"uvMKOn1oWvd.QRg7SZ6VOAV\":[\"like a\"],\"uvMKOn1oWvd.zgnTlAH4ZOk\":[]}}\n"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); @@ -120,7 +120,7 @@ public void queryEnrollmentoutput5() throws JSONException { // Assert metaData. String expectedMetaData = - "{\"items\":{\"WZbXY0S00lP.sdchiIXIcCf\":{\"name\":\"WHOMCH Renal disease\"},\"ou\":{\"name\":\"Organisation unit\"},\"WZbXY0S00lP.roKuXYfw1BW\":{\"name\":\"WHOMCH Gestational age at visit\"},\"2022\":{\"name\":\"2022\"},\"2021\":{\"name\":\"2021\"},\"2020\":{\"name\":\"2020\"},\"WZbXY0S00lP.KmEUg2hHEtx\":{\"name\":\"Email address\"},\"LAST_5_YEARS\":{\"name\":\"Last 5 years\"},\"WZbXY0S00lP.zzGNbeMnTd6\":{\"name\":\"WHOMCH Autoimmune disease\"},\"2019\":{\"name\":\"2019\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"2018\":{\"name\":\"2018\"},\"pe\":{\"name\":\"Period\"},\"WZbXY0S00lP.xPTngRLQTnu\":{\"name\":\"WHOMCH Other chronic condition\"},\"WZbXY0S00lP\":{\"name\":\"First antenatal care visit\"},\"WSGAb5XwJ3Y\":{\"name\":\"WHO RMNCH Tracker\"},\"WZbXY0S00lP.ZcBPrXKahq2\":{\"name\":\"Postal code\"}},\"dimensions\":{\"WZbXY0S00lP.zzGNbeMnTd6\":[],\"WZbXY0S00lP.sdchiIXIcCf\":[],\"pe\":[\"2019\",\"2020\",\"2021\",\"2018\",\"2022\"],\"ou\":[\"ImspTQPwCqd\"],\"KmEUg2hHEtx\":[],\"WZbXY0S00lP.xPTngRLQTnu\":[],\"WZbXY0S00lP.roKuXYfw1BW\":[],\"ZcBPrXKahq2\":[\"like 1\"]}}"; + "{\"items\":{\"WZbXY0S00lP.sdchiIXIcCf\":{\"name\":\"WHOMCH Renal disease\"},\"ou\":{\"name\":\"Organisation unit\"},\"WZbXY0S00lP.roKuXYfw1BW\":{\"name\":\"WHOMCH Gestational age at visit\"},\"2022\":{\"name\":\"2022\"},\"2021\":{\"name\":\"2021\"},\"2020\":{\"name\":\"2020\"},\"WZbXY0S00lP.KmEUg2hHEtx\":{\"name\":\"Email address\"},\"LAST_5_YEARS\":{\"name\":\"Last 5 years\"},\"WZbXY0S00lP.zzGNbeMnTd6\":{\"name\":\"WHOMCH Autoimmune disease\"},\"2019\":{\"name\":\"2019\"},\"ImspTQPwCqd\":{\"name\":\"Sierra Leone\"},\"2018\":{\"name\":\"2018\"},\"pe\":{\"name\":\"Period\"},\"WZbXY0S00lP.xPTngRLQTnu\":{\"name\":\"WHOMCH Other chronic condition\"},\"WZbXY0S00lP\":{\"name\":\"First antenatal care visit\"},\"WSGAb5XwJ3Y\":{\"name\":\"WHO RMNCH Tracker\"},\"WZbXY0S00lP.ZcBPrXKahq2\":{\"name\":\"Postal code\"}},\"dimensions\":{\"WZbXY0S00lP.zzGNbeMnTd6\":[],\"WZbXY0S00lP.sdchiIXIcCf\":[],\"pe\":[\"2019\",\"2020\",\"2021\",\"2018\",\"2022\"],\"ou\":[\"ImspTQPwCqd\"],\"WZbXY0S00lP.xPTngRLQTnu\":[],\"WZbXY0S00lP.roKuXYfw1BW\":[],\"WZbXY0S00lP.KmEUg2hHEtx\":[],\"WZbXY0S00lP.ZcBPrXKahq2\":[\"like 1\"]}}\n"; String actualMetaData = new JSONObject((Map) response.extract("metaData")).toString(); assertEquals(expectedMetaData, actualMetaData, false); diff --git a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/generator/scenarios/event-aggregated.json b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/generator/scenarios/event-aggregated.json index f5dbaa38574d..973745b7cfdf 100644 --- a/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/generator/scenarios/event-aggregated.json +++ b/dhis-2/dhis-test-e2e/src/test/java/org/hisp/dhis/analytics/generator/scenarios/event-aggregated.json @@ -56,6 +56,13 @@ "min": 43 } }, + { + "name": "stageAndEventDateSpecificYearAsFilter", + "query": "/api/analytics/events/aggregate/IpHINAT79UW.json?displayProperty=NAME&sortOrder=desc&totalPages=false&outputType=EVENT&filter=A03MvHHogjR.EVENT_DATE:2021&relativePeriodDate=2023-07-01", + "version": { + "min": 44 + } + }, { "name": "stageAndEventDateRange", "query": "/api/analytics/events/aggregate/IpHINAT79UW.json?displayProperty=NAME&sortOrder=desc&totalPages=false&outputType=EVENT&dimension=A03MvHHogjR.EVENT_DATE:2021-03-01_2021-05-31&relativePeriodDate=2023-07-01",