/*
* 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;
import org.drools.agent.KnowledgeAgent;
import org.drools.agent.KnowledgeAgentConfiguration;
import org.drools.agent.KnowledgeAgentFactory;
import org.drools.agent.impl.PrintStreamSystemEventListener;
import org.drools.builder.ResourceType;
import org.drools.core.util.Iterator;
import org.drools.informer.generator.annotations.QuestionMark;
import org.drools.io.Resource;
import org.drools.io.impl.ChangeSetImpl;
import org.drools.io.impl.ClassPathResource;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.QueryResultsRow;
import org.junit.Test;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Collection;
import static junit.framework.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class QuestionStatusTest {
@Test
public void testValidityStatus() throws NoSuchFieldException {
KnowledgeAgentConfiguration kaConfig = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
kaConfig.setProperty("drools.agent.newInstance","false");
KnowledgeAgent kAgent = KnowledgeAgentFactory.newKnowledgeAgent("testAnnotationKA",kaConfig);
kAgent.setSystemEventListener( new PrintStreamSystemEventListener());
ChangeSetImpl changeSet = new ChangeSetImpl();
ClassPathResource res1 = new ClassPathResource("org/drools/informer/informer-changeset.xml");
res1.setResourceType(ResourceType.CHANGE_SET);
changeSet.setResourcesAdded(Arrays.asList((Resource) res1));
kAgent.applyChangeSet(changeSet);
StatefulKnowledgeSession kSession = kAgent.getKnowledgeBase().newStatefulKnowledgeSession();
kSession.setGlobal("kAgent",kAgent);
Person p1 = new Person("0001",null,18);
kSession.insert(p1);
kSession.fireAllRules();
assertEquals( 5, kSession.getQueryResults("invalidAnswers").size() );
assertEquals( 1, kSession.getQueryResults("answeredQuestions").size() );
assertEquals( 0, kSession.getQueryResults("missingAnswers").size() );
Answer ans = new Answer("age",p1.getQuestionnaireId(),"44");
kSession.insert(ans);
kSession.fireAllRules();
assertEquals( 5, kSession.getQueryResults("invalidAnswers").size() );
assertEquals( 1, kSession.getQueryResults("answeredQuestions").size() );
assertEquals( 0, kSession.getQueryResults("missingAnswers").size() );
Answer ans2 = new Answer("name",p1.getQuestionnaireId(),"joe");
kSession.insert(ans2);
kSession.fireAllRules();
assertEquals( 4, kSession.getQueryResults("invalidAnswers").size() );
assertEquals( 2, kSession.getQueryResults("answeredQuestions").size() );
assertEquals( 0, kSession.getQueryResults("missingAnswers").size() );
Answer ans3 = new Answer("age",p1.getQuestionnaireId(),"null");
kSession.insert(ans3);
kSession.fireAllRules();
assertEquals( 4, kSession.getQueryResults("invalidAnswers").size() );
assertEquals( 1, kSession.getQueryResults("answeredQuestions").size() );
assertEquals( 1, kSession.getQueryResults("missingAnswers").size() );
Answer ans4 = new Answer("hobbies",p1.getQuestionnaireId(),"Reading");
kSession.insert(ans4);
kSession.fireAllRules();
assertEquals( 3, kSession.getQueryResults("invalidAnswers").size() );
assertEquals( 2, kSession.getQueryResults("answeredQuestions").size() );
assertEquals( 1, kSession.getQueryResults("missingAnswers").size() );
Answer ans5 = new Answer( "hobbies", p1.getQuestionnaireId(), null );
kSession.insert(ans5);
kSession.fireAllRules();
assertEquals( 4, kSession.getQueryResults("invalidAnswers").size() );
assertEquals( 1, kSession.getQueryResults("answeredQuestions").size() );
assertEquals( 1, kSession.getQueryResults("missingAnswers").size() );
System.out.println(p1);
// for ( Object o : kSession.getObjects() ) {
// System.err.println(o);
// }
//
// java.util.Iterator<QueryResultsRow> iter1 = kSession.getQueryResults("invalidAnswers").iterator();
// while ( iter1.hasNext() ) {
// System.out.println( "IA " + iter1.next().get("$ia") );
// }
//
// java.util.Iterator<QueryResultsRow> iter2 = kSession.getQueryResults("answeredQuestions").iterator();
// while ( iter2.hasNext() ) {
// System.out.println( "AQ " + iter2.next().get("question") );
// }
}
}