issue #38: add rules engine name in spring factory bean

pull/55/head
Mahmoud Ben Hassine 9 years ago
parent 1400431fc3
commit eeb64470d9

@ -31,6 +31,7 @@ import org.springframework.beans.factory.FactoryBean;
import java.util.List;
import static org.easyrules.core.RulesEngineBuilder.aNewRulesEngine;
import static org.easyrules.util.Utils.DEFAULT_ENGINE_NAME;
import static org.easyrules.util.Utils.DEFAULT_RULE_PRIORITY_THRESHOLD;
/**
@ -40,6 +41,8 @@ import static org.easyrules.util.Utils.DEFAULT_RULE_PRIORITY_THRESHOLD;
*/
public class RulesEngineFactoryBean implements FactoryBean<RulesEngine> {
private String name = DEFAULT_ENGINE_NAME;
private int priorityThreshold = DEFAULT_RULE_PRIORITY_THRESHOLD;
private boolean skipOnFirstAppliedRule;
@ -55,6 +58,7 @@ public class RulesEngineFactoryBean implements FactoryBean<RulesEngine> {
@Override
public RulesEngine getObject() {
RulesEngineBuilder rulesEngineBuilder = aNewRulesEngine()
.named(name)
.withSkipOnFirstAppliedRule(skipOnFirstAppliedRule)
.withSkipOnFirstFailedRule(skipOnFirstFailedRule)
.withRulePriorityThreshold(priorityThreshold)
@ -118,4 +122,8 @@ public class RulesEngineFactoryBean implements FactoryBean<RulesEngine> {
public void setSkipOnFirstFailedRule(boolean skipOnFirstFailedRule) {
this.skipOnFirstFailedRule = skipOnFirstFailedRule;
}
public void setName(String name) {
this.name = name;
}
}

@ -27,19 +27,19 @@ package org.easyrules.spring;
import org.easyrules.api.RuleListener;
import org.easyrules.api.RulesEngine;
import org.easyrules.core.BasicRule;
import org.easyrules.core.RulesEngineParameters;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.lang.reflect.Field;
import java.util.*;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.springframework.util.ReflectionUtils.*;
/**
* Test class for {@link RulesEngineFactoryBean}.
@ -49,6 +49,7 @@ import static org.springframework.util.ReflectionUtils.*;
@RunWith(MockitoJUnitRunner.class)
public class RulesEngineFactoryBeanTest {
public static final String NAME = "myRulesEngine";
public static final int RULE_PRIORITY_THRESHOLD = 10;
@Mock
@ -57,6 +58,8 @@ public class RulesEngineFactoryBeanTest {
@Mock
private RuleListener ruleListener;
private String name;
private int priorityThreshold;
private boolean skipOnFirstAppliedRule;
@ -69,6 +72,7 @@ public class RulesEngineFactoryBeanTest {
@Before
public void setUp() {
name = NAME;
silentMode = true;
skipOnFirstFailedRule = true;
skipOnFirstAppliedRule = true;
@ -88,21 +92,18 @@ public class RulesEngineFactoryBeanTest {
rulesEngineFactoryBean.setSkipOnFirstAppliedRule(skipOnFirstAppliedRule);
rulesEngineFactoryBean.setSkipOnFirstFailedRule(skipOnFirstFailedRule);
rulesEngineFactoryBean.setSilentMode(silentMode);
rulesEngineFactoryBean.setName(name);
RulesEngine rulesEngine = rulesEngineFactoryBean.getObject();
assertThat(rulesEngine).isNotNull();
assertEquals(priorityThreshold, getFieldValue(rulesEngine.getParameters(), "priorityThreshold"));
assertEquals(skipOnFirstAppliedRule, getFieldValue(rulesEngine.getParameters(), "skipOnFirstAppliedRule"));
assertEquals(skipOnFirstFailedRule, getFieldValue(rulesEngine.getParameters(), "skipOnFirstFailedRule"));
assertEquals(new HashSet<>(expectedRules), new HashSet<>((Collection) getFieldValue(rulesEngine, "rules")));
assertEquals(expectedRuleListeners, getFieldValue(rulesEngine, "ruleListeners"));
}
private Object getFieldValue(Object object, String fieldName) {
Field field = findField(object.getClass(), fieldName);
makeAccessible(field);
return getField(field, object);
RulesEngineParameters rulesEngineParameters = rulesEngine.getParameters();
assertThat(rulesEngineParameters.getName()).isEqualTo(NAME);
assertThat(rulesEngineParameters.getPriorityThreshold()).isEqualTo(RULE_PRIORITY_THRESHOLD);
assertThat(rulesEngineParameters.isSkipOnFirstAppliedRule()).isTrue();
assertThat(rulesEngineParameters.isSkipOnFirstFailedRule()).isTrue();
assertThat(rulesEngine.getRules()).isEqualTo(new HashSet<>(expectedRules));
assertThat(rulesEngine.getRuleListeners()).isEqualTo(expectedRuleListeners);
}
@Test

Loading…
Cancel
Save