Search in sources :

Example 16 with Person

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

the class PublishEventIT method testBusinessRuleProcessStartToEndWithVariableTracked.

@Test
public void testBusinessRuleProcessStartToEndWithVariableTracked() throws Exception {
    Map<TYPE, List<String>> resourcesTypeMap = new HashMap<>();
    resourcesTypeMap.put(TYPE.PROCESS, Collections.singletonList("ruletask/BusinessRuleTaskVariableTags.bpmn2"));
    resourcesTypeMap.put(TYPE.RULES, Collections.singletonList("ruletask/BusinessRuleTask.drl"));
    Application app = generateCode(resourcesTypeMap);
    assertThat(app).isNotNull();
    TestEventPublisher publisher = new TestEventPublisher();
    app.unitOfWorkManager().eventManager().setService("http://myhost");
    app.unitOfWorkManager().eventManager().addPublisher(publisher);
    UnitOfWork uow = app.unitOfWorkManager().newUnitOfWork();
    uow.start();
    Process<? extends Model> p = app.get(Processes.class).processById("BusinessRuleTask");
    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);
    uow.end();
    List<DataEvent<?>> events = publisher.extract();
    assertThat(events).isNotNull().hasSize(3);
    DataEvent<?> event = events.get(0);
    assertThat(event).isInstanceOf(ProcessInstanceDataEvent.class);
    ProcessInstanceDataEvent processDataEvent = (ProcessInstanceDataEvent) event;
    assertThat(processDataEvent.getKogitoProcessinstanceId()).isNotNull();
    assertThat(processDataEvent.getKogitoParentProcessinstanceId()).isNull();
    assertThat(processDataEvent.getKogitoRootProcessinstanceId()).isNull();
    assertThat(processDataEvent.getKogitoProcessId()).isEqualTo("BusinessRuleTask");
    assertThat(processDataEvent.getKogitoProcessinstanceState()).isEqualTo("2");
    assertThat(processDataEvent.getSource().toString()).isEqualTo("http://myhost/BusinessRuleTask");
    ProcessInstanceEventBody body = assertProcessInstanceEvent(events.get(0), "BusinessRuleTask", "Default Process", 2);
    assertThat(body.getNodeInstances()).hasSize(3).extractingResultOf("getNodeType").contains("StartNode", "RuleSetNode", "EndNode");
    assertThat(body.getNodeInstances()).extractingResultOf("getTriggerTime").allMatch(v -> v != null);
    assertThat(body.getNodeInstances()).extractingResultOf("getLeaveTime").allMatch(v -> v != null);
    assertThat(body.getVariables()).hasSize(1).containsKey("person");
    assertThat(body.getVariables().get("person")).isNotNull().hasFieldOrPropertyWithValue("adult", true);
    event = events.get(1);
    assertThat(event).isInstanceOf(VariableInstanceDataEvent.class);
    VariableInstanceDataEvent variableDataEvent = (VariableInstanceDataEvent) event;
    assertThat(variableDataEvent.getKogitoProcessinstanceId()).isNotNull();
    assertThat(variableDataEvent.getKogitoRootProcessId()).isNull();
    assertThat(variableDataEvent.getKogitoRootProcessinstanceId()).isNull();
    assertThat(variableDataEvent.getKogitoProcessId()).isEqualTo("BusinessRuleTask");
    // first is event created based on process start so no node associated
    VariableInstanceEventBody variableEventBody = variableDataEvent.getData();
    assertThat(variableEventBody).isNotNull();
    assertThat(variableEventBody.getChangeDate()).isNotNull();
    assertThat(variableEventBody.getProcessInstanceId()).isEqualTo(variableDataEvent.getKogitoProcessinstanceId());
    assertThat(variableEventBody.getProcessId()).isEqualTo("BusinessRuleTask");
    assertThat(variableEventBody.getRootProcessId()).isNull();
    assertThat(variableEventBody.getRootProcessInstanceId()).isNull();
    assertThat(variableEventBody.getVariableName()).isEqualTo("person");
    assertThat(variableEventBody.getVariableValue()).isNotNull();
    assertThat(variableEventBody.getVariablePreviousValue()).isNull();
    assertThat(variableEventBody.getChangedByNodeId()).isNull();
    assertThat(variableEventBody.getChangedByNodeName()).isNull();
    assertThat(variableEventBody.getChangedByNodeType()).isNull();
    assertThat(variableEventBody.getChangedByUser()).isNull();
    event = events.get(2);
    assertThat(event).isInstanceOf(VariableInstanceDataEvent.class);
    variableDataEvent = (VariableInstanceDataEvent) event;
    assertThat(variableDataEvent.getKogitoProcessinstanceId()).isNotNull();
    assertThat(variableDataEvent.getKogitoRootProcessId()).isNull();
    assertThat(variableDataEvent.getKogitoRootProcessinstanceId()).isNull();
    assertThat(variableDataEvent.getKogitoProcessId()).isEqualTo("BusinessRuleTask");
    // next is event created based on business rule task so node associated
    variableEventBody = variableDataEvent.getData();
    assertThat(variableEventBody).isNotNull();
    assertThat(variableEventBody.getChangeDate()).isNotNull();
    assertThat(variableEventBody.getProcessInstanceId()).isEqualTo(variableDataEvent.getKogitoProcessinstanceId());
    assertThat(variableEventBody.getProcessId()).isEqualTo("BusinessRuleTask");
    assertThat(variableEventBody.getRootProcessId()).isNull();
    assertThat(variableEventBody.getRootProcessInstanceId()).isNull();
    assertThat(variableEventBody.getVariableName()).isEqualTo("person");
    assertThat(variableEventBody.getVariableValue()).isNotNull();
    assertThat(variableEventBody.getVariablePreviousValue()).isNotNull();
    assertThat(variableEventBody.getChangedByNodeId()).isEqualTo("BusinessRuleTask_2");
    assertThat(variableEventBody.getChangedByNodeName()).isEqualTo("Business Rule Task");
    assertThat(variableEventBody.getChangedByNodeType()).isEqualTo("RuleSetNode");
    assertThat(variableEventBody.getChangedByUser()).isNull();
}
Also used : UnitOfWork(org.kie.kogito.uow.UnitOfWork) HashMap(java.util.HashMap) ProcessInstanceEventBody(org.kie.kogito.event.process.ProcessInstanceEventBody) UserTaskInstanceDataEvent(org.kie.kogito.event.process.UserTaskInstanceDataEvent) VariableInstanceDataEvent(org.kie.kogito.event.process.VariableInstanceDataEvent) ProcessInstanceDataEvent(org.kie.kogito.event.process.ProcessInstanceDataEvent) DataEvent(org.kie.kogito.event.DataEvent) Processes(org.kie.kogito.process.Processes) VariableInstanceDataEvent(org.kie.kogito.event.process.VariableInstanceDataEvent) Model(org.kie.kogito.Model) ArrayList(java.util.ArrayList) List(java.util.List) ProcessInstanceDataEvent(org.kie.kogito.event.process.ProcessInstanceDataEvent) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) VariableInstanceEventBody(org.kie.kogito.event.process.VariableInstanceEventBody) Test(org.junit.jupiter.api.Test)

