From 804d9be98a608e5d7140076e684734ae87b96f91 Mon Sep 17 00:00:00 2001 From: Mahmoud Ben Hassine Date: Thu, 18 Aug 2016 11:34:34 +0200 Subject: [PATCH] issue #40 : checkRules must take into account rules order --- .../easyrules/core/DefaultRulesEngine.java | 1 + .../core/DefaultRulesEngineTest.java | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/easyrules-core/src/main/java/org/easyrules/core/DefaultRulesEngine.java b/easyrules-core/src/main/java/org/easyrules/core/DefaultRulesEngine.java index 5e77d12..a4bf54e 100644 --- a/easyrules-core/src/main/java/org/easyrules/core/DefaultRulesEngine.java +++ b/easyrules-core/src/main/java/org/easyrules/core/DefaultRulesEngine.java @@ -122,6 +122,7 @@ class DefaultRulesEngine implements RulesEngine { @Override public Map checkRules() { LOGGER.info("Checking rules"); + sortRules(); Map result = new HashMap<>(); for (Rule rule : rules) { result.put(rule, rule.evaluate()); diff --git a/easyrules-core/src/test/java/org/easyrules/core/DefaultRulesEngineTest.java b/easyrules-core/src/test/java/org/easyrules/core/DefaultRulesEngineTest.java index 5e63007..773b5e5 100644 --- a/easyrules-core/src/test/java/org/easyrules/core/DefaultRulesEngineTest.java +++ b/easyrules-core/src/test/java/org/easyrules/core/DefaultRulesEngineTest.java @@ -10,8 +10,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InOrder; -import org.mockito.Mock; +import org.mockito.*; import org.mockito.runners.MockitoJUnitRunner; import java.util.Map; @@ -85,6 +84,22 @@ public class DefaultRulesEngineTest { inOrder.verify(anotherRule).execute(); } + @Test + public void rulesMustBeCheckedInTheirNaturalOrder() throws Exception { + when(rule.evaluate()).thenReturn(true); + when(anotherRule.evaluate()).thenReturn(true); + when(rule.compareTo(anotherRule)).thenReturn(-1); + when(anotherRule.compareTo(rule)).thenReturn(1); + rulesEngine.registerRule(rule); + rulesEngine.registerRule(anotherRule); + + rulesEngine.checkRules(); + + InOrder inOrder = inOrder(rule, anotherRule); + inOrder.verify(rule).evaluate(); + inOrder.verify(anotherRule).evaluate(); + } + @Test public void actionsMustBeExecutedInTheDefinedOrder() { rulesEngine.registerRule(annotatedRule);