@Test public void testEventModel() throws Exception { final KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_EventModel.drl")); final KieSession wm = createKnowledgeSession(kbase); final RuleRuntimeEventListener wmel = mock(RuleRuntimeEventListener.class); wm.addEventListener(wmel); final Cheese stilton = new Cheese("stilton", 15); final FactHandle stiltonHandle = wm.insert(stilton); final ArgumentCaptor<ObjectInsertedEvent> oic = ArgumentCaptor.forClass(org.kie.api.event.rule.ObjectInsertedEvent.class); verify(wmel).objectInserted(oic.capture()); assertSame(stiltonHandle, oic.getValue().getFactHandle()); wm.update(stiltonHandle, stilton); final ArgumentCaptor<org.kie.api.event.rule.ObjectUpdatedEvent> ouc = ArgumentCaptor.forClass(org.kie.api.event.rule.ObjectUpdatedEvent.class); verify(wmel).objectUpdated(ouc.capture()); assertSame(stiltonHandle, ouc.getValue().getFactHandle()); wm.delete(stiltonHandle); final ArgumentCaptor<ObjectDeletedEvent> orc = ArgumentCaptor.forClass(ObjectDeletedEvent.class); verify(wmel).objectDeleted(orc.capture()); assertSame(stiltonHandle, orc.getValue().getFactHandle()); }
@Test public void testSessionInsertExchange() throws Exception { Person person = new Person(); person.setName("Bob"); template.sendBody("direct:test-exchange", person); ArgumentCaptor<ObjectInsertedEvent> oie = ArgumentCaptor.forClass(ObjectInsertedEvent.class); verify(wmel).objectInserted(oie.capture()); assertThat((Person)((Exchange)oie.getValue().getObject()).getIn().getBody(), is(person)); }
@Test public void testSessionInsertExchange() throws Exception { Person person = new Person(); person.setName( "Bob" ); template.sendBody( "direct:test-exchange", person ); ArgumentCaptor<ObjectInsertedEvent> oie = ArgumentCaptor.forClass( ObjectInsertedEvent.class ); verify( wmel ).objectInserted( oie.capture() ); assertThat( (Person) ((Exchange) oie.getValue().getObject()).getIn().getBody(), is( person ) ); }
@Test public void testSessionInsertMessage() throws Exception { Person person = new Person(); person.setName( "Bob" ); template.sendBody( "direct:test-message", person ); ArgumentCaptor<ObjectInsertedEvent> oie = ArgumentCaptor.forClass( ObjectInsertedEvent.class ); verify( wmel ).objectInserted( oie.capture() ); assertThat( (Person) ((Message) oie.getValue().getObject()).getBody(), is( person ) ); }
@Test public void testSessionInsertMessage() throws Exception { Person person = new Person(); person.setName("Bob"); template.sendBody("direct:test-message", person); ArgumentCaptor<ObjectInsertedEvent> oie = ArgumentCaptor.forClass(ObjectInsertedEvent.class); verify(wmel).objectInserted(oie.capture()); assertThat((Person)((Message)oie.getValue().getObject()).getBody(), is(person)); }
@Test public void testSessionInsert() throws Exception { Person person = new Person(); person.setName("Bob"); template.sendBody("direct:test-no-ep", person); ArgumentCaptor<ObjectInsertedEvent> oie = ArgumentCaptor.forClass(ObjectInsertedEvent.class); verify(wmel).objectInserted(oie.capture()); assertThat((Person)oie.getValue().getObject(), is(person)); }
@Test public void testSessionInsert() throws Exception { Person person = new Person(); person.setName( "Bob" ); template.sendBody( "direct:test-no-ep", person ); ArgumentCaptor<ObjectInsertedEvent> oie = ArgumentCaptor.forClass( ObjectInsertedEvent.class ); verify( wmel ).objectInserted( oie.capture() ); assertThat( (Person) oie.getValue().getObject(), is( person ) ); }
@Test public void testSessionInsertEntryPoint() throws Exception { Person person = new Person(); person.setName("Bob"); template.sendBody("direct:test-with-ep", person); ArgumentCaptor<ObjectInsertedEvent> oie = ArgumentCaptor.forClass(ObjectInsertedEvent.class); verify(wmel).objectInserted(oie.capture()); assertThat((Person)oie.getValue().getObject(), is(person)); }
@Test public void testSessionInsertEntryPoint() throws Exception { Person person = new Person(); person.setName( "Bob" ); template.sendBody( "direct:test-with-ep", person ); ArgumentCaptor<ObjectInsertedEvent> oie = ArgumentCaptor.forClass( ObjectInsertedEvent.class ); verify( wmel ).objectInserted( oie.capture() ); assertThat( (Person) oie.getValue().getObject(), is( person ) ); }
@Test public void testRuleChainingWithLogicalInserts() throws Exception { KnowledgeBase kbase = loadKnowledgeBase( "test_RuleChaining.drl" ); StatefulKnowledgeSession ksession = createKnowledgeSession( kbase ); // create working memory mock listener RuleRuntimeEventListener wml = Mockito.mock( RuleRuntimeEventListener.class ); org.kie.api.event.rule.AgendaEventListener ael = Mockito.mock( org.kie.api.event.rule.AgendaEventListener.class ); ksession.addEventListener( wml ); ksession.addEventListener( ael ); int fired = ksession.fireAllRules(); assertEquals( 3, fired ); // capture the arguments and check that the rules fired in the proper sequence ArgumentCaptor<org.kie.api.event.rule.AfterMatchFiredEvent> actvs = ArgumentCaptor.forClass( org.kie.api.event.rule.AfterMatchFiredEvent.class ); verify( ael, times( 3 ) ).afterMatchFired(actvs.capture()); List<org.kie.api.event.rule.AfterMatchFiredEvent> values = actvs.getAllValues(); assertThat( values.get( 0 ).getMatch().getRule().getName(), is( "init" ) ); assertThat( values.get( 1 ).getMatch().getRule().getName(), is( "r1" ) ); assertThat( values.get( 2 ).getMatch().getRule().getName(), is( "r2" ) ); verify( ael, never() ).matchCancelled(any(org.kie.api.event.rule.MatchCancelledEvent.class)); verify( wml, times( 2 ) ).objectInserted( any( org.kie.api.event.rule.ObjectInsertedEvent.class ) ); verify( wml, never() ).objectDeleted(any(ObjectDeletedEvent.class)); }
@Test public void testEventModel() throws Exception { KnowledgeBase kbase = SerializationHelper.serializeObject( loadKnowledgeBase( "test_EventModel.drl" ) ); StatefulKnowledgeSession wm = createKnowledgeSession( kbase ); RuleRuntimeEventListener wmel = mock( RuleRuntimeEventListener.class ); wm.addEventListener( wmel ); final Cheese stilton = new Cheese( "stilton", 15 ); final FactHandle stiltonHandle = wm.insert( stilton ); ArgumentCaptor<org.kie.api.event.rule.ObjectInsertedEvent> oic = ArgumentCaptor.forClass( org.kie.api.event.rule.ObjectInsertedEvent.class ); verify( wmel ).objectInserted( oic.capture() ); assertSame( stiltonHandle, oic.getValue().getFactHandle() ); wm.update( stiltonHandle, stilton ); ArgumentCaptor<org.kie.api.event.rule.ObjectUpdatedEvent> ouc = ArgumentCaptor.forClass( org.kie.api.event.rule.ObjectUpdatedEvent.class ); verify( wmel ).objectUpdated( ouc.capture() ); assertSame( stiltonHandle, ouc.getValue().getFactHandle() ); wm.retract( stiltonHandle ); ArgumentCaptor<ObjectDeletedEvent> orc = ArgumentCaptor.forClass( ObjectDeletedEvent.class ); verify( wmel ).objectDeleted(orc.capture()); assertSame( stiltonHandle, orc.getValue().getFactHandle() ); }
@Test public void testAddRemoveListeners() throws Exception { final KnowledgeBase kbase = loadKnowledgeBase( "test_AddRemoveListeners.drl" ); StatefulKnowledgeSession ksession = createKnowledgeSession( kbase ); // creating listener as a jmock proxy final RuleRuntimeEventListener wmeListener = mock( RuleRuntimeEventListener.class ); ksession.addEventListener( wmeListener ); // listener will be notified of both facts insertion ksession.insert( new Cheese( "stilton" ) ); ksession.insert( wmeListener ); // firing rules will remove listener ksession.fireAllRules(); // inserting another object into the working memory, listener should NOT be notified, // since it is no longer listening. ksession.insert( new Cheese( "brie" ) ); verify( wmeListener, times( 2 ) ).objectInserted( any( org.kie.api.event.rule.ObjectInsertedEvent.class ) ); }