package org.dayatang.rule.examples;
import org.dayatang.rule.StatelessRuleService;
import org.dayatang.rule.impl.StatelessRuleServiceJsr94;
import org.drools.jsr94.rules.RuleServiceProviderImpl;
import org.junit.Test;
import java.util.*;
import static org.junit.Assert.assertEquals;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class JSR94Test {
private String ruleDrl = "/rule/Person.drl";
@Test
public void stateless() throws Exception {
// Execute rule
List<Person> objects = new ArrayList<Person>();
objects.add(new Person(1L, "chencao"));
StatelessRuleService instance = StatelessRuleServiceJsr94.builder()
.ruleServiceProvider(new RuleServiceProviderImpl())
.ruleSource(getClass().getResourceAsStream(ruleDrl))
.bulid();
// Execute rule
List statelessResults = instance.executeRules(Arrays.asList(new Person(1L, "chencao")));
// Validate
assertEquals(1, statelessResults.size());
Person p = (Person) statelessResults.get(0);
assertEquals(100, p.getId().longValue());
}
@Test
public void globalAndFunction() throws Exception {
// Prepare global parameter
List globalList = new ArrayList();
Map sessionProperties = new HashMap();
sessionProperties.put("list", globalList);
StatelessRuleService instance = StatelessRuleServiceJsr94.builder()
.ruleServiceProvider(new RuleServiceProviderImpl())
.ruleSource(getClass().getResourceAsStream(ruleDrl))
.sessionProperties(sessionProperties)
.bulid();
// Execute rule
Person firstPerson = new Person(3L, "chencao");
instance.executeRules(Arrays.asList(firstPerson));
// FirstPerson hasn't been changed
assertEquals(300, firstPerson.getId().longValue());
// Validate global
List global = (List) sessionProperties.get("list");
assertEquals(2, global.size());
Person p1 = (Person) global.get(0);
assertEquals(300, p1.getId().longValue());
Person p2 = (Person) global.get(1);
assertEquals(400, p2.getId().longValue());
assertEquals("pengmei", p2.getName());
}
}