diff --git a/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/DefaultMetadataExportService.java b/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/DefaultMetadataExportService.java index 4ea6d60ef3f0..44fc9a98a01f 100644 --- a/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/DefaultMetadataExportService.java +++ b/dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/DefaultMetadataExportService.java @@ -79,6 +79,7 @@ import org.hisp.dhis.option.OptionSet; import org.hisp.dhis.program.Program; import org.hisp.dhis.program.ProgramIndicator; +import org.hisp.dhis.program.ProgramSection; import org.hisp.dhis.program.ProgramStage; import org.hisp.dhis.program.ProgramStageDataElement; import org.hisp.dhis.program.ProgramStageSection; @@ -676,6 +677,9 @@ private SetMap, IdentifiableObject> handlePr handleCategoryCombo(metadata, program.getCategoryCombo()); handleDataEntryForm(metadata, program.getDataEntryForm()); handleTrackedEntityType(metadata, program.getTrackedEntityType()); + program + .getProgramSections() + .forEach(programSection -> handleProgramSection(metadata, programSection)); program .getNotificationTemplates() @@ -1005,4 +1009,16 @@ private SetMap, IdentifiableObject> handleAt return metadata; } + + private SetMap, IdentifiableObject> handleProgramSection( + SetMap, IdentifiableObject> metadata, + ProgramSection programSection) { + if (programSection == null) return metadata; + metadata.putValue(ProgramSection.class, programSection); + programSection + .getTrackedEntityAttributes() + .forEach(tea -> handleTrackedEntityAttribute(metadata, tea)); + + return metadata; + } } diff --git a/dhis-2/dhis-test-integration/src/test/java/org/hisp/dhis/metadata/export/MetadataExportWithDependenciesTest.java b/dhis-2/dhis-test-integration/src/test/java/org/hisp/dhis/metadata/export/MetadataExportWithDependenciesTest.java new file mode 100644 index 000000000000..7bf91a6fda19 --- /dev/null +++ b/dhis-2/dhis-test-integration/src/test/java/org/hisp/dhis/metadata/export/MetadataExportWithDependenciesTest.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2004-2023, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.hisp.dhis.metadata.export; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Map; +import java.util.Set; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import org.hisp.dhis.common.IdentifiableObject; +import org.hisp.dhis.dxf2.metadata.MetadataExportService; +import org.hisp.dhis.program.Program; +import org.hisp.dhis.program.ProgramSection; +import org.hisp.dhis.test.integration.SingleSetupIntegrationTestBase; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class MetadataExportWithDependenciesTest extends SingleSetupIntegrationTestBase { + + @PersistenceContext private EntityManager entityManager; + @Autowired private MetadataExportService metadataExportService; + + @Test + void testExportProgramWithProgramSection() { + Program program = createProgram('A'); + entityManager.persist(program); + ProgramSection programSection = createProgramSection('A', program); + program.getProgramSections().add(programSection); + entityManager.persist(programSection); + Map, Set> export = + metadataExportService.getMetadataWithDependencies(program); + + assertEquals(1, export.get(Program.class).size()); + assertEquals(1, export.get(ProgramSection.class).size()); + } +}