diff --git a/form/src/main/java/org/dhis2/form/data/metadata/FormBaseConfiguration.kt b/form/src/main/java/org/dhis2/form/data/metadata/FormBaseConfiguration.kt index cacc2cc5ea..6155035ccc 100644 --- a/form/src/main/java/org/dhis2/form/data/metadata/FormBaseConfiguration.kt +++ b/form/src/main/java/org/dhis2/form/data/metadata/FormBaseConfiguration.kt @@ -45,16 +45,16 @@ open class FormBaseConfiguration(private val d2: D2) { val optionInGroupToHide = d2.optionModule().optionGroups() .withOptions() .byUid().`in`(optionGroupsToHide) - .blockingGet().find { optionGroup -> + .blockingGet().any { optionGroup -> optionGroup.options()?.map { it.uid() }?.contains(option.uid()) == true - } != null + } val optionInGroupToShow = d2.optionModule().optionGroups() .withOptions() .byUid().`in`(optionGroupsToShow) - .blockingGet().find { optionGroup -> + .blockingGet().any { optionGroup -> optionGroup.options()?.map { it.uid() }?.contains(option.uid()) == true - } != null + } val hideOption = if (optionGroupsToShow.isEmpty()) { optionsToHide.contains(option.uid()) || optionInGroupToHide diff --git a/form/src/test/java/org/dhis2/form/data/FormRepositoryImplTest.kt b/form/src/test/java/org/dhis2/form/data/FormRepositoryImplTest.kt index abc6debd58..09fec26410 100644 --- a/form/src/test/java/org/dhis2/form/data/FormRepositoryImplTest.kt +++ b/form/src/test/java/org/dhis2/form/data/FormRepositoryImplTest.kt @@ -2,11 +2,14 @@ package org.dhis2.form.data import androidx.databinding.ObservableField import io.reactivex.Flowable +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.emptyFlow import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.form.model.ActionType import org.dhis2.form.model.EventCategory import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.FieldUiModelImpl +import org.dhis2.form.model.OptionSetConfiguration import org.dhis2.form.model.RowAction import org.dhis2.form.model.SectionUiModelImpl import org.dhis2.form.model.StoreResult @@ -30,6 +33,7 @@ import org.junit.Before import org.junit.Test import org.mockito.kotlin.any import org.mockito.kotlin.anyOrNull +import org.mockito.kotlin.atLeast import org.mockito.kotlin.doReturn import org.mockito.kotlin.doReturnConsecutively import org.mockito.kotlin.mock @@ -200,6 +204,14 @@ class FormRepositoryImplTest { mutableMapOf(Pair("field", "uid001")), ), ), + RuleEffect( + "rule2", + RuleAction( + "option1", + ProgramRuleActionType.HIDEOPTION.name, + mutableMapOf(Pair("field", "uid004")), + ), + ), ) whenever(dataEntryRepository.isEvent()) doReturn true @@ -215,12 +227,21 @@ class FormRepositoryImplTest { fieldsToUpdate = listOf(FieldWithNewValue("uid001", "newValue")), configurationErrors = emptyList(), stagesToHide = emptyList(), - optionsToHide = emptyMap(), + optionsToHide = mapOf( + "uid004" to listOf("option1"), + ), optionGroupsToHide = emptyMap(), optionGroupsToShow = emptyMap(), ) - verify(rulesUtilsProvider, times(1)).applyRuleEffects( + whenever(dataEntryRepository.options(any(), any(), any(), any()))doReturn Pair( + MutableStateFlow(""), + emptyFlow(), + ) + + repository.composeList() + + verify(rulesUtilsProvider, atLeast(1)).applyRuleEffects( any(), any(), any(), @@ -441,6 +462,21 @@ class FormRepositoryImplTest { optionSetConfiguration = null, autocompleteList = null, ), + FieldUiModelImpl( + uid = "uid004", + value = null, + label = "field4", + valueType = ValueType.TEXT, + programStageSection = "section1", + uiEventFactory = null, + optionSet = "optionSetUid", + optionSetConfiguration = OptionSetConfiguration( + MutableStateFlow(""), + {}, + emptyFlow(), + ), + autocompleteList = null, + ), ) private fun section1() = SectionUiModelImpl(