Example 17 with Person

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

the class PublishEventIT method testBusinessRuleProcessStartToEndAbortOfUoW.

@Test
public void testBusinessRuleProcessStartToEndAbortOfUoW() throws Exception {
    Map<TYPE, List<String>> resourcesTypeMap = new HashMap<>();
    resourcesTypeMap.put(TYPE.PROCESS, Collections.singletonList("ruletask/BusinessRuleTask.bpmn2"));
    resourcesTypeMap.put(TYPE.RULES, Collections.singletonList("ruletask/BusinessRuleTask.drl"));
    Application app = generateCode(resourcesTypeMap);
    assertThat(app).isNotNull();
    TestEventPublisher publisher = new TestEventPublisher();
    app.unitOfWorkManager().eventManager().setService("http://myhost");
    app.unitOfWorkManager().eventManager().addPublisher(publisher);
    UnitOfWork uow = app.unitOfWorkManager().newUnitOfWork();
    uow.start();
    Process<? extends Model> p = app.get(Processes.class).processById("BusinessRuleTask");
    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);
    uow.abort();
    List<DataEvent<?>> events = publisher.extract();
    assertThat(events).isNotNull().hasSize(0);
}
Also used : UnitOfWork(org.kie.kogito.uow.UnitOfWork) HashMap(java.util.HashMap) UserTaskInstanceDataEvent(org.kie.kogito.event.process.UserTaskInstanceDataEvent) VariableInstanceDataEvent(org.kie.kogito.event.process.VariableInstanceDataEvent) ProcessInstanceDataEvent(org.kie.kogito.event.process.ProcessInstanceDataEvent) DataEvent(org.kie.kogito.event.DataEvent) Processes(org.kie.kogito.process.Processes) Model(org.kie.kogito.Model) ArrayList(java.util.ArrayList) List(java.util.List) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) Test(org.junit.jupiter.api.Test)

Example 18 with Person

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

the class PublishEventIT method testBusinessRuleProcessStartToEnd.

