use of io.automatiko.engine.api.workflow.ProcessConfig in project automatiko-engine by automatiko-io.
the class OperationStateWorkflowsTest method testRestOperationStateWorkflow.
@Test
public void testRestOperationStateWorkflow() throws Exception {
ProcessConfig processConfig = ServerlessProcess.processConfig();
((DefaultWorkItemHandlerConfig) processConfig.workItemHandlers()).register("Service Task", new WorkItemHandler() {
@Override
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
System.out.println(workItem.getParameters());
ObjectMapper mapper = new ObjectMapper();
ObjectNode data = mapper.createObjectNode();
data.put("greeting", "test");
manager.completeWorkItem(workItem.getId(), Collections.singletonMap(JsonVariableScope.WORKFLOWDATA_KEY, data));
}
@Override
public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
}
});
ServerlessProcess process = ServerlessProcess.from(processConfig, new ClassPathResource("examples/greeting.json")).get(0);
assertThat(process).isNotNull();
JsonNode data = new ObjectMapper().readTree("{\n" + " \"person\": {\"name\" : \"john\"}\n" + "}");
ServerlessProcessInstance pi = (ServerlessProcessInstance) process.createInstance(ServerlessModel.from(data));
pi.start();
assertThat(pi.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
assertThat(pi.variables().toMap()).hasSize(2).containsKey("greeting").extracting("greeting").isEqualTo(new TextNode("test"));
}
use of io.automatiko.engine.api.workflow.ProcessConfig in project automatiko-engine by automatiko-io.
the class SwitchStateWorkflowsTest method testSwitchWithDataConditions.
@Test
public void testSwitchWithDataConditions() throws Exception {
ProcessConfig processConfig = ServerlessProcess.processConfig();
((DefaultWorkItemHandlerConfig) processConfig.workItemHandlers()).register("Service Task", new WorkItemHandler() {
@Override
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
ObjectMapper mapper = new ObjectMapper();
ObjectNode data = mapper.createObjectNode();
if ("emailStart".equals(workItem.getParameter("Operation"))) {
data.put("status", "accepted");
manager.completeWorkItem(workItem.getId(), Collections.singletonMap(JsonVariableScope.WORKFLOWDATA_KEY, data));
} else if ("emailRejection".equals(workItem.getParameter("Operation"))) {
data.put("status", "rejected");
manager.completeWorkItem(workItem.getId(), Collections.singletonMap(JsonVariableScope.WORKFLOWDATA_KEY, data));
}
}
@Override
public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
}
});
ServerlessProcess process = ServerlessProcess.from(processConfig, new ClassPathResource("switch-state/data-condition.json")).get(0);
assertThat(process).isNotNull();
JsonNode data = new ObjectMapper().readTree("{\"applicant\" : {\"name\":\"John\", \"age\":20}}");
ServerlessProcessInstance pi = (ServerlessProcessInstance) process.createInstance(ServerlessModel.from(data));
pi.start();
assertThat(pi.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
assertThat(pi.variables().toMap()).hasSize(2).containsKey("status").extracting("status").isEqualTo(new TextNode("accepted"));
data = new ObjectMapper().readTree("{\"applicant\" : {\"name\":\"Mary\", \"age\":10}}");
pi = (ServerlessProcessInstance) process.createInstance(ServerlessModel.from(data));
pi.start();
assertThat(pi.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
assertThat(pi.variables().toMap()).hasSize(2).containsKey("status").extracting("status").isEqualTo(new TextNode("rejected"));
}
use of io.automatiko.engine.api.workflow.ProcessConfig in project automatiko-engine by automatiko-io.
the class VariableTagsTest method testProcessWithRequiredVariable.
@Test
public void testProcessWithRequiredVariable() throws Exception {
TestWorkItemHandler workItemHandler = new TestWorkItemHandler("Human Task");
ProcessConfig config = config(workItemHandler);
BpmnProcess process = create(config, "variable-tags/approval-with-required-variable-tags.bpmn2");
Map<String, Object> parameters = new HashMap<>();
parameters.put("approver", "john");
ProcessInstance<BpmnVariables> instance = process.createInstance(BpmnVariables.create(parameters));
instance.start();
assertEquals(STATE_ACTIVE, instance.status());
WorkItem workItem = workItemHandler.getWorkItem();
assertNotNull(workItem);
instance.completeWorkItem(workItem.getId(), null);
workItem = workItemHandler.getWorkItem();
assertNotNull(workItem);
instance.completeWorkItem(workItem.getId(), null);
assertEquals(STATE_COMPLETED, instance.status());
}
use of io.automatiko.engine.api.workflow.ProcessConfig in project automatiko-engine by automatiko-io.
the class VariableTagsTest method testProcessWithMissingRequiredVariable.
@Test
public void testProcessWithMissingRequiredVariable() throws Exception {
TestWorkItemHandler workItemHandler = new TestWorkItemHandler("Human Task");
ProcessConfig config = config(workItemHandler);
BpmnProcess process = create(config, "variable-tags/approval-with-required-variable-tags.bpmn2");
assertThrows(VariableViolationException.class, () -> process.createInstance(BpmnVariables.create()));
}
use of io.automatiko.engine.api.workflow.ProcessConfig in project automatiko-engine by automatiko-io.
the class VariableTagsTest method testProcessWithCustomVariableTag.
@Test
public void testProcessWithCustomVariableTag() throws Exception {
TestWorkItemHandler workItemHandler = new TestWorkItemHandler("Human Task");
DefaultProcessEventListener listener = new DefaultProcessEventListener() {
@Override
public void beforeVariableChanged(ProcessVariableChangedEvent event) {
if (event.hasTag("onlyAdmin")) {
throw new VariableViolationException(event.getProcessInstance().getId(), event.getVariableId(), "Variable can only be set by admins");
}
}
};
ProcessConfig config = config(Collections.singletonList(workItemHandler), Collections.singletonList(listener));
BpmnProcess process = create(config, "variable-tags/approval-with-custom-variable-tags.bpmn2");
Map<String, Object> parameters = new HashMap<>();
parameters.put("approver", "john");
assertThrows(VariableViolationException.class, () -> process.createInstance(BpmnVariables.create(parameters)));
}
Aggregations