diff --git a/dhis-2/dhis-api/src/test/java/org/hisp/dhis/datavalue/DataExportParamsTest.java b/dhis-2/dhis-api/src/test/java/org/hisp/dhis/datavalue/DataExportParamsTest.java index a317e5b83094..37a5d5ec651a 100644 --- a/dhis-2/dhis-api/src/test/java/org/hisp/dhis/datavalue/DataExportParamsTest.java +++ b/dhis-2/dhis-api/src/test/java/org/hisp/dhis/datavalue/DataExportParamsTest.java @@ -34,6 +34,11 @@ import java.time.Duration; import java.util.Date; +import java.util.List; +import java.util.Set; +import org.hisp.dhis.common.UID; +import org.hisp.dhis.period.MonthlyPeriodType; +import org.hisp.dhis.period.Period; import org.junit.jupiter.api.Test; class DataExportParamsTest { @@ -58,6 +63,44 @@ void testHasPeriodFilters_LastUpdatedAloneIsNotAPeriodFilter() { assertFalse(params.hasPeriodFilters()); } + @Test + void testHasPeriodFilters_PeriodsTrue() { + DataExportParams params = + DataExportParams.builder().periods(List.of(Period.of("202201"))).build(); + + assertTrue(params.hasPeriodFilters()); + } + + @Test + void testHasPeriodFilters_PeriodTypesTrue() { + DataExportParams params = + DataExportParams.builder().periodTypes(Set.of(new MonthlyPeriodType())).build(); + + assertTrue(params.hasPeriodFilters()); + } + + @Test + void testHasPeriodFilters_StartAndEndDateTrue() { + DataExportParams params = + DataExportParams.builder().startDate(new Date(0)).endDate(new Date(1)).build(); + + assertTrue(params.hasPeriodFilters()); + } + + @Test + void testHasPeriodFilters_StartDateAloneFalse() { + DataExportParams params = DataExportParams.builder().startDate(new Date(0)).build(); + + assertFalse(params.hasPeriodFilters()); + } + + @Test + void testHasPeriodFilters_IncludedDateTrue() { + DataExportParams params = DataExportParams.builder().includedDate(new Date()).build(); + + assertTrue(params.hasPeriodFilters()); + } + @Test void testHasLastUpdatedFilters_NoFiltersFalse() { DataExportParams params = DataExportParams.builder().build(); @@ -79,4 +122,202 @@ void testHasLastUpdatedFilters_LastUpdatedTrue() { assertTrue(params.hasLastUpdatedFilters()); } + + @Test + void testHasDataElementFilters_NoFiltersFalse() { + DataExportParams params = DataExportParams.builder().build(); + + assertFalse(params.hasDataElementFilters()); + } + + @Test + void testHasDataElementFilters_DataSetsTrue() { + DataExportParams params = DataExportParams.builder().dataSets(List.of(UID.generate())).build(); + + assertTrue(params.hasDataElementFilters()); + } + + @Test + void testHasDataElementFilters_DataElementsTrue() { + DataExportParams params = + DataExportParams.builder().dataElements(List.of(UID.generate())).build(); + + assertTrue(params.hasDataElementFilters()); + } + + @Test + void testHasDataElementFilters_DataElementGroupsTrue() { + DataExportParams params = + DataExportParams.builder().dataElementGroups(List.of(UID.generate())).build(); + + assertTrue(params.hasDataElementFilters()); + } + + @Test + void testHasOrgUnitFilters_NoFiltersFalse() { + DataExportParams params = DataExportParams.builder().build(); + + assertFalse(params.hasOrgUnitFilters()); + } + + @Test + void testHasOrgUnitFilters_OrganisationUnitsTrue() { + DataExportParams params = + DataExportParams.builder().organisationUnits(List.of(UID.generate())).build(); + + assertTrue(params.hasOrgUnitFilters()); + } + + @Test + void testHasOrgUnitFilters_OrganisationUnitGroupsTrue() { + DataExportParams params = + DataExportParams.builder().organisationUnitGroups(List.of(UID.generate())).build(); + + assertTrue(params.hasOrgUnitFilters()); + } + + @Test + void testIsExactOrgUnitsFilter_OrgUnitsOnlyTrue() { + DataExportParams params = + DataExportParams.builder().organisationUnits(List.of(UID.generate())).build(); + + assertTrue(params.isExactOrgUnitsFilter()); + } + + @Test + void testIsExactOrgUnitsFilter_NoOrgUnitsFalse() { + DataExportParams params = DataExportParams.builder().build(); + + assertFalse(params.isExactOrgUnitsFilter()); + } + + @Test + void testIsExactOrgUnitsFilter_IncludeDescendantsFalse() { + DataExportParams params = + DataExportParams.builder() + .organisationUnits(List.of(UID.generate())) + .includeDescendants(true) + .build(); + + assertFalse(params.isExactOrgUnitsFilter()); + } + + @Test + void testIsExactOrgUnitsFilter_OrgUnitGroupsAlsoSetFalse() { + DataExportParams params = + DataExportParams.builder() + .organisationUnits(List.of(UID.generate())) + .organisationUnitGroups(List.of(UID.generate())) + .build(); + + assertFalse(params.isExactOrgUnitsFilter()); + } + + @Test + void testIsPeriodOverSpecified_PeriodsAndStartEndDateTrue() { + DataExportParams params = + DataExportParams.builder() + .periods(List.of(Period.of("202201"))) + .startDate(new Date(0)) + .endDate(new Date(1)) + .build(); + + assertTrue(params.isPeriodOverSpecified()); + } + + @Test + void testIsPeriodOverSpecified_PeriodsOnlyFalse() { + DataExportParams params = + DataExportParams.builder().periods(List.of(Period.of("202201"))).build(); + + assertFalse(params.isPeriodOverSpecified()); + } + + @Test + void testIsPeriodOverSpecified_StartEndDateOnlyFalse() { + DataExportParams params = + DataExportParams.builder().startDate(new Date(0)).endDate(new Date(1)).build(); + + assertFalse(params.isPeriodOverSpecified()); + } + + @Test + void testIsDateRangeOutOfBounds_StartAfterEndTrue() { + DataExportParams params = + DataExportParams.builder().startDate(new Date(1)).endDate(new Date(0)).build(); + + assertTrue(params.isDateRangeOutOfBounds()); + } + + @Test + void testIsDateRangeOutOfBounds_StartBeforeEndFalse() { + DataExportParams params = + DataExportParams.builder().startDate(new Date(0)).endDate(new Date(1)).build(); + + assertFalse(params.isDateRangeOutOfBounds()); + } + + @Test + void testIsDateRangeOutOfBounds_StartDateOnlyFalse() { + DataExportParams params = DataExportParams.builder().startDate(new Date(1)).build(); + + assertFalse(params.isDateRangeOutOfBounds()); + } + + @Test + void testIsDateRangeOutOfBounds_StartEqualsEndFalse() { + // Date.after() is strict (>), so a single-instant/single-day range (start == end) is a valid, + // zero-width range, not an error. + DataExportParams params = + DataExportParams.builder().startDate(new Date(1)).endDate(new Date(1)).build(); + + assertFalse(params.isDateRangeOutOfBounds()); + } + + @Test + void testIsLimitOutOfBounds_NegativeTrue() { + DataExportParams params = DataExportParams.builder().limit(-1).build(); + + assertTrue(params.isLimitOutOfBounds()); + } + + @Test + void testIsLimitOutOfBounds_ZeroFalse() { + DataExportParams params = DataExportParams.builder().limit(0).build(); + + assertFalse(params.isLimitOutOfBounds()); + } + + @Test + void testIsLimitOutOfBounds_NullFalse() { + DataExportParams params = DataExportParams.builder().build(); + + assertFalse(params.isLimitOutOfBounds()); + } + + @Test + void testIsOrgUnitGroupsOverSpecified_GroupsAndDescendantsTrue() { + DataExportParams params = + DataExportParams.builder() + .organisationUnitGroups(List.of(UID.generate())) + .includeDescendants(true) + .build(); + + assertTrue(params.isOrgUnitGroupsOverSpecified()); + } + + @Test + void testIsOrgUnitGroupsOverSpecified_GroupsWithoutDescendantsFalse() { + DataExportParams params = + DataExportParams.builder().organisationUnitGroups(List.of(UID.generate())).build(); + + assertFalse(params.isOrgUnitGroupsOverSpecified()); + } + + @Test + void testIsOrgUnitGroupsOverSpecified_DescendantsWithoutGroupsFalse() { + DataExportParams params = DataExportParams.builder().includeDescendants(true).build(); + + assertFalse(params.isOrgUnitGroupsOverSpecified()); + } }