package org.drools.integrationtests;
import junit.framework.TestCase;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.Order;
import org.drools.OrderItem;
import org.drools.Order.OrderStatus;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.mockito.Mockito;
public class MiscTest extends TestCase {
public void testModifyWithRuleflowAndSubNetwork() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( "test_ModifyWithRuleflowAndSubNetwork.drl",
getClass() ),
ResourceType.DRL );
kbuilder.add( ResourceFactory.newClassPathResource( "test_modifyWithRuleflowAndSubnetwork.rf",
getClass() ),
ResourceType.DRF );
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if ( errors.size() > 0 ) {
for ( KnowledgeBuilderError error : errors ) {
System.err.println( error );
}
throw new IllegalArgumentException( "Could not parse knowledge." );
}
assertFalse( kbuilder.hasErrors() );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
// create working memory mock listener
org.drools.event.rule.WorkingMemoryEventListener wml = Mockito.mock( org.drools.event.rule.WorkingMemoryEventListener.class );
org.drools.event.rule.AgendaEventListener ael = Mockito.mock( org.drools.event.rule.AgendaEventListener.class );
ksession.addEventListener( wml );
ksession.addEventListener( ael );
Order order = new Order( 1,
"bob" );
OrderItem item = new OrderItem( order,
1 );
order.addItem( item );
order.setStatus( new OrderStatus() );
order.getStatus().setActive( true );
org.drools.runtime.rule.FactHandle orderFH = ksession.insert( order );
Order order2 = new Order( 2,
"bob" );
OrderItem item2 = new OrderItem( order,
2 );
order2.addItem( item2 );
order2.setStatus( new OrderStatus() );
order2.getStatus().setActive( true );
org.drools.runtime.rule.FactHandle order2FH = ksession.insert( order2 );
ksession.startProcess( "ruleflow" );
int fired = ksession.fireAllRules();
assertEquals( 4,
fired );
// capture the arguments and check that the retracts happened
// ArgumentCaptor<org.drools.event.rule.ObjectRetractedEvent> retracts = ArgumentCaptor.forClass(org.drools.event.rule.ObjectRetractedEvent.class);
// verify( wml, times(2) ).objectRetracted( retracts.capture() );
// List<org.drools.event.rule.ObjectRetractedEvent> values = retracts.getAllValues();
// assertThat( values.get( 0 ).getFactHandle(), is( personFH ) );
// assertThat( values.get( 1 ).getFactHandle(), is( petFH ) );
}
}