/** * Utility method to enrich the error message with. * * @param message * The error message * @param context * The failed execution context * @return Enriched error message */ private static String prefix(String message, ExecutionContext context) { return "Rule: \'" + context.getDefinition().getName() + "\' failed with error: " + message; }
@Test public void ruleWithConditionFailureExecution() throws RuleDefinitionException, RuleExecutionException { RuleDefinition ruleDefinition = Rules.define(RuleG.class); String inputStr = "hallo"; RuleInput input = new RuleInput(Tags.tag("A", inputStr)); RuleOutput output = ruleDefinition.execute(input, Collections.<String, Object> emptyMap()); assertThat(output.getRuleName(), equalTo(ruleDefinition.getName())); assertThat(output.getConditionFailures(), hasSize(1)); assertThat(output.getTags(), empty()); } }
objectUnderConstruction.setName(StringUtils.defaultIfEmpty(objectUnderConstruction.getName(), objectUnderConstruction.getImplementation().getName())); objectUnderConstruction.setDescription(StringUtils.defaultIfEmpty(objectUnderConstruction.getDescription(), EMPTY_DESCRIPTION));
@Test public void simpleRuleExecution() throws RuleDefinitionException, RuleExecutionException { RuleDefinition ruleDefinition = Rules.define(RuleA.class); String inputStr = "hallo"; RuleInput input = new RuleInput(Tags.tag(Tags.ROOT_TAG, inputStr)); RuleOutput output = ruleDefinition.execute(input, Collections.<String, Object> emptyMap()); assertThat(output.getRuleName(), equalTo(ruleDefinition.getName())); assertThat(output.getTags(), hasSize(1)); assertThat(output.getTags().iterator().next().getValue(), equalTo((Object) (inputStr + inputStr))); }
@Test public void ruleWithSessionVariableExecution() throws RuleDefinitionException, RuleExecutionException { RuleDefinition ruleDefinition = Rules.define(RuleWithSessionVariable.class); String inputStr = "hallo"; String sessionVar = "sessionVar"; RuleInput input = new RuleInput(Tags.tag(Tags.ROOT_TAG, inputStr)); RuleOutput output = ruleDefinition.execute(input, Collections.singletonMap(sessionVar, (Object) sessionVar)); assertThat(output.getRuleName(), equalTo(ruleDefinition.getName())); assertThat(output.getTags(), hasSize(1)); assertThat(output.getTags().iterator().next().getValue(), equalTo((Object) (inputStr + sessionVar))); }
@Test public void ruleWithConditionSuccessExecution() throws RuleDefinitionException, RuleExecutionException { RuleDefinition ruleDefinition = Rules.define(RuleF.class); String inputStrA = "hallo"; String inputStrE = "again"; Tag tagA = Tags.tag("A", inputStrA); Tag tagE = Tags.tag("E", inputStrE); RuleInput inputE = new RuleInput(tagE, Arrays.asList(tagA, tagE)); RuleOutput output = ruleDefinition.execute(inputE, Collections.<String, Object> emptyMap()); assertThat(output.getRuleName(), equalTo(ruleDefinition.getName())); assertThat(output.getTags(), hasSize(1)); assertThat(output.getTags().iterator().next().getValue(), equalTo((Object) (inputStrA + inputStrE))); }
@Test @SuppressWarnings("rawtypes") public void missingName() { builder.setActionMethod(actionMethod); builder.setConditionMethods(Arrays.asList(conditionMethod)); builder.setDescription("Some Description"); builder.setFireCondition(fireCondition); builder.setImplementation(RuleA.class); builder.setSessionVariableInjections(Arrays.asList(sessionVariableInjection)); builder.setTagInjections(Arrays.asList(tagInjection)); RuleDefinition ruleDefinition = builder.build(); assertThat(ruleDefinition.getActionMethod(), equalTo(actionMethod)); assertThat(ruleDefinition.getConditionMethods(), equalTo(Arrays.asList(conditionMethod))); assertThat(ruleDefinition.getDescription(), equalTo("Some Description")); assertThat(ruleDefinition.getFireCondition(), equalTo(fireCondition)); assertThat((Class) ruleDefinition.getImplementation(), equalTo((Class) RuleA.class)); assertThat(ruleDefinition.getName(), equalTo(RuleA.class.getCanonicalName())); assertThat(ruleDefinition.getSessionVariableInjections(), equalTo(Arrays.asList(sessionVariableInjection))); assertThat(ruleDefinition.getTagInjections(), equalTo(Arrays.asList(tagInjection))); }
@Test @SuppressWarnings("rawtypes") public void missingDescription() { builder.setActionMethod(actionMethod); builder.setConditionMethods(Arrays.asList(conditionMethod)); builder.setFireCondition(fireCondition); builder.setImplementation(RuleA.class); builder.setName("SomeName"); builder.setSessionVariableInjections(Arrays.asList(sessionVariableInjection)); builder.setTagInjections(Arrays.asList(tagInjection)); RuleDefinition ruleDefinition = builder.build(); assertThat(ruleDefinition.getActionMethod(), equalTo(actionMethod)); assertThat(ruleDefinition.getConditionMethods(), equalTo(Arrays.asList(conditionMethod))); assertThat(ruleDefinition.getDescription(), equalTo(RuleDefinition.EMPTY_DESCRIPTION)); assertThat(ruleDefinition.getFireCondition(), equalTo(fireCondition)); assertThat((Class) ruleDefinition.getImplementation(), equalTo((Class) RuleA.class)); assertThat(ruleDefinition.getName(), equalTo("SomeName")); assertThat(ruleDefinition.getSessionVariableInjections(), equalTo(Arrays.asList(sessionVariableInjection))); assertThat(ruleDefinition.getTagInjections(), equalTo(Arrays.asList(tagInjection))); }
@Test public void testWithRuleAnnotation() throws Exception { RuleDefinition definition = Rules.define(ValidAndAnnotated.class); assertThat(definition.getName(), is("AnnotatedRule")); assertThat(definition.getDescription(), is("Description")); assertThat(definition.getFireCondition().getTagTypes(), containsInAnyOrder("T1", "T2")); // Test tag injections TagInjection tagInjection = new TagInjection("T1", ValidAndAnnotated.class.getDeclaredField("t1AsTag"), TagValue.InjectionStrategy.BY_TAG); TagInjection tagInjection1 = new TagInjection("T2", ValidAndAnnotated.class.getDeclaredField("t2TagValue"), TagValue.InjectionStrategy.BY_VALUE); assertThat(definition.getTagInjections(), is(notNullValue())); assertThat(definition.getTagInjections(), containsInAnyOrder(tagInjection, tagInjection1)); // Test session variables SessionVariableInjection s1 = new SessionVariableInjection("baseline", false, ValidAndAnnotated.class.getDeclaredField("baseline")); SessionVariableInjection s2 = new SessionVariableInjection("baseline2", true, ValidAndAnnotated.class.getDeclaredField("baseline2")); assertThat(definition.getSessionVariableInjections(), containsInAnyOrder(s1, s2)); // Test action method assertThat(definition.getActionMethod(), is(new ActionMethod(ValidAndAnnotated.class.getDeclaredMethod("action"), "T2", Action.Quantity.SINGLE))); // Test condition method ConditionMethod conditionMethod = new ConditionMethod("myCondition", "No way out", ValidAndAnnotated.class.getDeclaredMethod("condition")); assertThat(definition.getConditionMethods(), containsInAnyOrder(conditionMethod)); }
@Test @SuppressWarnings("rawtypes") public void valid() { builder.setActionMethod(actionMethod); builder.setConditionMethods(Arrays.asList(conditionMethod)); builder.setDescription("Some Description"); builder.setFireCondition(fireCondition); builder.setImplementation(RuleA.class); builder.setName("SomeName"); builder.setSessionVariableInjections(Arrays.asList(sessionVariableInjection)); builder.setTagInjections(Arrays.asList(tagInjection)); RuleDefinition ruleDefinition = builder.build(); assertThat(ruleDefinition.getActionMethod(), equalTo(actionMethod)); assertThat(ruleDefinition.getConditionMethods(), equalTo(Arrays.asList(conditionMethod))); assertThat(ruleDefinition.getDescription(), equalTo("Some Description")); assertThat(ruleDefinition.getFireCondition(), equalTo(fireCondition)); assertThat((Class) ruleDefinition.getImplementation(), equalTo((Class) RuleA.class)); assertThat(ruleDefinition.getName(), equalTo("SomeName")); assertThat(ruleDefinition.getSessionVariableInjections(), equalTo(Arrays.asList(sessionVariableInjection))); assertThat(ruleDefinition.getTagInjections(), equalTo(Arrays.asList(tagInjection))); }
return new RuleOutput(getName(), getActionMethod().getResultTag(), conditionFailures, tags);
@Test @SuppressWarnings("rawtypes") public void emptyConditionMethods() { builder.setActionMethod(actionMethod); builder.setConditionMethods(Collections.<ConditionMethod> emptyList()); builder.setDescription("Some Description"); builder.setFireCondition(fireCondition); builder.setImplementation(RuleA.class); builder.setName("SomeName"); builder.setSessionVariableInjections(Arrays.asList(sessionVariableInjection)); builder.setTagInjections(Arrays.asList(tagInjection)); RuleDefinition ruleDefinition = builder.build(); assertThat(ruleDefinition.getActionMethod(), equalTo(actionMethod)); assertThat(ruleDefinition.getConditionMethods(), empty()); assertThat(ruleDefinition.getDescription(), equalTo("Some Description")); assertThat(ruleDefinition.getFireCondition(), equalTo(fireCondition)); assertThat((Class) ruleDefinition.getImplementation(), equalTo((Class) RuleA.class)); assertThat(ruleDefinition.getName(), equalTo("SomeName")); assertThat(ruleDefinition.getSessionVariableInjections(), equalTo(Arrays.asList(sessionVariableInjection))); assertThat(ruleDefinition.getTagInjections(), equalTo(Arrays.asList(tagInjection))); }
@Test @SuppressWarnings("rawtypes") public void emptySessionVariables() { builder.setActionMethod(actionMethod); builder.setConditionMethods(Arrays.asList(conditionMethod)); builder.setDescription("Some Description"); builder.setFireCondition(fireCondition); builder.setImplementation(RuleA.class); builder.setName("SomeName"); builder.setSessionVariableInjections(Collections.<SessionVariableInjection> emptyList()); builder.setTagInjections(Arrays.asList(tagInjection)); RuleDefinition ruleDefinition = builder.build(); assertThat(ruleDefinition.getActionMethod(), equalTo(actionMethod)); assertThat(ruleDefinition.getConditionMethods(), equalTo(Arrays.asList(conditionMethod))); assertThat(ruleDefinition.getDescription(), equalTo("Some Description")); assertThat(ruleDefinition.getFireCondition(), equalTo(fireCondition)); assertThat((Class) ruleDefinition.getImplementation(), equalTo((Class) RuleA.class)); assertThat(ruleDefinition.getName(), equalTo("SomeName")); assertThat(ruleDefinition.getSessionVariableInjections(), empty()); assertThat(ruleDefinition.getTagInjections(), equalTo(Arrays.asList(tagInjection))); }