issue #40 : checkRules must take into account rules order

pull/55/head
Mahmoud Ben Hassine 9 years ago
parent 8e4dfbd8b2
commit 804d9be98a

@ -122,6 +122,7 @@ class DefaultRulesEngine implements RulesEngine {
@Override @Override
public Map<Rule, Boolean> checkRules() { public Map<Rule, Boolean> checkRules() {
LOGGER.info("Checking rules"); LOGGER.info("Checking rules");
sortRules();
Map<Rule, Boolean> result = new HashMap<>(); Map<Rule, Boolean> result = new HashMap<>();
for (Rule rule : rules) { for (Rule rule : rules) {
result.put(rule, rule.evaluate()); result.put(rule, rule.evaluate());

@ -10,8 +10,7 @@ import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.InOrder; import org.mockito.*;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner; import org.mockito.runners.MockitoJUnitRunner;
import java.util.Map; import java.util.Map;
@ -85,6 +84,22 @@ public class DefaultRulesEngineTest {
inOrder.verify(anotherRule).execute(); 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 @Test
public void actionsMustBeExecutedInTheDefinedOrder() { public void actionsMustBeExecutedInTheDefinedOrder() {
rulesEngine.registerRule(annotatedRule); rulesEngine.registerRule(annotatedRule);

Loading…
Cancel
Save