package net.techreadiness.rules; import java.util.List; import java.util.Map; import net.techreadiness.service.exception.ServiceException; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderConfiguration; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.builder.conf.EvaluatorOption; import org.drools.io.ResourceFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import com.google.common.collect.Lists; import com.google.common.collect.Maps; public class TestEndsWithMapReferenceOperator { private static KnowledgeBase knowlegeBase; @BeforeClass public static void beforeClass() { KnowledgeBuilderConfiguration config = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(); config.setOption(EvaluatorOption.get("endsWith", new EndsWithEvaluatorDefinition())); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(config); kbuilder.add(ResourceFactory.newClassPathResource("net/techreadiness/rules/ends-with-map-reference.drl"), ResourceType.DRL); if (kbuilder.hasErrors()) { kbuilder.getErrors(); throw new ServiceException("Problem building cross field validation rules."); } knowlegeBase = KnowledgeBaseFactory.newKnowledgeBase(); knowlegeBase.addKnowledgePackages(kbuilder.getKnowledgePackages()); } @Test public void endsWithPositive() { StatefulKnowledgeSession session = knowlegeBase.newStatefulKnowledgeSession(); List<String> endedWith = Lists.newArrayList(); session.setGlobal("endedWith", endedWith); List<Map<String, String>> toTest = Lists.newArrayList(); Map<String, String> helloName = Maps.newHashMap(); helloName.put("code", "name hello"); helloName.put("someOtherCode", "hello"); toTest.add(helloName); for (Map<String, String> map : toTest) { session.insert(map); } session.fireAllRules(); session.dispose(); for (Map<String, String> map : toTest) { Assert.assertTrue(map.get("code") + ", ends with 'hello'.", endedWith.contains(map.get("code"))); } } @Test public void endsWithNegative() { StatefulKnowledgeSession session = knowlegeBase.newStatefulKnowledgeSession(); List<String> endedWith = Lists.newArrayList(); session.setGlobal("endedWith", endedWith); List<Map<String, String>> toTest = Lists.newArrayList(); Map<String, String> helloName = Maps.newHashMap(); helloName.put("string", "name helo"); helloName.put("someOtherCode", "hello"); toTest.add(helloName); for (Map<String, String> map : toTest) { session.insert(map); } session.fireAllRules(); session.dispose(); for (Map<String, String> map : toTest) { Assert.assertFalse(map.get("code") + ", does not end with 'hello'.", endedWith.contains(map.get("code"))); } } }