diff --git a/src/main/java/org/hisp/dhis/rules/RuleEngine.kt b/src/main/java/org/hisp/dhis/rules/RuleEngine.kt index fb952898..45a0d562 100644 --- a/src/main/java/org/hisp/dhis/rules/RuleEngine.kt +++ b/src/main/java/org/hisp/dhis/rules/RuleEngine.kt @@ -9,10 +9,10 @@ import java.util.* import java.util.concurrent.Callable data class RuleEngine( - val executionContext: RuleEngineContext, - val events: List, - val enrollment: RuleEnrollment?, - val triggerEnvironment: TriggerEnvironment?) { + val executionContext: RuleEngineContext, + val events: List = emptyList(), + val enrollment: RuleEnrollment? = null, + val triggerEnvironment: TriggerEnvironment? = TriggerEnvironment.SERVER) { @Deprecated("use kotlin property") fun executionContext(): RuleEngineContext { diff --git a/src/main/java/org/hisp/dhis/rules/RuleEngineContext.java b/src/main/java/org/hisp/dhis/rules/RuleEngineContext.java deleted file mode 100644 index 21a75252..00000000 --- a/src/main/java/org/hisp/dhis/rules/RuleEngineContext.java +++ /dev/null @@ -1,161 +0,0 @@ -package org.hisp.dhis.rules; - -import org.hisp.dhis.rules.models.Rule; -import org.hisp.dhis.rules.models.RuleVariable; - -import javax.annotation.CheckForNull; -import javax.annotation.Nonnull; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public record RuleEngineContext( - @Nonnull List rules, - @Nonnull List ruleVariables, - @Nonnull Map> supplementaryData, - @Nonnull Map constantsValues, - @Nonnull RuleEngineIntent ruleEngineIntent, - @CheckForNull Map dataItemStore -) { - - RuleEngineContext(@Nonnull List rules, @Nonnull List ruleVariables, - @Nonnull Map> supplementaryData, @Nonnull Map constantsValues) { - this(rules, ruleVariables, supplementaryData, constantsValues, RuleEngineIntent.EVALUATION, new HashMap<>()); - } - - @Nonnull - public static Builder builder() - { - return new Builder(); - } - - @Nonnull - @Deprecated - public static Builder builder( @Nonnull RuleExpressionEvaluator evaluator ) - { - return new Builder( evaluator ); - } - - @Nonnull - public RuleEngine.Builder toEngineBuilder() - { - return new RuleEngine.Builder( this ); - } - - public static class Builder - { - private RuleEngineIntent intent; - - @CheckForNull - private List rules; - - @CheckForNull - private List ruleVariables; - - @CheckForNull - private Map> supplementaryData; - - @CheckForNull - private Map constantsValues; - - @CheckForNull - private Map itemStore; - - Builder( @Nonnull RuleExpressionEvaluator evaluator ) - { - } - - Builder() - { - } - - @Nonnull - public Builder rules( List rules ) - { - if ( rules == null ) - { - throw new IllegalArgumentException( "rules == null" ); - } - - this.rules = List.copyOf(rules); - return this; - } - - @Nonnull - public Builder ruleVariables( List ruleVariables ) - { - if ( ruleVariables == null ) - { - throw new IllegalArgumentException( "ruleVariables == null" ); - } - - this.ruleVariables = List.copyOf(ruleVariables); - return this; - } - - @Nonnull - public Builder ruleEngineItent( @CheckForNull RuleEngineIntent ruleEngineIntent ) - { - this.intent = ruleEngineIntent; - return this; - } - - @Nonnull - public Builder itemStore( @CheckForNull Map itemStore ) - { - this.itemStore = itemStore; - return this; - } - - - @Nonnull - public Builder supplementaryData( Map> supplementaryData ) - { - if ( supplementaryData == null ) - { - throw new IllegalArgumentException( "supplementaryData == null" ); - } - this.supplementaryData = supplementaryData; - return this; - } - - @Deprecated - public Builder calculatedValueMap( Map> calculatedValueMap ) - { - return this; - } - - @Nonnull - public Builder constantsValue( Map constantsValues ) - { - if ( constantsValues == null ) - { - throw new IllegalArgumentException( "constantsValue == null" ); - } - this.constantsValues = constantsValues; - return this; - } - - @Nonnull - public RuleEngineContext build() - { - if ( rules == null ) - rules = List.of(); - if ( ruleVariables == null ) - ruleVariables = List.of(); - if (supplementaryData == null) supplementaryData = Map.of(); - if (constantsValues == null) constantsValues = Map.of(); - if ( intent == null ) - { - // For evaluation - return new RuleEngineContext( rules, ruleVariables, supplementaryData, constantsValues ); - } - else - { - // for description - return new RuleEngineContext( rules, ruleVariables, supplementaryData, constantsValues, - intent, itemStore ); - } - } - } -} diff --git a/src/main/java/org/hisp/dhis/rules/RuleEngineContext.kt b/src/main/java/org/hisp/dhis/rules/RuleEngineContext.kt new file mode 100644 index 00000000..84226c90 --- /dev/null +++ b/src/main/java/org/hisp/dhis/rules/RuleEngineContext.kt @@ -0,0 +1,13 @@ +package org.hisp.dhis.rules + +import org.hisp.dhis.rules.models.Rule +import org.hisp.dhis.rules.models.RuleVariable + +data class RuleEngineContext( + val rules: List, + val ruleVariables: List, + val supplementaryData: Map> = emptyMap(), + val constantsValues: Map = emptyMap(), + val ruleEngineIntent: RuleEngineIntent = RuleEngineIntent.EVALUATION, + val dataItemStore: Map = emptyMap() +) diff --git a/src/test/java/org/hisp/dhis/rules/ConstantsValueTest.kt b/src/test/java/org/hisp/dhis/rules/ConstantsValueTest.kt index 3ecbddf7..462b0ea8 100644 --- a/src/test/java/org/hisp/dhis/rules/ConstantsValueTest.kt +++ b/src/test/java/org/hisp/dhis/rules/ConstantsValueTest.kt @@ -40,7 +40,7 @@ class ConstantsValueTest { val rule: Rule = Rule("true", java.util.List.of(assignAction), "test_program_rule1", "") val constantsValueMap: MutableMap = HashMap() constantsValueMap["A1234567890"] = "3.14" - val ruleEngineBuilder = getRuleEngine(java.util.List.of(rule), constantsValueMap) + val ruleEngine = getRuleEngine(listOf(rule), constantsValueMap) val enrollment = RuleEnrollment.builder() .enrollment("test_enrollment") .programName("test_program") @@ -51,7 +51,6 @@ class ConstantsValueTest { .organisationUnitCode("test_ou_code") .attributeValues(java.util.List.of(RuleAttributeValue.create("test_attribute", "test_value"))) .build() - val ruleEngine = ruleEngineBuilder.build() val ruleEffects = ruleEngine.evaluate(enrollment).call() assertEquals(1, ruleEffects.size) assertEquals("3.14", ruleEffects[0].data()) @@ -65,7 +64,7 @@ class ConstantsValueTest { RuleActionMessage.create(null, "#{test_attribute}", "", RuleActionMessage.Type.SHOW_ERROR) val rule: Rule = Rule("true", java.util.List.of(assignAction), "test_program_rule1", "") val rule2: Rule = Rule("#{test_attribute} > 3", java.util.List.of(action), "test_program_rule2", "") - val ruleEngineBuilder = getRuleEngine( + val ruleEngine = getRuleEngine( java.util.List.of(rule, rule2), HashMap() ) @@ -79,7 +78,6 @@ class ConstantsValueTest { .organisationUnitCode("test_ou_code") .attributeValues(java.util.List.of(RuleAttributeValue.create("test_attribute", "test_value"))) .build() - val ruleEngine = ruleEngineBuilder.build() val ruleEffects = ruleEngine.evaluate(enrollment).call() assertEquals(2, ruleEffects.size) assertEquals("4", ruleEffects[0].data()) @@ -95,8 +93,8 @@ class ConstantsValueTest { RuleActionMessage.create(null, "#{test_attribute}", "", RuleActionMessage.Type.SHOW_ERROR) val rule: Rule = Rule("true", java.util.List.of(assignAction), "test_program_rule1", "") val rule2: Rule = Rule("#{test_attribute} > 3", java.util.List.of(action), "test_program_rule2", "") - val ruleEngineBuilder = getRuleEngine( - java.util.List.of(rule, rule2), + val ruleEngine = getRuleEngine( + listOf(rule, rule2), HashMap() ) val enrollment = RuleEnrollment.builder() @@ -109,7 +107,6 @@ class ConstantsValueTest { .organisationUnitCode("test_ou_code") .attributeValues(java.util.List.of(RuleAttributeValue.create("test_attribute", "test_value"))) .build() - val ruleEngine = ruleEngineBuilder.build() val ruleEffects = ruleEngine.evaluate(enrollment).call() assertEquals(1, ruleEffects.size) assertEquals("4", ruleEffects[0].data()) @@ -122,7 +119,7 @@ class ConstantsValueTest { val rule: Rule = Rule("true", java.util.List.of(assignAction), "test_program_rule1", "") val constantsValueMap: MutableMap = HashMap() constantsValueMap["A1234567890"] = "3.14" - val ruleEngineBuilder = getRuleEngine(java.util.List.of(rule), constantsValueMap) + val ruleEngine = getRuleEngine(listOf(rule), constantsValueMap) val ruleEvent = RuleEvent(event ="test_event", programStage = "test_program_stage", programStageName = "", status = RuleEvent.Status.ACTIVE, eventDate = Date(), dueDate = Date(), organisationUnit = "", organisationUnitCode = "", completedDate = Date(), dataValues = listOf( @@ -131,7 +128,6 @@ class ConstantsValueTest { ) ) ) - val ruleEngine = ruleEngineBuilder.build() val ruleEffects = ruleEngine.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals("3.14", ruleEffects[0].data()) @@ -141,13 +137,7 @@ class ConstantsValueTest { private fun getRuleEngine( rules: List, constantsValueMap: Map - ): RuleEngine.Builder { - return RuleEngineContext - .builder() - .rules(rules) - .ruleVariables(ArrayList()) - .supplementaryData(HashMap()) - .constantsValue(constantsValueMap) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) + ): RuleEngine { + return RuleEngine(RuleEngineContext(rules, emptyList(), emptyMap(), constantsValueMap), emptyList(), null, TriggerEnvironment.SERVER) } } diff --git a/src/test/java/org/hisp/dhis/rules/ProgramRuleVariableTest.kt b/src/test/java/org/hisp/dhis/rules/ProgramRuleVariableTest.kt index 61716e74..0b789862 100644 --- a/src/test/java/org/hisp/dhis/rules/ProgramRuleVariableTest.kt +++ b/src/test/java/org/hisp/dhis/rules/ProgramRuleVariableTest.kt @@ -174,21 +174,19 @@ class ProgramRuleVariableTest { } private fun callEnrollmentRuleEngine(rule: Rule): List { - val ruleEngineBuilder = getRuleEngine(java.util.List.of(rule)) - val ruleEngine = ruleEngineBuilder.build() + val ruleEngine = getRuleEngine(java.util.List.of(rule)) return ruleEngine.evaluate(enrollment).call() } private fun callEventRuleEngine(rule: Rule): List { - val ruleEngineBuilder = getRuleEngine(java.util.List.of(rule)) + val ruleEngine = getRuleEngine(java.util.List.of(rule)) val event = RuleEvent(event = EVENT_ID, programStage = PROGRAM_STAGE, programStageName = PROGRAM_STAGE_NAME, status = RULE_EVENT_STATUS, eventDate = EVENT_DATE, dueDate = DUE_DATE, organisationUnit = ORGANISATION_UNIT, organisationUnitCode = ORGANISATION_UNIT_CODE, completedDate = null, dataValues = emptyList()) - val ruleEngine = ruleEngineBuilder.enrollment(enrollment).build() - return ruleEngine.evaluate(event).call() + return ruleEngine.copy(enrollment = enrollment).evaluate(event).call() } private val enrollment: RuleEnrollment @@ -203,14 +201,9 @@ class ProgramRuleVariableTest { .attributeValues(java.util.List.of(RuleAttributeValue.create("test_attribute", "test_value"))) .build() - private fun getRuleEngine(rules: List): RuleEngine.Builder { - return RuleEngineContext - .builder() - .rules(rules) - .ruleVariables(listOf()) - .supplementaryData(HashMap()) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) + private fun getRuleEngine(rules: List): RuleEngine { + return RuleEngine(RuleEngineContext(rules, listOf(), emptyMap(), emptyMap()), + emptyList(), null, TriggerEnvironment.SERVER) } companion object { diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineContextTest.kt b/src/test/java/org/hisp/dhis/rules/RuleEngineContextTest.kt deleted file mode 100644 index 1311228e..00000000 --- a/src/test/java/org/hisp/dhis/rules/RuleEngineContextTest.kt +++ /dev/null @@ -1,63 +0,0 @@ -package org.hisp.dhis.rules - -import io.mockk.mockk -import org.hisp.dhis.rules.models.Rule -import org.hisp.dhis.rules.models.RuleVariable -import org.hisp.dhis.rules.util.MockRuleVariable -import kotlin.test.* - -class RuleEngineContextTest { - private val ruleVariable: RuleVariable = MockRuleVariable() - private val ruleVariableTwo: RuleVariable = MockRuleVariable() - private val rule: Rule = mockk() - private val ruleTwo: Rule = mockk() - - @Test - fun builderShouldContainImmutableCopyOfRules() { - val members = listOf("one", "two") - val supplementaryData: MutableMap> = HashMap() - supplementaryData["text-key"] = members - val ruleVariables: MutableList = ArrayList() - val rules: MutableList = ArrayList() - ruleVariables.add(ruleVariable) - rules.add(rule) - val ruleEngineContext = RuleEngineContext.builder() - .ruleVariables(ruleVariables) - .supplementaryData(supplementaryData) - .rules(rules) - .build() - ruleVariables.add(ruleVariableTwo) - rules.add(ruleTwo) - assertEquals(1, ruleEngineContext.ruleVariables.size) - assertEquals(ruleVariable, ruleEngineContext.ruleVariables[0]) - assertEquals(1, ruleEngineContext.supplementaryData.size) - assertNotNull(ruleEngineContext.supplementaryData["text-key"]) - assertEquals(members, ruleEngineContext.supplementaryData["text-key"]) - assertEquals(1, ruleEngineContext.rules.size) - assertEquals(rule, ruleEngineContext.rules[0]) - try { - ruleEngineContext.ruleVariables.clear() - fail("UnsupportedOperationException was expected, but nothing was thrown.") - } catch (unsupportedOperationException: UnsupportedOperationException) { - // noop - } - try { - ruleEngineContext.rules.clear() - fail("UnsupportedOperationException was expected, but nothing was thrown.") - } catch (unsupportedOperationException: UnsupportedOperationException) { - // noop - } - } - - @Test - fun toEngineBuilderShouldReturnNewInstances() { - val ruleEngineContext = RuleEngineContext.builder() - .ruleVariables(listOf(MockRuleVariable())) - .supplementaryData(HashMap>()) - .rules(listOf(mockk())) - .build() - val ruleEngineBuilderOne = ruleEngineContext.toEngineBuilder() - val ruleEngineBuilderTwo = ruleEngineContext.toEngineBuilder() - assertNotEquals(ruleEngineBuilderOne, ruleEngineBuilderTwo) - } -} diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineEffectTypesTest.kt b/src/test/java/org/hisp/dhis/rules/RuleEngineEffectTypesTest.kt index 343df572..209a42af 100644 --- a/src/test/java/org/hisp/dhis/rules/RuleEngineEffectTypesTest.kt +++ b/src/test/java/org/hisp/dhis/rules/RuleEngineEffectTypesTest.kt @@ -105,13 +105,7 @@ class RuleEngineEffectTypesTest { fun simpleConditionMustResultInHideFieldEffect() { val ruleAction: RuleAction = RuleActionHideField("test_data_element", "test_action_content" ) val rule = Rule("true", listOf(ruleAction)) - val ruleEngine = RuleEngineContext - .builder() - .rules(List.of(rule)) - .supplementaryData(HashMap()) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .build() + val ruleEngine = RuleEngine(RuleEngineContext(listOf(rule), emptyList()), emptyList(), null, TriggerEnvironment.SERVER) val ruleEffects = ruleEngine.evaluate(getTestRuleEvent(RuleEvent.Status.ACTIVE)).call() assertEquals(1, ruleEffects.size) assertEquals("", ruleEffects[0].data) @@ -246,23 +240,10 @@ class RuleEngineEffectTypesTest { } private fun getRuleEngine(rule: Rule): RuleEngine { - return RuleEngineContext - .builder() - .rules(listOf(rule)) - .supplementaryData(HashMap()) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .build() + return RuleEngine(RuleEngineContext(listOf(rule), emptyList())) } private fun getRuleEngineMultiple(rule: Rule, ruleEvent: RuleEvent): RuleEngine { - return RuleEngineContext - .builder() - .rules(listOf(rule)) - .supplementaryData(HashMap()) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .events(List.of(ruleEvent)) - .build() + return RuleEngine(RuleEngineContext(listOf(rule), emptyList()), listOf(ruleEvent)) } } diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineFunctionTest.kt b/src/test/java/org/hisp/dhis/rules/RuleEngineFunctionTest.kt index e00722f9..2ec80d7e 100644 --- a/src/test/java/org/hisp/dhis/rules/RuleEngineFunctionTest.kt +++ b/src/test/java/org/hisp/dhis/rules/RuleEngineFunctionTest.kt @@ -22,7 +22,7 @@ class RuleEngineFunctionTest { listOf(ruleAction), "", "" ) val validRule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngine = RuleEngineTestUtils.getRuleEngine(java.util.List.of(failingRule, validRule)) + val ruleEngine = RuleEngineTestUtils.getRuleEngine(listOf(failingRule, validRule)) val ruleEnrollment = RuleEnrollment.create( "test_enrollment", enrollmentDate, enrollmentDate, RuleEnrollment.Status.ACTIVE, "", "", listOf(), @@ -294,14 +294,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngine = RuleEngineContext - .builder() - .rules(java.util.List.of(rule)) - .ruleVariables(java.util.List.of(ruleVariableOne)) - .supplementaryData(supplementaryData) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .build() + val ruleEngine = RuleEngine(RuleEngineContext(listOf(rule),listOf(ruleVariableOne),supplementaryData)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date(), null, "location1", null, java.util.List.of( @@ -327,14 +320,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngine = RuleEngineContext - .builder() - .rules(java.util.List.of(rule)) - .ruleVariables(java.util.List.of(ruleVariableOne)) - .supplementaryData(supplementaryData) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .build() + val ruleEngine = RuleEngine(RuleEngineContext(listOf(rule),listOf(ruleVariableOne),supplementaryData)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date(), null, "location1", null, java.util.List.of( @@ -359,14 +345,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngine = RuleEngineContext - .builder() - .rules(java.util.List.of(rule)) - .ruleVariables(java.util.List.of(ruleVariableOne)) - .supplementaryData(supplementaryData) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .build() + val ruleEngine = RuleEngine(RuleEngineContext(listOf(rule),listOf(ruleVariableOne),supplementaryData)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date(), null, "location1", null, java.util.List.of( @@ -392,14 +371,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngine = RuleEngineContext - .builder() - .rules(java.util.List.of(rule)) - .ruleVariables(java.util.List.of(ruleVariableOne)) - .supplementaryData(supplementaryData) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .build() + val ruleEngine = RuleEngine(RuleEngineContext(listOf(rule),listOf(ruleVariableOne),supplementaryData)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date(), null, "location1", null, java.util.List.of( @@ -459,7 +431,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -478,8 +450,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2, ruleEvent3)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent2, ruleEvent3)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("2", ruleEffects[0].data()) @@ -495,7 +466,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -514,8 +485,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2, ruleEvent3)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent2, ruleEvent3)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("2", ruleEffects[0].data()) @@ -533,7 +503,7 @@ class RuleEngineFunctionTest { "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -558,8 +528,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "condition") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2, ruleEvent3, ruleEvent4)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent2, ruleEvent3, ruleEvent4)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("3", ruleEffects[0].data()) @@ -577,7 +546,7 @@ class RuleEngineFunctionTest { "d2:hasValue(V{current_date}) && d2:count(#{test_var_one}) > 0", java.util.List.of(ruleAction), "", "" ) - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -590,8 +559,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition2") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent2)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("2", ruleEffects[0].data()) @@ -609,7 +577,7 @@ class RuleEngineFunctionTest { "d2:hasValue(V{current_date}) || d2:count(#{test_var_one}) > 0", java.util.List.of(ruleAction), "", "" ) - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -622,8 +590,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition2") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent2)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("2", ruleEffects[0].data()) @@ -642,7 +609,7 @@ class RuleEngineFunctionTest { "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -667,8 +634,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "condition") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2, ruleEvent3, ruleEvent4)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent2, ruleEvent3, ruleEvent4)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("3", ruleEffects[0].data()) @@ -683,14 +649,14 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.NUMERIC, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction1), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "2.6") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction1, ruleEffects[0].ruleAction()) assertEquals("3", ruleEffects[0].data()) @@ -705,14 +671,14 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.NUMERIC, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "2.6") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("0.6", ruleEffects[0].data()) @@ -727,14 +693,14 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "ABCD") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("BC", ruleEffects[0].data()) @@ -752,7 +718,7 @@ class RuleEngineFunctionTest { "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -763,7 +729,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "2018-02-01") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("4", ruleEffects[0].data()) @@ -781,7 +747,7 @@ class RuleEngineFunctionTest { "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -792,7 +758,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "2018-09-01") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("8", ruleEffects[0].data()) @@ -812,7 +778,7 @@ class RuleEngineFunctionTest { val rule: Rule = Rule("d2:yearsBetween('2016-01-01', '2018-09-01') == 2", java.util.List.of(ruleAction), "", "" ) - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -823,7 +789,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "2018-09-01") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("2", ruleEffects[0].data()) @@ -844,7 +810,7 @@ class RuleEngineFunctionTest { "test_var_three", "test_data_element_two", RuleValueType.NUMERIC, true, ArrayList() ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -852,7 +818,7 @@ class RuleEngineFunctionTest { "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, listOf() ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("2", ruleEffects[0].data()) @@ -864,12 +830,12 @@ class RuleEngineFunctionTest { "test_action_content", "d2:zing( '-1' )" ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, listOf()) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, listOf()) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, listOf() ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("0", ruleEffects[0].data()) @@ -881,11 +847,11 @@ class RuleEngineFunctionTest { "test_action_content", "d2:oizp( '0' )" ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, listOf()) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, listOf()) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, listOf()) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("1", ruleEffects[0].data()) @@ -900,7 +866,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.NUMERIC, true, ArrayList() ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -919,7 +885,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "-3") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -936,7 +902,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.NUMERIC, true, ArrayList() ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -955,7 +921,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "-3") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -971,14 +937,14 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "yyyy-mm-dd") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("yyyy", ruleEffects[0].data()) @@ -993,14 +959,14 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "yyyy-mm-dd") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("dd", ruleEffects[0].data()) @@ -1015,14 +981,14 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "weeks") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("weeks+days", ruleEffects[0].data()) @@ -1037,14 +1003,14 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", listOf(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "44455545454") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(ruleEffects.size, 1) assertEquals(ruleEffects[0].ruleAction(), ruleAction) assertEquals("true", ruleEffects[0].data()) @@ -1054,7 +1020,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "444887777") ) ) - val ruleEffects2 = ruleEngineBuilder.build().evaluate(ruleEvent2).call() + val ruleEffects2 = ruleEngineBuilder.evaluate(ruleEvent2).call() assertEquals(1, ruleEffects2.size) assertEquals(ruleAction, ruleEffects2[0].ruleAction()) assertEquals("false", ruleEffects2[0].data()) @@ -1069,14 +1035,14 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "testString") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("10", ruleEffects[0].data()) @@ -1091,7 +1057,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( @@ -1099,7 +1065,7 @@ class RuleEngineFunctionTest { .create(Date(), "test_program_stage", "test_data_element_one", "test-String-for-split") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("for", ruleEffects[0].data()) @@ -1153,7 +1119,7 @@ class RuleEngineFunctionTest { val rule: Rule = Rule("d2:zScoreWFA(1,#{test_var_one},#{test_var_two}) == 0", java.util.List.of(ruleAction), "", "" ) - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1164,7 +1130,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) } @@ -1183,7 +1149,7 @@ class RuleEngineFunctionTest { val rule: Rule = Rule("d2:zScoreHFA(12,#{test_var_one},#{test_var_two}) == -3", java.util.List.of(ruleAction), "", "" ) - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1194,7 +1160,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "1") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) } @@ -1213,7 +1179,7 @@ class RuleEngineFunctionTest { val rule: Rule = Rule("d2:zScoreHFA(10,#{test_var_one},#{test_var_two}) == -2", java.util.List.of(ruleAction), "", "" ) - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1224,7 +1190,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) } @@ -1243,7 +1209,7 @@ class RuleEngineFunctionTest { val rule: Rule = Rule("d2:zScoreWFH(52,#{test_var_one},A{test_var_two}) < 2", java.util.List.of(ruleAction), "", "" ) - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1254,7 +1220,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) } @@ -1273,7 +1239,7 @@ class RuleEngineFunctionTest { val rule: Rule = Rule("d2:zScoreWFH(81.5,#{test_var_one},#{test_var_two}) == 2", java.util.List.of(ruleAction), "", "" ) - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1284,7 +1250,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "1") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngineBuilder.evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) } @@ -1301,7 +1267,7 @@ class RuleEngineFunctionTest { "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("d2:maxValue(#{test_var_one}) == 8.0", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1326,7 +1292,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -1345,7 +1311,7 @@ class RuleEngineFunctionTest { "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("d2:maxValue('test_var_one') == 8.0", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1370,7 +1336,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -1388,7 +1354,7 @@ class RuleEngineFunctionTest { "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1413,7 +1379,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -1432,7 +1398,7 @@ class RuleEngineFunctionTest { "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder( + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine( rule, java.util.List.of(ruleVariableOne, ruleVariableTwo) ) @@ -1457,7 +1423,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -1480,7 +1446,7 @@ class RuleEngineFunctionTest { "test_var_one", "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) val rule: Rule = Rule("true", listOf(ruleAction), "test_rule", "") - val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val ruleEngineBuilder = RuleEngineTestUtils.getRuleEngine(rule, java.util.List.of(ruleVariableOne)) val ruleEvent1 = RuleEvent( "test_event1", "test_program_stage1","",RuleEvent.Status.ACTIVE, dayBeforeYesterday, Date(), null, "", null, java.util.List.of( @@ -1499,7 +1465,7 @@ class RuleEngineFunctionTest { RuleDataValue.create(dayAfterTomorrow, "test_program_stage3", "test_data_element_one", "value3") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngineBuilder.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineGetDescriptionTest.kt b/src/test/java/org/hisp/dhis/rules/RuleEngineGetDescriptionTest.kt index 83f29bb1..0445089c 100644 --- a/src/test/java/org/hisp/dhis/rules/RuleEngineGetDescriptionTest.kt +++ b/src/test/java/org/hisp/dhis/rules/RuleEngineGetDescriptionTest.kt @@ -62,11 +62,11 @@ class RuleEngineGetDescriptionTest { fun evaluateGetDescriptionWithIncorrectRules() { val rule= Rule("d2:hasValue(#{test_var_one} + 1)", listOf(ruleAction)) val rule1= Rule("d2:daysBetween((#{test_var_date_one},#{test_var_date_two})", listOf(ruleAction)) - var ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + var ruleEngine = getRuleEngineForDescription(itemStore) var result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertFalse(result.valid()) - ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + ruleEngine = getRuleEngineForDescription(itemStore) result = ruleEngine.evaluate(rule1.condition) assertNotNull(result) assertFalse(result.valid()) @@ -75,7 +75,7 @@ class RuleEngineGetDescriptionTest { @Test fun evaluateGetDescriptionWithInvalidProgramRuleVariable() { val rule = Rule("d2:hasValue(#{test_var_one1})", listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertFalse(result.valid()) @@ -84,7 +84,7 @@ class RuleEngineGetDescriptionTest { @Test fun descriptionForLengthFunction() { var rule = Rule("d2:length(#{test_var_one}) > 0", listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) var result = ruleEngine.evaluate(rule.condition()) assertNotNull(result) assertTrue(result.valid()) @@ -101,7 +101,7 @@ class RuleEngineGetDescriptionTest { @Test fun testGetDescriptionWithD2FunctionsAndLogicalAnd() { val rule = Rule("d2:count(#{test_var_one}) > 0 && d2:hasValue(#{test_var_two})", listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -110,7 +110,7 @@ class RuleEngineGetDescriptionTest { @Test fun testGetDescriptionWithD2FunctionsTEA() { val rule= Rule("d2:hasValue('test_var_three')", listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertEquals("d2:hasValue(Variable_THREE)", result.description()) @@ -120,7 +120,7 @@ class RuleEngineGetDescriptionTest { @Test fun testGetDescriptionWithPlainAttributeComparisonWithName() { val rule= Rule("'test_var_three' == 'email'", listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertEquals("'test_var_three' == 'email'", result.description()) @@ -130,7 +130,7 @@ class RuleEngineGetDescriptionTest { @Test fun testGetDescriptionWithPlainAttributeComparison() { val rule= Rule("A{test_var_three} == 'email'", listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertEquals("Variable_THREE == 'email'", result.description()) @@ -141,7 +141,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionStringLiterals() { val condition = " true && false || 1 > 3" val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -151,7 +151,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionD2BetweenFunction() { val condition = "d2:daysBetween(#{test_var_date_one},#{test_var_date_two}) > 0" val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -161,7 +161,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionD2BetweenFunctionWithEnvironmentVariables() { val condition = "d2:daysBetween(V{completed_date},V{current_date}) > 0" val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -171,7 +171,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionD2FunctionAttribute() { val condition = "A{test_var_number} > 0" val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -181,7 +181,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionWithD2FunctionDataElement() { val condition = "#{test_var_number} > 0" val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -191,7 +191,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionWithConstant() { val condition = "C{NAgjOfWMXg6} == 0" val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -201,7 +201,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionWithProgramEnvironmentVariable() { val condition = "d2:hasValue(V{completed_date})" val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -211,7 +211,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionWithSingleD2Function() { val condition = "d2:hasValue(#{test_var_one})" val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -221,7 +221,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionWithMultipleD2FunctionsAndLogicalOROperator() { val condition = "d2:hasValue(#{test_var_two}) || d2:count(#{test_var_one}) > 0 " val rule= Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -231,7 +231,7 @@ class RuleEngineGetDescriptionTest { fun testGetDescriptionWithMultipleD2FunctionsAndLogicalANDOperator() { val condition = "d2:hasValue(#{test_var_two}) && d2:count(#{test_var_one}) > 0 " val rule = Rule(condition, listOf(ruleAction)) - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) val result = ruleEngine.evaluate(rule.condition) assertNotNull(result) assertTrue(result.valid()) @@ -239,7 +239,7 @@ class RuleEngineGetDescriptionTest { @Test fun testGetDescriptionForDataFieldExpression() { - val ruleEngine = getRuleEngineBuilderForDescription(itemStore).build() + val ruleEngine = getRuleEngineForDescription(itemStore) var result = ruleEngine.evaluateDataFieldExpression("1 + 1") assertNotNull(result) assertTrue(result.valid()) @@ -258,12 +258,9 @@ class RuleEngineGetDescriptionTest { assertTrue(result.exception() is RuleEngineValidationException) } - private fun getRuleEngineBuilderForDescription(itemStore: Map): RuleEngine.Builder { - return RuleEngineContext - .builder() - .supplementaryData(HashMap()) - .constantsValue(HashMap()).itemStore(itemStore).ruleEngineItent(RuleEngineIntent.DESCRIPTION) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) + private fun getRuleEngineForDescription(itemStore: Map): RuleEngine { + return RuleEngine(RuleEngineContext(emptyList(), emptyList(), emptyMap(), + emptyMap(), RuleEngineIntent.DESCRIPTION, itemStore)) } companion object { diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineTest.kt b/src/test/java/org/hisp/dhis/rules/RuleEngineTest.kt index 10500889..5416bf41 100644 --- a/src/test/java/org/hisp/dhis/rules/RuleEngineTest.kt +++ b/src/test/java/org/hisp/dhis/rules/RuleEngineTest.kt @@ -16,36 +16,8 @@ import kotlin.test.assertTrue internal class RuleEngineTest { - private var ruleEngineContext: RuleEngineContext = RuleEngineContext.builder() - .ruleVariables(listOf(MockRuleVariable())) - .rules(listOf(Rule("true", listOf()))) - .build() - - @Test - fun builderShouldPropagateImmutableEventsList() { - val ruleEventOne = mockk() - val ruleEventTwo = mockk() - val ruleEvents: MutableList = ArrayList() - ruleEvents.add(ruleEventOne) - val engine: RuleEngine = ruleEngineContext.toEngineBuilder() - .events(ruleEvents) - .build() - ruleEvents.add(ruleEventTwo) - assertEquals(1, engine.events.size) - assertEquals(ruleEventOne, engine.events[0]) - } - - @Test - fun builderShouldPropagateImmutableEmptyListIfNoEventsProvided() { - val engine: RuleEngine = ruleEngineContext.toEngineBuilder().build() - assertEquals(0, engine.events.size) - } - - @Test - fun builderShouldPropagateRuleEngineContext() { - val (executionContext) = ruleEngineContext.toEngineBuilder().build() - assertEquals(ruleEngineContext, executionContext) - } + private val ruleEngineContext: RuleEngineContext = RuleEngineContext( + listOf(Rule("true", listOf())),listOf(MockRuleVariable())) @Test(expected = IllegalStateException::class) fun evaluateShouldThrowIfEventIsAlreadyInContext() { @@ -53,18 +25,14 @@ internal class RuleEngineTest { RuleEvent.Status.ACTIVE, Date(), Date(), null,"", null, ArrayList()) val ruleEvents: MutableList = ArrayList() ruleEvents.add(ruleEvent) - val ruleEngine = ruleEngineContext.toEngineBuilder() - .events(ruleEvents) - .build() + val ruleEngine = RuleEngine(ruleEngineContext, ruleEvents) ruleEngine.evaluate(ruleEvent) } @Test @Throws(InterruptedException::class) fun concurrentIterationOverRulesListShouldNotFail() { - val (executionContext) = RuleEngineContext.builder() - .rules(listOf(mockk(), mockk())) - .build().toEngineBuilder().build() + val executionContext = RuleEngineContext(listOf(mockk(), mockk()), emptyList()) val threadOneLatch = CountDownLatch(1) val threadTwoLatch = CountDownLatch(1) object : Thread() { diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineTestUtils.java b/src/test/java/org/hisp/dhis/rules/RuleEngineTestUtils.java deleted file mode 100644 index 5a9740df..00000000 --- a/src/test/java/org/hisp/dhis/rules/RuleEngineTestUtils.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.hisp.dhis.rules; - -/* - * Copyright (c) 2004-2020, 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. - */ - -import org.hisp.dhis.rules.models.Rule; -import org.hisp.dhis.rules.models.RuleEnrollment; -import org.hisp.dhis.rules.models.RuleEvent; -import org.hisp.dhis.rules.models.RuleVariable; -import org.hisp.dhis.rules.models.TriggerEnvironment; - -import java.util.HashMap; -import java.util.List; - -/** - * @author Zubair Asghar - */ -public class RuleEngineTestUtils -{ - public static RuleEngine getRuleEngine( Rule rule, List ruleVariables ) - { - return getRuleEngineBuilder( List.of( rule ), ruleVariables ) - .build(); - } - - public static RuleEngine getRuleEngine( List rules, RuleEnrollment ruleEnrollment, - List ruleEvents ) - { - return getRuleEngineBuilder( rules, ruleEnrollment, ruleEvents ) - .build(); - } - - public static RuleEngine getRuleEngine( List rules ) - { - return getRuleEngineBuilder( rules, List.of() ) - .build(); - } - - public static RuleEngine.Builder getRuleEngineBuilder( Rule rule, List ruleVariables ) - { - return getRuleEngineBuilder( List.of( rule ), ruleVariables ); - } - - private static RuleEngine.Builder getRuleEngineBuilder( List rule, List ruleVariables ) - { - return RuleEngineContext - .builder() - .rules( rule ) - .ruleVariables( ruleVariables ) - .supplementaryData( new HashMap>() ) - .constantsValue( new HashMap() ) - .build().toEngineBuilder().triggerEnvironment( TriggerEnvironment.SERVER ); - } - - private static RuleEngine.Builder getRuleEngineBuilder( List rule, RuleEnrollment ruleEnrollment, - List ruleEvents ) - { - return getRuleEngineBuilder( rule, List.of() ) - .enrollment( ruleEnrollment ) - .events( ruleEvents ); - } -} diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineTestUtils.kt b/src/test/java/org/hisp/dhis/rules/RuleEngineTestUtils.kt new file mode 100644 index 00000000..8fe0b415 --- /dev/null +++ b/src/test/java/org/hisp/dhis/rules/RuleEngineTestUtils.kt @@ -0,0 +1,49 @@ +package org.hisp.dhis.rules + +import org.hisp.dhis.rules.models.* + +/* +* Copyright (c) 2004-2020, 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. +*/ /** + * @author Zubair Asghar + */ +object RuleEngineTestUtils { + fun getRuleEngine( + rules: List, ruleEnrollment: RuleEnrollment, + ruleEvents: List + ): RuleEngine { + return RuleEngine(RuleEngineContext(rules, emptyList()), ruleEvents, ruleEnrollment) + } + + fun getRuleEngine(rule: Rule, ruleVariables: List): RuleEngine { + return RuleEngine(RuleEngineContext(listOf(rule), ruleVariables)) + } + + fun getRuleEngine(rules: List): RuleEngine { + return RuleEngine(RuleEngineContext(rules, emptyList())) + } +} diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineValueTypesTest.kt b/src/test/java/org/hisp/dhis/rules/RuleEngineValueTypesTest.kt index 8a456580..4d389249 100644 --- a/src/test/java/org/hisp/dhis/rules/RuleEngineValueTypesTest.kt +++ b/src/test/java/org/hisp/dhis/rules/RuleEngineValueTypesTest.kt @@ -61,13 +61,6 @@ class RuleEngineValueTypesTest { } private fun getRuleEngine(rule: Rule, ruleVariables: List): RuleEngine { - return RuleEngineContext - .builder() - .rules(listOf(rule)) - .ruleVariables(ruleVariables) - .supplementaryData(HashMap()) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .build() + return RuleEngine(RuleEngineContext(listOf(rule), ruleVariables)) } } diff --git a/src/test/java/org/hisp/dhis/rules/RuleEngineVariableNameTest.kt b/src/test/java/org/hisp/dhis/rules/RuleEngineVariableNameTest.kt index ada8c5dc..f936dd4d 100644 --- a/src/test/java/org/hisp/dhis/rules/RuleEngineVariableNameTest.kt +++ b/src/test/java/org/hisp/dhis/rules/RuleEngineVariableNameTest.kt @@ -2,6 +2,7 @@ package org.hisp.dhis.rules import org.hisp.dhis.rules.models.* import java.util.* +import java.util.List.* import kotlin.test.Test import kotlin.test.assertEquals @@ -59,7 +60,7 @@ class RuleEngineVariableNameTest { val ruleVariable7: RuleVariable = RuleVariableNewestEvent.create( UID0WILD2, "test_data_element7", RuleValueType.NUMERIC, true, ArrayList() ) - val actions = java.util.List.of( + val actions = of( ruleAction1, ruleAction2, ruleAction3, ruleAction4, ruleAction5, ruleAction6, ruleAction7, ruleAction8, ruleAction9, ruleAction10 ) @@ -67,17 +68,17 @@ class RuleEngineVariableNameTest { "true", actions, "", "" ) - val ruleVariables = java.util.List.of( + val ruleVariables = of( ruleVariable1, ruleVariable2, ruleVariable3, ruleVariable4, ruleVariable5, ruleVariable6, ruleVariable7 ) - val ruleEngineBuilder = getRuleEngineBuilder( + val ruleEngine = getRuleEngine( rule, ruleVariables ) val ruleEvent = RuleEvent( "test_event", "test_program_stage", "", - RuleEvent.Status.ACTIVE, Date(), Date(), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date(), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element1", "2.6"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element2", "2.6"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element3", "2.6"), @@ -90,7 +91,7 @@ class RuleEngineVariableNameTest { RuleDataValue.create(Date(), "test_program_stage", "test_data_element10", "2.6") ) ) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngine.evaluate(ruleEvent).call() assertEquals(10, ruleEffects.size) assertEquals(ruleAction1, ruleEffects[0].ruleAction()) assertEquals("3", ruleEffects[0].data()) @@ -122,11 +123,11 @@ class RuleEngineVariableNameTest { val ruleVariable: RuleVariable = RuleVariableCurrentEvent.create( UID01, "test_data_element", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngine = getRuleEngine(rule, java.util.List.of(ruleVariable)) + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine(rule, of(ruleVariable)) val ruleEvent = RuleEvent( "test_event", "test_program_stage", "", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create( Date(), "test_program_stage", "test_data_element", "test_value" ) @@ -146,11 +147,11 @@ class RuleEngineVariableNameTest { val ruleVariable: RuleVariable = RuleVariableCurrentEvent.create( VARIABLE_NAME, "test_data_element", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngine = getRuleEngine(rule, java.util.List.of(ruleVariable)) + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine(rule, of(ruleVariable)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create( Date(), "test_program_stage", "test_data_element", "test_value" ) @@ -170,28 +171,27 @@ class RuleEngineVariableNameTest { val ruleVariableOne: RuleVariable = RuleVariableNewestEvent.create( VARIABLE_NAME, "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine(rule, of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) val ruleEvent2 = RuleEvent( "test_event2", "test_program_stage2","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition2") ) ) val ruleEvent3 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2, ruleEvent3)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent2, ruleEvent3)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("2", ruleEffects[0].data()) @@ -205,28 +205,27 @@ class RuleEngineVariableNameTest { val ruleVariableOne: RuleVariable = RuleVariableNewestEvent.create( UID01, "test_data_element_one", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine(rule, of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) val ruleEvent2 = RuleEvent( "test_event2", "test_program_stage2","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition2") ) ) val ruleEvent3 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2, ruleEvent3)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent2, ruleEvent3)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("2", ruleEffects[0].data()) @@ -243,34 +242,33 @@ class RuleEngineVariableNameTest { val ruleVariableTwo: RuleVariable = RuleVariableNewestEvent.create( "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine(rule, of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) val ruleEvent2 = RuleEvent( "test_event2", "test_program_stage2","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition2") ) ) val ruleEvent3 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) val ruleEvent4 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "condition") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2, ruleEvent3, ruleEvent4)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent2, ruleEvent3, ruleEvent4)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("3", ruleEffects[0].data()) @@ -287,34 +285,33 @@ class RuleEngineVariableNameTest { val ruleVariableTwo: RuleVariable = RuleVariableNewestEvent.create( "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine(rule, of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) val ruleEvent2 = RuleEvent( "test_event2", "test_program_stage2","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition2") ) ) val ruleEvent3 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "condition") ) ) val ruleEvent4 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "condition") ) ) - ruleEngineBuilder.events(java.util.List.of(ruleEvent2, ruleEvent3, ruleEvent4)) - val ruleEffects = ruleEngineBuilder.build().evaluate(ruleEvent).call() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent2, ruleEvent3, ruleEvent4)).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) assertEquals("3", ruleEffects[0].data()) @@ -328,27 +325,27 @@ class RuleEngineVariableNameTest { val ruleVariableOne: RuleVariable = RuleVariableNewestEvent.create( VARIABLE_NAME, "test_data_element_one", RuleValueType.NUMERIC, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine(rule, of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "0") ) ) val ruleEvent1 = RuleEvent( "test_event1", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "1") ) ) val ruleEvent2 = RuleEvent( "test_event1", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "-3") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -363,27 +360,27 @@ class RuleEngineVariableNameTest { val ruleVariableOne: RuleVariable = RuleVariableNewestEvent.create( UID01, "test_data_element_one", RuleValueType.NUMERIC, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder(rule, java.util.List.of(ruleVariableOne)) + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine(rule, of(ruleVariableOne)) val ruleEvent = RuleEvent( "test_event", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "0") ) ) val ruleEvent1 = RuleEvent( "test_event1", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "1") ) ) val ruleEvent2 = RuleEvent( "test_event1", "test_program_stage","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "-3") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -401,33 +398,33 @@ class RuleEngineVariableNameTest { val ruleVariableTwo: RuleVariable = RuleVariableNewestEvent.create( "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("d2:maxValue(#{" + VARIABLE_NAME + "}) == 8.0", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder( + val rule: Rule = Rule("d2:maxValue(#{" + VARIABLE_NAME + "}) == 8.0", of(ruleAction), "", "") + val ruleEngine = getRuleEngine( rule, - java.util.List.of(ruleVariableOne, ruleVariableTwo) + of(ruleVariableOne, ruleVariableTwo) ) val ruleEvent1 = RuleEvent( "test_event1", "test_program_stage1","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "5"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) val ruleEvent2 = RuleEvent( "test_event2", "test_program_stage2","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "7"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) val ruleEvent3 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "8"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -444,33 +441,33 @@ class RuleEngineVariableNameTest { val ruleVariableTwo: RuleVariable = RuleVariableNewestEvent.create( "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("d2:maxValue(#{" + UID01 + "}) == 8.0", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder( + val rule: Rule = Rule("d2:maxValue(#{" + UID01 + "}) == 8.0", of(ruleAction), "", "") + val ruleEngine = getRuleEngine( rule, - java.util.List.of(ruleVariableOne, ruleVariableTwo) + of(ruleVariableOne, ruleVariableTwo) ) val ruleEvent1 = RuleEvent( "test_event1", "test_program_stage1","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "5"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) val ruleEvent2 = RuleEvent( "test_event2", "test_program_stage2","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "7"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) val ruleEvent3 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "8"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -487,33 +484,33 @@ class RuleEngineVariableNameTest { val ruleVariableTwo: RuleVariable = RuleVariableNewestEvent.create( "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder( + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine( rule, - java.util.List.of(ruleVariableOne, ruleVariableTwo) + of(ruleVariableOne, ruleVariableTwo) ) val ruleEvent1 = RuleEvent( "test_event1", "test_program_stage1","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "5"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) val ruleEvent2 = RuleEvent( "test_event2", "test_program_stage2","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "7"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) val ruleEvent3 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "8"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -531,33 +528,33 @@ class RuleEngineVariableNameTest { val ruleVariableTwo: RuleVariable = RuleVariableNewestEvent.create( "test_var_two", "test_data_element_two", RuleValueType.TEXT, true, ArrayList() ) - val rule: Rule = Rule("true", java.util.List.of(ruleAction), "", "") - val ruleEngineBuilder = getRuleEngineBuilder( + val rule: Rule = Rule("true", of(ruleAction), "", "") + val ruleEngine = getRuleEngine( rule, - java.util.List.of(ruleVariableOne, ruleVariableTwo) + of(ruleVariableOne, ruleVariableTwo) ) val ruleEvent1 = RuleEvent( "test_event1", "test_program_stage1","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "5"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) val ruleEvent2 = RuleEvent( "test_event2", "test_program_stage2","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "7"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) val ruleEvent3 = RuleEvent( "test_event3", "test_program_stage3","", - RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, java.util.List.of( + RuleEvent.Status.ACTIVE, Date(), Date (), null, "", null, of( RuleDataValue.create(Date(), "test_program_stage", "test_data_element_one", "8"), RuleDataValue.create(Date(), "test_program_stage", "test_data_element_two", "male") ) ) - val ruleEffects = ruleEngineBuilder.events(java.util.List.of(ruleEvent1, ruleEvent2)).build() + val ruleEffects = ruleEngine.copy(events = listOf(ruleEvent1, ruleEvent2)) .evaluate(ruleEvent3).call() assertEquals(1, ruleEffects.size) assertEquals(ruleAction, ruleEffects[0].ruleAction()) @@ -565,18 +562,7 @@ class RuleEngineVariableNameTest { } private fun getRuleEngine(rule: Rule, ruleVariables: List): RuleEngine { - return getRuleEngineBuilder(rule, ruleVariables) - .build() - } - - private fun getRuleEngineBuilder(rule: Rule, ruleVariables: List): RuleEngine.Builder { - return RuleEngineContext - .builder() - .rules(listOf(rule)) - .ruleVariables(ruleVariables) - .supplementaryData(HashMap()) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) + return RuleEngine(RuleEngineContext(listOf(rule),ruleVariables)) } companion object { diff --git a/src/test/java/org/hisp/dhis/rules/VariableValueTypeTest.kt b/src/test/java/org/hisp/dhis/rules/VariableValueTypeTest.kt index 375f243f..c0489fb4 100644 --- a/src/test/java/org/hisp/dhis/rules/VariableValueTypeTest.kt +++ b/src/test/java/org/hisp/dhis/rules/VariableValueTypeTest.kt @@ -37,16 +37,16 @@ class VariableValueTypeTest { fun testNumericVariablesAreComparedCorrectly() { val ruleAction: RuleAction = RuleActionText .createForFeedback("test_action_content", "#{test_variable}") - val rule: Rule = Rule("#{test_variable} > #{test_variable2}", java.util.List.of(ruleAction), "", "") + val rule = Rule("#{test_variable} > #{test_variable2}", listOf(ruleAction), "", "") val ruleVariable: RuleVariable = RuleVariableCurrentEvent .create("test_variable", "test_data_element", RuleValueType.NUMERIC, true, ArrayList()) val ruleVariable2: RuleVariable = RuleVariableCurrentEvent .create("test_variable2", "test_data_element2", RuleValueType.NUMERIC, true, ArrayList()) - val ruleEngine = getRuleEngine(rule, java.util.List.of(ruleVariable, ruleVariable2)) + val ruleEngine = getRuleEngine(rule, listOf(ruleVariable, ruleVariable2)) val ruleEvent = RuleEvent( "test_event", "test_program_stage", "", RuleEvent.Status.ACTIVE, Date(), Date(), null, "", null, - java.util.List.of( + listOf( RuleDataValue.create(Date(), "", "test_data_element", "30"), RuleDataValue.create(Date(), "", "test_data_element2", "4") ) @@ -61,12 +61,12 @@ class VariableValueTypeTest { fun testTextVariablesAreComparedCorrectly() { val ruleAction: RuleAction = RuleActionText .createForFeedback("test_action_content", "#{test_variable}") - val rule: Rule = Rule("#{test_variable} > #{test_variable2}", java.util.List.of(ruleAction), "", "") + val rule = Rule("#{test_variable} > #{test_variable2}", listOf(ruleAction), "", "") val ruleVariable: RuleVariable = RuleVariableCurrentEvent .create("test_variable", "test_data_element", RuleValueType.TEXT, true, ArrayList()) val ruleVariable2: RuleVariable = RuleVariableCurrentEvent .create("test_variable2", "test_data_element2", RuleValueType.TEXT, true, ArrayList()) - val ruleEngine = getRuleEngine(rule, java.util.List.of(ruleVariable, ruleVariable2)) + val ruleEngine = getRuleEngine(rule, listOf(ruleVariable, ruleVariable2)) val ruleEvent = RuleEvent( "test_event", "test_program_stage", "", RuleEvent.Status.ACTIVE, Date(), Date(), null, "", null, @@ -80,13 +80,6 @@ class VariableValueTypeTest { } private fun getRuleEngine(rule: Rule, ruleVariables: List): RuleEngine { - return RuleEngineContext - .builder() - .rules(listOf(rule)) - .ruleVariables(ruleVariables) - .supplementaryData(HashMap()) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) - .build() + return RuleEngine(RuleEngineContext(listOf(rule),ruleVariables)) } } diff --git a/src/test/java/org/hisp/dhis/rules/models/CalculatedValueTest.kt b/src/test/java/org/hisp/dhis/rules/models/CalculatedValueTest.kt index b4446aac..3b0536e5 100644 --- a/src/test/java/org/hisp/dhis/rules/models/CalculatedValueTest.kt +++ b/src/test/java/org/hisp/dhis/rules/models/CalculatedValueTest.kt @@ -37,7 +37,7 @@ class CalculatedValueTest { @Test fun evaluateTenThousandRulesTest() { val i = 10000 - val ruleEngineBuilder = getRuleEngine(createRules(i)) + val ruleEngine = getRuleEngine(createRules(i)) val enrollment = RuleEnrollment.builder() .enrollment("test_enrollment") .programName("test_program") @@ -57,8 +57,7 @@ class CalculatedValueTest { ) ) ) - val ruleEngine = ruleEngineBuilder.enrollment(enrollment).build() - val ruleEffects = ruleEngine.evaluate(ruleEvent).call() + val ruleEffects = ruleEngine.copy(enrollment = enrollment).evaluate(ruleEvent).call() assertEquals(i, ruleEffects.size) } @@ -87,7 +86,7 @@ class CalculatedValueTest { ) ) ) - val ruleEngine = getRuleEngine(java.util.List.of(rule, rule2)).enrollment(enrollment).build() + val ruleEngine = getRuleEngine(java.util.List.of(rule, rule2)).copy(enrollment = enrollment) val ruleEffects = ruleEngine.evaluate(ruleEvent).call() assertEquals("4", ruleEffects[0].data()) assertEquals(sendMessageAction, ruleEffects[0].ruleAction()) @@ -114,7 +113,7 @@ class CalculatedValueTest { val rule2 = Rule("#{test_calculated_value}==4.0", listOf(sendMessageAction), "test_program_rule2", "" ) - val ruleEngineBuilder = getRuleEngine(java.util.List.of(rule, rule2)) + val ruleEngine = getRuleEngine(java.util.List.of(rule, rule2)) val enrollment = RuleEnrollment.builder() .enrollment("test_enrollment") .programName("test_program") @@ -134,22 +133,15 @@ class CalculatedValueTest { ) ) ) - val ruleEngine = ruleEngineBuilder.enrollment(enrollment).build() - val ruleEffects = ruleEngine.evaluate(ruleEvent).call() + val ruleEffects = ruleEngine.copy(enrollment = enrollment).evaluate(ruleEvent).call() assertEquals(1, ruleEffects.size) assertEquals("4", ruleEffects[0].data()) assertEquals(sendMessageAction, ruleEffects[0].ruleAction()) } - private fun getRuleEngine(rules: List): RuleEngine.Builder { + private fun getRuleEngine(rules: List): RuleEngine { val ruleVariable: RuleVariable = RuleVariableCalculatedValue .create("test_calculated_value", "", RuleValueType.TEXT, true, ArrayList()) - return RuleEngineContext - .builder() - .rules(rules) - .ruleVariables(java.util.List.of(ruleVariable)) - .supplementaryData(HashMap()) - .constantsValue(HashMap()) - .build().toEngineBuilder().triggerEnvironment(TriggerEnvironment.SERVER) + return RuleEngine(RuleEngineContext(rules, listOf(ruleVariable))) } }