Skip to content

Commit

Permalink
test: tests for different variable syntax [DHIS2-15858]
Browse files Browse the repository at this point in the history
  • Loading branch information
jbee committed Mar 5, 2025
1 parent 0da2b3f commit 7bb96b1
Showing 1 changed file with 53 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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(
Expand All @@ -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<String, VariableValue>, expected: Boolean) {
assertEquals(expected, evaluate(expression, values))
}

private fun assertProgramRuleVariableNames(expected: Set<String>, expression: String) {
val expr = Expression(expression, ExpressionMode.RULE_ENGINE_ACTION)
assertEquals(expected, expr.collectProgramRuleVariableNames());
}

private fun assertProgramVariableNames(expected: Set<String>, expression: String) {
val expr = Expression(expression, ExpressionMode.PROGRAM_INDICATOR_EXPRESSION)
assertEquals(expected, expr.collectProgramVariablesNames());
}

}

0 comments on commit 7bb96b1

Please sign in to comment.