@Test
public void testBusinessRuleProcessStartToEnd() throws Exception {
    Map<TYPE, List<String>> resourcesTypeMap = new HashMap<>();
    resourcesTypeMap.put(TYPE.PROCESS, Collections.singletonList("ruletask/BusinessRuleTask.bpmn2"));
    resourcesTypeMap.put(TYPE.RULES, Collections.singletonList("ruletask/BusinessRuleTask.drl"));
    Application app = generateCode(resourcesTypeMap);
    assertThat(app).isNotNull();
    TestEventPublisher publisher = new TestEventPublisher();
    app.unitOfWorkManager().eventManager().setService("http://myhost");
    app.unitOfWorkManager().eventManager().addPublisher(publisher);
    UnitOfWork uow = app.unitOfWorkManager().newUnitOfWork();
    uow.start();
    Process<? extends Model> p = app.get(Processes.class).processById("BusinessRuleTask");
    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);
    uow.end();
    ProcessInstanceDataEvent processDataEvent = publisher.extract().stream().filter(ProcessInstanceDataEvent.class::isInstance).map(ProcessInstanceDataEvent.class::cast).findFirst().orElseThrow();
    assertThat(processDataEvent.getKogitoProcessinstanceId()).isNotNull();
    assertThat(processDataEvent.getKogitoParentProcessinstanceId()).isNull();
    assertThat(processDataEvent.getKogitoRootProcessinstanceId()).isNull();
    assertThat(processDataEvent.getKogitoProcessId()).isEqualTo("BusinessRuleTask");
    assertThat(processDataEvent.getKogitoProcessinstanceState()).isEqualTo("2");
    assertThat(processDataEvent.getSource().toString()).isEqualTo("http://myhost/BusinessRuleTask");
    ProcessInstanceEventBody body = assertProcessInstanceEvent(processDataEvent, "BusinessRuleTask", "Default Process", 2);
    assertThat(body.getNodeInstances()).hasSize(3).extractingResultOf("getNodeType").contains("StartNode", "RuleSetNode", "EndNode");
    assertThat(body.getNodeInstances()).extractingResultOf("getTriggerTime").allMatch(v -> v != null);
    assertThat(body.getNodeInstances()).extractingResultOf("getLeaveTime").allMatch(v -> v != null);
    assertThat(body.getVariables()).hasSize(1).containsKey("person");
    assertThat(body.getVariables().get("person")).isNotNull().hasFieldOrPropertyWithValue("adult", true);
}
Also used : UnitOfWork(org.kie.kogito.uow.UnitOfWork) HashMap(java.util.HashMap) ProcessInstanceEventBody(org.kie.kogito.event.process.ProcessInstanceEventBody) Processes(org.kie.kogito.process.Processes) Model(org.kie.kogito.Model) ArrayList(java.util.ArrayList) List(java.util.List) ProcessInstanceDataEvent(org.kie.kogito.event.process.ProcessInstanceDataEvent) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) Test(org.junit.jupiter.api.Test)

Example 19 with Person

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

the class UserTaskIT method testUserTaskWithIOexpressionProcess.

@Test
public void testUserTaskWithIOexpressionProcess() throws Exception {
    Application app = generateCodeProcessesOnly("usertask/UserTaskWithIOexpression.bpmn2");
    assertThat(app).isNotNull();
    Process<? extends Model> p = app.get(Processes.class).processById("UserTask");
    Model m = p.createModel();
    Map<String, Object> parameters = new HashMap<>();
    parameters.put("person", new Person("john", 0));
    m.fromMap(parameters);
    ProcessInstance<?> processInstance = p.createInstance(m);
    processInstance.start();
    assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
    List<WorkItem> workItems = processInstance.workItems(securityPolicy);
    assertEquals(1, workItems.size());
    assertEquals("Hello", workItems.get(0).getName());
    assertEquals("john", workItems.get(0).getParameters().get("personName"));
    processInstance.completeWorkItem(workItems.get(0).getId(), Collections.singletonMap("personAge", 50), securityPolicy);
    assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
    Model output = (Model) processInstance.variables();
    Person person = (Person) output.toMap().get("person");
    assertEquals(50, person.getAge());
}
Also used : HashMap(java.util.HashMap) Model(org.kie.kogito.Model) Processes(org.kie.kogito.process.Processes) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) WorkItem(org.kie.kogito.process.WorkItem) Test(org.junit.jupiter.api.Test)

Example 20 with Person

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

the class AnnotatedRuleUnitCompilerIT method testAnnotatedRuleUnit.

@Test
public void testAnnotatedRuleUnit() throws Exception {
    Application application = generateRulesFromJava("org/kie/kogito/codegen/unit/AnnotatedRules.java");
    assertNotNull(application);
    AnnotatedRules adults = new AnnotatedRules();
    adults.getPersons().add(new Person("Mario", 45));
    adults.getPersons().add(new Person("Marilena", 47));
    Person sofia = new Person("Sofia", 7);
    DataHandle dhSofia = adults.getPersons().add(sofia);
    RuleUnit<AnnotatedRules> unit = application.get(RuleUnits.class).create(AnnotatedRules.class);
    RuleUnitInstance<AnnotatedRules> instance = unit.createInstance(adults);
    assertNotNull(instance);
}
Also used : AnnotatedRules(org.kie.kogito.codegen.unit.AnnotatedRules) RuleUnits(org.kie.kogito.rules.RuleUnits) Application(org.kie.kogito.Application) Person(org.kie.kogito.codegen.data.Person) DataHandle(org.kie.kogito.rules.DataHandle) Test(org.junit.jupiter.api.Test)

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