From 7bb96b1f394faa9373cad00fca3ef3c4d4dd5988 Mon Sep 17 00:00:00 2001 From: Jan Bernitt Date: Wed, 5 Mar 2025 15:23:35 +0100 Subject: [PATCH] test: tests for different variable syntax [DHIS2-15858] --- .../lib/expression/function/HasValueTest.kt | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/commonTest/kotlin/org/hisp/dhis/lib/expression/function/HasValueTest.kt b/src/commonTest/kotlin/org/hisp/dhis/lib/expression/function/HasValueTest.kt index 3df9608..02bbb36 100644 --- a/src/commonTest/kotlin/org/hisp/dhis/lib/expression/function/HasValueTest.kt +++ b/src/commonTest/kotlin/org/hisp/dhis/lib/expression/function/HasValueTest.kt @@ -1,5 +1,7 @@ package org.hisp.dhis.lib.expression.function +import org.hisp.dhis.lib.expression.Expression +import org.hisp.dhis.lib.expression.ExpressionMode import org.hisp.dhis.lib.expression.spi.ValueType import org.hisp.dhis.lib.expression.spi.VariableValue @@ -25,7 +27,6 @@ internal class HasValueTest : AbstractVariableBasedTest() { assertHasValue("d2:hasValue(#{variable-name})", mapOf(), false) } - @Test fun return_false_for_existing_variable_without_value() { assertHasValue( @@ -40,7 +41,58 @@ internal class HasValueTest : AbstractVariableBasedTest() { mapOf("with_value_var" to VariableValue(ValueType.STRING).copy(value = "value")), true) } + @Test + fun hasValue_single_quotes() { + assertHasValue("d2:hasValue('variable-name')", mapOf(), false) + assertHasValue("d2:hasValue('variable-name')", + mapOf("variable-name" to VariableValue(ValueType.STRING)), false) + assertHasValue("d2:hasValue('variable-name')", + mapOf("variable-name" to VariableValue(ValueType.BOOLEAN).copy(value = "false")), true) + assertHasValue("d2:hasValue('variable-name')", + mapOf("variable-name" to VariableValue(ValueType.BOOLEAN).copy(value = "true")), true) + } + + @Test + fun hasValue_double_quotes() { + assertHasValue("d2:hasValue(\"variable-name\")", mapOf(), false) + assertHasValue("d2:hasValue(\"variable-name\")", + mapOf("variable-name" to VariableValue(ValueType.STRING)), false) + assertHasValue("d2:hasValue(\"variable-name\")", + mapOf("variable-name" to VariableValue(ValueType.BOOLEAN).copy(value = "false")), true) + assertHasValue("d2:hasValue(\"variable-name\")", + mapOf("variable-name" to VariableValue(ValueType.BOOLEAN).copy(value = "true")), true) + } + + @Test + fun collectVariableNames() { + assertProgramRuleVariableNames(setOf("var"), "d2:hasValue('var')") + assertProgramVariableNames(setOf(), "d2:hasValue('var')") + + assertProgramRuleVariableNames(setOf("var"), "d2:hasValue(\"var\")") + assertProgramVariableNames(setOf(), "d2:hasValue(\"var\")") + + assertProgramRuleVariableNames(setOf("var"), "d2:hasValue(A{var})") + assertProgramVariableNames(setOf(), "d2:hasValue(A{var})") + + assertProgramRuleVariableNames(setOf("var"), "d2:hasValue(#{var})") + assertProgramVariableNames(setOf(), "d2:hasValue(#{var})") + + assertProgramRuleVariableNames(setOf(), "d2:hasValue(V{var})") + assertProgramVariableNames(setOf("var"), "d2:hasValue(V{var})") + } + private fun assertHasValue(expression: String, values: Map, expected: Boolean) { assertEquals(expected, evaluate(expression, values)) } + + private fun assertProgramRuleVariableNames(expected: Set, expression: String) { + val expr = Expression(expression, ExpressionMode.RULE_ENGINE_ACTION) + assertEquals(expected, expr.collectProgramRuleVariableNames()); + } + + private fun assertProgramVariableNames(expected: Set, expression: String) { + val expr = Expression(expression, ExpressionMode.PROGRAM_INDICATOR_EXPRESSION) + assertEquals(expected, expr.collectProgramVariablesNames()); + } + }