/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.server.integrationtests.jbpm; import java.util.Map; import org.junit.BeforeClass; import org.junit.Test; import org.kie.api.KieServices; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.definition.AssociatedEntitiesDefinition; import org.kie.server.api.model.definition.ProcessDefinition; import org.kie.server.api.model.definition.ServiceTasksDefinition; import org.kie.server.api.model.definition.SubProcessesDefinition; import org.kie.server.api.model.definition.TaskInputsDefinition; import org.kie.server.api.model.definition.TaskOutputsDefinition; import org.kie.server.api.model.definition.UserTaskDefinition; import org.kie.server.api.model.definition.UserTaskDefinitionList; import org.kie.server.api.model.definition.VariablesDefinition; import org.kie.server.api.exception.KieServicesException; import static org.junit.Assert.*; import org.kie.server.integrationtests.shared.KieServerDeployer; public class ProcessDefinitionIntegrationTest extends JbpmKieServerBaseIntegrationTest { private static ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "definition-project", "1.0.0.Final"); @BeforeClass public static void buildAndDeployArtifacts() { KieServerDeployer.buildAndDeployCommonMavenParent(); KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/definition-project").getFile()); kieContainer = KieServices.Factory.get().newKieContainer(releaseId); createContainer(CONTAINER_ID, releaseId); } @Test public void testEvaluationProcessDefinition() { ProcessDefinition result = processClient.getProcessDefinition(CONTAINER_ID, PROCESS_ID_EVALUATION); assertNotNull(result); assertEquals(PROCESS_ID_EVALUATION, result.getId()); assertEquals("evaluation", result.getName()); assertEquals("org.jbpm", result.getPackageName()); assertEquals("1.0", result.getVersion()); assertEquals(CONTAINER_ID, result.getContainerId()); // assert variable definitions Map<String, String> variables = result.getProcessVariables(); assertNotNull(variables); assertEquals(3, variables.size()); assertTrue(variables.containsKey("name")); assertTrue(variables.containsKey("item")); assertTrue(variables.containsKey("outcome")); assertEquals("String", variables.get("name")); assertEquals("java.util.List", variables.get("item")); assertEquals("Boolean", variables.get("outcome")); // assert associated entities - users and groups Map<String, String[]> entities = result.getAssociatedEntities(); assertNotNull(entities); assertTrue(entities.containsKey("Evaluate items?")); String[] evaluateItemsEntities = entities.get("Evaluate items?"); assertEquals(2, evaluateItemsEntities.length); assertEquals(USER_YODA, evaluateItemsEntities[0]); assertEquals("HR,PM", evaluateItemsEntities[1]); // assert reusable subprocesses assertEquals(0, result.getReusableSubProcesses().size()); // assert services tasks assertEquals(1, result.getServiceTasks().size()); assertTrue(result.getServiceTasks().containsKey("Email results")); // assert type of the services task for 'Email results' name assertEquals("Email", result.getServiceTasks().get("Email results")); } @Test public void testCallEvaluationProcessDefinition() { ProcessDefinition result = processClient.getProcessDefinition(CONTAINER_ID, PROCESS_ID_CALL_EVALUATION); assertNotNull(result); assertEquals(PROCESS_ID_CALL_EVALUATION, result.getId()); assertEquals("call-evaluation", result.getName()); assertEquals("org.jbpm", result.getPackageName()); assertEquals("1.0", result.getVersion()); assertEquals(CONTAINER_ID, result.getContainerId()); // assert variable definitions Map<String, String> variables = result.getProcessVariables(); assertNotNull(variables); assertEquals(1, variables.size()); assertTrue(variables.containsKey("items")); assertEquals("java.util.List", variables.get("items")); // assert associated entities - users and groups Map<String, String[]> entities = result.getAssociatedEntities(); assertNotNull(entities); assertTrue(entities.containsKey("Prepare")); String[] evaluateItemsEntities = entities.get("Prepare"); assertEquals(1, evaluateItemsEntities.length); assertEquals(USER_YODA, evaluateItemsEntities[0]); // assert reusable subprocesses assertEquals(1, result.getReusableSubProcesses().size()); assertEquals("definition-project.evaluation", result.getReusableSubProcesses().iterator().next()); // assert services tasks assertEquals(0, result.getServiceTasks().size()); } @Test(expected = KieServicesException.class) public void testNonExistingProcessDefinition() { processClient.getProcessDefinition(CONTAINER_ID, "non-existing-process"); } @Test public void testReusableSubProcessDefinition() { SubProcessesDefinition result = processClient.getReusableSubProcessDefinitions(CONTAINER_ID, PROCESS_ID_CALL_EVALUATION); assertNotNull(result); // assert reusable subprocesses assertEquals(1, result.getSubProcesses().size()); assertEquals(PROCESS_ID_EVALUATION, result.getSubProcesses().iterator().next()); } @Test public void testProcessVariableDefinitions() { // assert variable definitions VariablesDefinition variablesDefinition = processClient.getProcessVariableDefinitions(CONTAINER_ID, PROCESS_ID_EVALUATION); Map<String, String> variables = variablesDefinition.getVariables(); assertNotNull(variables); assertEquals(3, variables.size()); assertTrue(variables.containsKey("name")); assertTrue(variables.containsKey("item")); assertTrue(variables.containsKey("outcome")); assertEquals("String", variables.get("name")); assertEquals("java.util.List", variables.get("item")); assertEquals("Boolean", variables.get("outcome")); } @Test public void testServiceTasksDefinition() { ServiceTasksDefinition result = processClient.getServiceTaskDefinitions(CONTAINER_ID, PROCESS_ID_EVALUATION); // assert services tasks assertEquals(1, result.getServiceTasks().size()); assertTrue(result.getServiceTasks().containsKey("Email results")); // assert type of the services task for 'Email results' name assertEquals("Email", result.getServiceTasks().get("Email results")); } @Test public void testAssociatedEntitiesDefinition() { AssociatedEntitiesDefinition result = processClient.getAssociatedEntityDefinitions(CONTAINER_ID, PROCESS_ID_EVALUATION); // assert associated entities - users and groups Map<String, String[]> entities = result.getAssociatedEntities(); assertNotNull(entities); assertTrue(entities.containsKey("Evaluate items?")); String[] evaluateItemsEntities = entities.get("Evaluate items?"); assertEquals(2, evaluateItemsEntities.length); assertEquals(USER_YODA, evaluateItemsEntities[0]); assertEquals("HR,PM", evaluateItemsEntities[1]); } @Test public void testUserTasksDefinition() { UserTaskDefinitionList result = processClient.getUserTaskDefinitions(CONTAINER_ID, PROCESS_ID_EVALUATION); assertNotNull(result); UserTaskDefinition[] tasks = result.getTasks(); // assert user tasks assertNotNull(tasks); assertEquals(1, tasks.length); UserTaskDefinition task = tasks[0]; assertNotNull(task); assertEquals("Evaluate items?", task.getName()); assertEquals("", task.getComment()); assertEquals("", task.getCreatedBy()); assertEquals(0, task.getPriority().intValue()); assertEquals(true, task.isSkippable()); // assert associated entities - users and groups String[] evaluateItemsEntities = task.getAssociatedEntities(); assertEquals(2, evaluateItemsEntities.length); assertEquals(USER_YODA, evaluateItemsEntities[0]); assertEquals("HR,PM", evaluateItemsEntities[1]); // assert task inputs and outputs Map<String, String> inputs = task.getTaskInputMappings(); assertNotNull(inputs); assertEquals(4, inputs.size()); assertTrue(inputs.containsKey("name_in")); assertTrue(inputs.containsKey("list_in")); assertTrue(inputs.containsKey("GroupId")); assertTrue(inputs.containsKey("Skippable")); assertEquals("String", inputs.get("name_in")); assertEquals("java.util.List", inputs.get("list_in")); assertEquals("java.lang.String", inputs.get("GroupId")); assertEquals("java.lang.String", inputs.get("Skippable")); Map<String, String> outputs = task.getTaskOutputMappings(); assertNotNull(outputs); assertEquals(1, outputs.size()); assertTrue(outputs.containsKey("outcome")); assertEquals("Boolean", outputs.get("outcome")); } @Test public void testUserTaskInputDefinition() { TaskInputsDefinition result = processClient.getUserTaskInputDefinitions(CONTAINER_ID, PROCESS_ID_EVALUATION, "Evaluate items?"); assertNotNull(result); // assert task inputs and outputs Map<String, String> inputs = result.getTaskInputs(); assertNotNull(inputs); assertEquals(4, inputs.size()); assertTrue(inputs.containsKey("name_in")); assertTrue(inputs.containsKey("list_in")); assertTrue(inputs.containsKey("GroupId")); assertTrue(inputs.containsKey("Skippable")); assertEquals("String", inputs.get("name_in")); assertEquals("java.util.List", inputs.get("list_in")); assertEquals("java.lang.String", inputs.get("GroupId")); assertEquals("java.lang.String", inputs.get("Skippable")); } @Test public void testTaskOutputsDefinition() { TaskOutputsDefinition result = processClient.getUserTaskOutputDefinitions(CONTAINER_ID, PROCESS_ID_EVALUATION, "Evaluate items?"); assertNotNull(result); // assert task inputs and outputs Map<String, String> outputs = result.getTaskOutputs(); assertNotNull(outputs); assertEquals(1, outputs.size()); assertTrue(outputs.containsKey("outcome")); assertEquals("Boolean", outputs.get("outcome")); } @Test public void testUserTasksDefinitionWithEmptyAssociatedEntities() { UserTaskDefinitionList result = processClient.getUserTaskDefinitions(CONTAINER_ID, PROCESS_ID_XYZ_TRANSLATIONS); assertNotNull(result); UserTaskDefinition[] tasks = result.getTasks(); // assert user tasks assertNotNull(tasks); assertEquals(3, tasks.length); UserTaskDefinition task = tasks[0]; assertNotNull(task); assertEquals("review-incoming", task.getName()); // assert associated entities - users and groups String[] evaluateItemsEntities = task.getAssociatedEntities(); assertEquals(2, evaluateItemsEntities.length); assertEquals("yoda", evaluateItemsEntities[0]); assertEquals("Reviewer", evaluateItemsEntities[1]); task = tasks[1]; assertNotNull(task); assertEquals("translate", task.getName()); // assert associated entities - users and groups evaluateItemsEntities = task.getAssociatedEntities(); assertEquals(2, evaluateItemsEntities.length); assertEquals("yoda", evaluateItemsEntities[0]); assertEquals("Writer", evaluateItemsEntities[1]); task = tasks[2]; assertNotNull(task); assertEquals("review-translation", task.getName()); // assert associated entities - users and groups evaluateItemsEntities = task.getAssociatedEntities(); assertEquals(0, evaluateItemsEntities.length); } }