From 8ca77e7602113868148d06f83a3c5bbbab855611 Mon Sep 17 00:00:00 2001 From: Babatunde Adeyemi Date: Thu, 14 May 2026 12:51:15 +0100 Subject: [PATCH] feat: expose dataApprovalLevels on DataApprovalWorkflow model and API fields --- .../java/org/hisp/dhis/api/ApiFields.java | 4 +- .../hisp/dhis/model/DataApprovalWorkflow.java | 2 + .../dhis/DataApprovalWorkflowApiTest.java | 72 +++++++++++++++++++ .../dhis/model/DataApprovalWorkflowTest.java | 5 ++ .../metadata/data-approval-workflow.json | 10 +++ 5 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 src/test/java/org/hisp/dhis/DataApprovalWorkflowApiTest.java diff --git a/src/main/java/org/hisp/dhis/api/ApiFields.java b/src/main/java/org/hisp/dhis/api/ApiFields.java index 72d2f9d8..c6a85d2a 100644 --- a/src/main/java/org/hisp/dhis/api/ApiFields.java +++ b/src/main/java/org/hisp/dhis/api/ApiFields.java @@ -246,8 +246,8 @@ public class ApiFields { /** Data approval workflow fields. */ public static final String DATA_APPROVAL_WORKFLOW_FIELDS = String.format( - "%s,periodType,categoryCombo[%s],dataSets[%s]", - NAME_EXT_FIELDS, NAME_FIELDS, NAME_FIELDS); + "%s,periodType,categoryCombo[%s],dataApprovalLevels[%s],dataSets[%s]", + NAME_EXT_FIELDS, NAME_FIELDS, ID_FIELDS, NAME_FIELDS); /** Data entry form fields. */ public static final String DATA_ENTRY_FORM_FIELDS = diff --git a/src/main/java/org/hisp/dhis/model/DataApprovalWorkflow.java b/src/main/java/org/hisp/dhis/model/DataApprovalWorkflow.java index 79cecb2d..ffe3c996 100644 --- a/src/main/java/org/hisp/dhis/model/DataApprovalWorkflow.java +++ b/src/main/java/org/hisp/dhis/model/DataApprovalWorkflow.java @@ -42,5 +42,7 @@ public class DataApprovalWorkflow extends NameableObject { @JsonProperty private CategoryCombo categoryCombo; + @JsonProperty private List dataApprovalLevels = new ArrayList<>(); + @JsonProperty private List dataSets = new ArrayList<>(); } diff --git a/src/test/java/org/hisp/dhis/DataApprovalWorkflowApiTest.java b/src/test/java/org/hisp/dhis/DataApprovalWorkflowApiTest.java new file mode 100644 index 00000000..dff712ee --- /dev/null +++ b/src/test/java/org/hisp/dhis/DataApprovalWorkflowApiTest.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2004-2025, 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; + +import static org.hisp.dhis.support.Assertions.assertNotEmpty; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.List; +import org.hisp.dhis.model.DataApprovalWorkflow; +import org.hisp.dhis.query.Query; +import org.hisp.dhis.support.TestTags; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +@Tag(TestTags.INTEGRATION) +class DataApprovalWorkflowApiTest { + @Test + void testGetDataApprovalWorkflows() { + Dhis2 dhis2 = new Dhis2(TestFixture.DEFAULT_CONFIG); + + List workflows = dhis2.getDataApprovalWorkflows(Query.instance()); + + assertNotNull(workflows); + assertNotEmpty(workflows); + } + + @Test + void testGetDataApprovalWorkflowsWithApprovalLevels() { + Dhis2 dhis2 = new Dhis2(TestFixture.DEFAULT_CONFIG); + + List workflows = + dhis2.getDataApprovalWorkflows( + Query.instance().addFilter(org.hisp.dhis.query.Filter.eq("id", "rIUL3hYOjJc"))); + + assertNotNull(workflows); + assertEquals(1, workflows.size()); + + DataApprovalWorkflow workflow = workflows.get(0); + + assertEquals("rIUL3hYOjJc", workflow.getId()); + assertNotNull(workflow.getName()); + assertNotNull(workflow.getPeriodType()); + assertNotEmpty(workflow.getDataApprovalLevels()); + assertNotNull(workflow.getDataApprovalLevels().get(0).getId()); + } +} diff --git a/src/test/java/org/hisp/dhis/model/DataApprovalWorkflowTest.java b/src/test/java/org/hisp/dhis/model/DataApprovalWorkflowTest.java index dbdbcdd3..c15c5c44 100644 --- a/src/test/java/org/hisp/dhis/model/DataApprovalWorkflowTest.java +++ b/src/test/java/org/hisp/dhis/model/DataApprovalWorkflowTest.java @@ -51,6 +51,11 @@ void testDeserialize() { assertNotNull(workflow.getCategoryCombo()); assertEquals("bjDvmb4bfuf", workflow.getCategoryCombo().getId()); assertEquals("default", workflow.getCategoryCombo().getName()); + assertSize(2, workflow.getDataApprovalLevels()); + assertEquals("b2uHwX9YLhu", workflow.getDataApprovalLevels().get(0).getId()); + assertEquals("National", workflow.getDataApprovalLevels().get(0).getName()); + assertEquals("K7PvhCEjUmY", workflow.getDataApprovalLevels().get(1).getId()); + assertEquals("District", workflow.getDataApprovalLevels().get(1).getName()); assertSize(3, workflow.getDataSets()); assertEquals("pBOMPrpg1QX", workflow.getDataSets().get(0).getId()); assertEquals("VTdjfLXXmoi", workflow.getDataSets().get(1).getId()); diff --git a/src/test/resources/metadata/data-approval-workflow.json b/src/test/resources/metadata/data-approval-workflow.json index 8f7040f7..78deca95 100644 --- a/src/test/resources/metadata/data-approval-workflow.json +++ b/src/test/resources/metadata/data-approval-workflow.json @@ -7,6 +7,16 @@ "id": "bjDvmb4bfuf", "name": "default" }, + "dataApprovalLevels": [ + { + "id": "b2uHwX9YLhu", + "name": "National" + }, + { + "id": "K7PvhCEjUmY", + "name": "District" + } + ], "dataSets": [ { "id": "pBOMPrpg1QX",