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

Loading…
Cancel
Save