Search in sources :

Example 21 with Person

use of org.kie.kogito.codegen.data.Person in project kogito-runtimes by kiegroup.

the class RuleUnitCompilerIT method testRuleUnitModify.

@ParameterizedTest
@EnumSource(SessionType.class)
public void testRuleUnitModify(SessionType sessionType) throws Exception {
    Application application = createApplication(sessionType, "org/kie/kogito/codegen/unit/RuleUnitModify.drl");
    AdultUnit adults = new AdultUnit();
    Person sofia = new Person("Sofia", 7);
    DataHandle dhSofia = adults.getPersons().add(sofia);
    RuleUnit<AdultUnit> unit = application.get(RuleUnits.class).create(AdultUnit.class);
    RuleUnitInstance<AdultUnit> instance = unit.createInstance(adults);
    assertEquals(2, instance.fire());
    assertTrue(adults.getResults().getResults().containsAll(asList("Sofia")));
}
Also used : RuleUnits(org.kie.kogito.rules.RuleUnits) AdultUnit(org.kie.kogito.codegen.unit.AdultUnit) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) DataHandle(org.kie.kogito.rules.DataHandle) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 22 with Person

use of org.kie.kogito.codegen.data.Person in project kogito-runtimes by kiegroup.

the class BusinessRuleUnitIT method testSettingOtherVariableFromAutoGeneratedRuleUnit.

