diff --git a/drools-ansible-rulebook-integration-api/src/test/java/org/drools/ansible/rulebook/integration/api/ProcessEventTest.java b/drools-ansible-rulebook-integration-api/src/test/java/org/drools/ansible/rulebook/integration/api/ProcessEventTest.java index 770e3bb6..ee6a222c 100644 --- a/drools-ansible-rulebook-integration-api/src/test/java/org/drools/ansible/rulebook/integration/api/ProcessEventTest.java +++ b/drools-ansible-rulebook-integration-api/src/test/java/org/drools/ansible/rulebook/integration/api/ProcessEventTest.java @@ -1,5 +1,6 @@ package org.drools.ansible.rulebook.integration.api; +import org.drools.base.reteoo.InitialFactImpl; import org.junit.Test; import org.kie.api.prototype.PrototypeFactInstance; import org.kie.api.runtime.rule.Match; @@ -131,4 +132,51 @@ public void testEventShouldProduceMultipleMatchesForSameRule() { rulesExecutor.dispose(); } + + public static final String JSON_IS_NOT_DEFINED = + """ + { + "rules": [ + { + "Rule": { + "name": "r1", + "condition": { + "AllCondition": [ + { + "IsNotDefinedExpression": { + "Event": "beta.xheaders.age" + } + } + ] + }, + "actions": [ + { + "Action": { + "action": "debug", + "action_args": {} + } + } + ], + "enabled": true + } + } + ] + } + """; + + @Test + public void isNotDefinedExpression() { + RulesExecutor rulesExecutor = RulesExecutorFactory.createFromJson(JSON_IS_NOT_DEFINED); + + List matchedRules = rulesExecutor.processEvents("{\"meta\":{\"headers\":{\"token\":123}}}").join(); + assertEquals(1, matchedRules.size()); + assertEquals("r1", matchedRules.get(0).getRule().getName()); + assertEquals(InitialFactImpl.class, matchedRules.get(0).getObjects().get(0).getClass()); + + // "isNotDefined" rule matches only once + matchedRules = rulesExecutor.processEvents("{\"beta\":{\"headers\":{\"age\":23}}}").join(); + assertEquals(0, matchedRules.size()); + + rulesExecutor.dispose(); + } }