/* * Copyright 2011 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.informer.rules; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.informer.*; import org.drools.io.ResourceFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.FactHandle; import org.drools.runtime.rule.Variable; import org.junit.Before; import org.junit.Test; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Collection; import java.util.Date; import static org.junit.Assert.*; public class StatusTest { private KnowledgeBase knowledgeBase; @Before public void setUp() throws Exception { KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); knowledgeBuilder.add(ResourceFactory.newClassPathResource("org/drools/informer/informer-changeset.xml"), ResourceType.CHANGE_SET); if (knowledgeBuilder.hasErrors()) { System.err.println(knowledgeBuilder.getErrors()); } assertFalse(knowledgeBuilder.hasErrors()); knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(); knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages()); } @Test public void testProgress() { StatefulKnowledgeSession knowledgeSession = knowledgeBase.newStatefulKnowledgeSession(); try { Questionnaire questionnaire = new Questionnaire("questionnaire"); Group group1 = new Group("group1"); Group group2 = new Group("group2"); Question question1 = new Question("question1"); question1.setAnswerType(Question.QuestionType.TYPE_TEXT); Question question2 = new Question("question2"); question2.setAnswerType(Question.QuestionType.TYPE_TEXT); Question question3 = new Question("question3"); question3.setAnswerType(Question.QuestionType.TYPE_TEXT); Question question4 = new Question("question4"); question4.setAnswerType(Question.QuestionType.TYPE_TEXT); Question question5 = new Question("question5"); question5.setAnswerType(Question.QuestionType.TYPE_TEXT); questionnaire.setItems(new String[]{group1.getId(),group2.getId()}); group1.setItems(new String[]{question1.getId(), question2.getId(), question3.getId() }); group2.setItems(new String[]{question4.getId(), question5.getId() }); FactHandle qhandle = knowledgeSession.insert( questionnaire ); knowledgeSession.insert( group1 ); knowledgeSession.insert( group2 ); knowledgeSession.insert( question1 ); knowledgeSession.insert( question2 ); knowledgeSession.insert( question3 ); knowledgeSession.insert( question4 ); knowledgeSession.insert( question5 ); knowledgeSession.fireAllRules(); Collection c = knowledgeSession.getObjects(); assertEquals( 0, knowledgeSession.getQueryResults("progress", questionnaire.getId(), Variable.v).iterator().next().get( "$percent" ) ); knowledgeSession.insert(new Answer(question1.getId(), "X")); knowledgeSession.fireAllRules(); assertEquals( 20, knowledgeSession.getQueryResults("progress", questionnaire.getId(), Variable.v).iterator().next().get( "$percent" ) ); knowledgeSession.insert( new Answer( question4.getId(), "Y" ) ); knowledgeSession.fireAllRules(); assertEquals( 40, knowledgeSession.getQueryResults("progress", questionnaire.getId(), Variable.v).iterator().next().get( "$percent" ) ); knowledgeSession.retract( qhandle ); knowledgeSession.fireAllRules(); c = knowledgeSession.getObjects(); // for ( Object o : c ) System.out.println( o ); // 5 questions, 2 groups, 3 invalidanswers. All progress info should have gone retracting the Questionnaire assertEquals( 5 + 2 + 3, c.size() ); } finally { knowledgeSession.dispose(); } } }