@Test
public void testSettingOtherVariableFromAutoGeneratedRuleUnit() throws Exception {
    Map<AbstractCodegenIT.TYPE, List<String>> resourcesTypeMap = new HashMap<>();
    resourcesTypeMap.put(TYPE.PROCESS, Collections.singletonList("ruletask/ExampleGenerated.bpmn"));
    resourcesTypeMap.put(TYPE.RULES, Collections.singletonList("ruletask/Generated.drl"));
    Application app = generateCode(resourcesTypeMap);
    Process<? extends Model> process = app.get(Processes.class).processById("ruletask.ExampleGenerated");
    HashMap<String, Object> map = new HashMap<>();
    map.put("singleString", "hello");
    map.put("singlePerson", new Person("John", 50));
    Model model = process.createModel();
    model.fromMap(map);
    ProcessInstance<? extends Model> instance = process.createInstance(model);
    Model variables = instance.variables();
    Map<String, Object> result = variables.toMap();
    assertNull(result.get("emptyString"));
    assertNull(result.get("emptyPerson"));
    instance.start();
    result = instance.variables().toMap();
    Person john = new Person("John", 50);
    john.setAdult(true);
    assertEquals(john, result.get("singlePerson"));
    assertEquals("Now the life starts again", result.get("singleString"));
}
Also used : HashMap(java.util.HashMap) Processes(org.kie.kogito.process.Processes) Model(org.kie.kogito.Model) ArrayList(java.util.ArrayList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 23 with Person

use of org.kie.kogito.codegen.data.Person in project kogito-runtimes by kiegroup.

the class BusinessRuleUnitIT method testBasicBusinessRuleUnit.

@ParameterizedTest
@MethodSource("processes")
public void testBasicBusinessRuleUnit(String bpmnPath) throws Exception {
    Map<AbstractCodegenIT.TYPE, List<String>> resourcesTypeMap = new HashMap<>();
    resourcesTypeMap.put(TYPE.PROCESS, Collections.singletonList(bpmnPath));
    resourcesTypeMap.put(TYPE.RULES, Collections.singletonList("org/kie/kogito/codegen/tests/BusinessRuleUnit.drl"));
    Application app = generateCode(resourcesTypeMap);
    assertThat(app).isNotNull();
    Process<? extends Model> p = app.get(Processes.class).processById("BusinessRuleUnit");
    Model m = p.createModel();
    m.fromMap(Collections.singletonMap("person", new Person("john", 25)));
    ProcessInstance<?> processInstance = p.createInstance(m);
    processInstance.start();
    assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
    Model result = (Model) processInstance.variables();
    assertThat(result.toMap()).hasSize(1).containsKey("person");
    assertThat(result.toMap().get("person")).isNotNull().hasFieldOrPropertyWithValue("adult", true);
}
Also used : HashMap(java.util.HashMap) Model(org.kie.kogito.Model) ArrayList(java.util.ArrayList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) Processes(org.kie.kogito.process.Processes) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 24 with Person

use of org.kie.kogito.codegen.data.Person in project kogito-runtimes by kiegroup.

the class BusinessRuleUnitIT method testBasicBusinessRuleUnitControlledByUnitOfWork.

@ParameterizedTest
@MethodSource("processes")
public void testBasicBusinessRuleUnitControlledByUnitOfWork(String bpmnPath) throws Exception {
    Map<AbstractCodegenIT.TYPE, List<String>> resourcesTypeMap = new HashMap<>();
    resourcesTypeMap.put(TYPE.PROCESS, Collections.singletonList(bpmnPath));
    resourcesTypeMap.put(TYPE.RULES, Collections.singletonList("org/kie/kogito/codegen/tests/BusinessRuleUnit.drl"));
    Application app = generateCode(resourcesTypeMap);
    assertThat(app).isNotNull();
    final List<String> startedProcesses = new ArrayList<>();
    // add custom event listener that collects data
    app.config().get(ProcessConfig.class).processEventListeners().listeners().add(new DefaultKogitoProcessEventListener() {

        @Override
        public void beforeProcessStarted(ProcessStartedEvent event) {
            startedProcesses.add(((KogitoProcessInstance) event.getProcessInstance()).getStringId());
        }
    });
    UnitOfWork uow = app.unitOfWorkManager().newUnitOfWork();
    uow.start();
    Process<? extends Model> p = app.get(Processes.class).processById("BusinessRuleUnit");
    Model m = p.createModel();
    m.fromMap(Collections.singletonMap("person", new Person("john", 25)));
    ProcessInstance<?> processInstance = p.createInstance(m);
    processInstance.start();
    assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
    Model result = (Model) processInstance.variables();
    assertThat(result.toMap()).hasSize(1).containsKey("person");
    assertThat(result.toMap().get("person")).isNotNull().hasFieldOrPropertyWithValue("adult", true);
    // since the unit of work has not been finished yet not listeners where invoked
    assertThat(startedProcesses).hasSize(0);
    uow.end();
    // after unit of work has been ended listeners are invoked
    assertThat(startedProcesses).hasSize(1);
}
Also used : UnitOfWork(org.kie.kogito.uow.UnitOfWork) ProcessConfig(org.kie.kogito.process.ProcessConfig) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ProcessStartedEvent(org.kie.api.event.process.ProcessStartedEvent) DefaultKogitoProcessEventListener(org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener) Processes(org.kie.kogito.process.Processes) KogitoProcessInstance(org.kie.kogito.internal.process.runtime.KogitoProcessInstance) Model(org.kie.kogito.Model) ArrayList(java.util.ArrayList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 25 with Person

use of org.kie.kogito.codegen.data.Person in project kogito-runtimes by kiegroup.

the class BusinessRuleUnitIT method testBasicBusinessRuleUnitWithAgendaListener.

@ParameterizedTest
@MethodSource("processes")
public void testBasicBusinessRuleUnitWithAgendaListener(String bpmnPath) throws Exception {
    Map<AbstractCodegenIT.TYPE, List<String>> resourcesTypeMap = new HashMap<>();
    resourcesTypeMap.put(TYPE.PROCESS, Collections.singletonList(bpmnPath));
    resourcesTypeMap.put(TYPE.RULES, Collections.singletonList("org/kie/kogito/codegen/tests/BusinessRuleUnit.drl"));
    Application app = generateCode(resourcesTypeMap);
    assertThat(app).isNotNull();
    final AtomicInteger counter = new AtomicInteger();
    app.config().get(RuleConfig.class).ruleEventListeners().agendaListeners().add(new DefaultAgendaEventListener() {

        @Override
        public void afterMatchFired(AfterMatchFiredEvent event) {
            counter.incrementAndGet();
        }
    });
    Process<? extends Model> p = app.get(Processes.class).processById("BusinessRuleUnit");
    Model m = p.createModel();
    m.fromMap(Collections.singletonMap("person", new Person("john", 25)));
    ProcessInstance<?> processInstance = p.createInstance(m);
    processInstance.start();
    assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
    Model result = (Model) processInstance.variables();
    assertThat(result.toMap()).hasSize(1).containsKey("person");
    assertThat(result.toMap().get("person")).isNotNull().hasFieldOrPropertyWithValue("adult", true);
    assertThat(counter.get()).isEqualTo(1);
}
Also used : HashMap(java.util.HashMap) DefaultAgendaEventListener(org.drools.core.event.DefaultAgendaEventListener) Processes(org.kie.kogito.process.Processes) AfterMatchFiredEvent(org.kie.api.event.rule.AfterMatchFiredEvent) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Model(org.kie.kogito.Model) ArrayList(java.util.ArrayList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) RuleConfig(org.kie.kogito.rules.RuleConfig) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Aggregations

Person (org.kie.kogito.codegen.data.Person)32 Application (org.kie.kogito.Application)30 HashMap (java.util.HashMap)20 Test (org.junit.jupiter.api.Test)20 Model (org.kie.kogito.Model)20 Processes (org.kie.kogito.process.Processes)20 ArrayList (java.util.ArrayList)19 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)18 List (java.util.List)17 Arrays.asList (java.util.Arrays.asList)10 RuleUnits (org.kie.kogito.rules.RuleUnits)10 AdultUnit (org.kie.kogito.codegen.unit.AdultUnit)9 EnumSource (org.junit.jupiter.params.provider.EnumSource)8 DataHandle (org.kie.kogito.rules.DataHandle)5 UnitOfWork (org.kie.kogito.uow.UnitOfWork)5 MethodSource (org.junit.jupiter.params.provider.MethodSource)3 ProcessInstanceDataEvent (org.kie.kogito.event.process.ProcessInstanceDataEvent)3 WorkItem (org.kie.kogito.process.WorkItem)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2