/* * Copyright 2016 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.cases; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.junit.After; import org.junit.Assume; import org.junit.BeforeClass; import org.junit.Test; import org.jbpm.casemgmt.api.model.CaseStatus; import org.kie.api.KieServices; import org.kie.api.runtime.process.ProcessInstance; import org.kie.api.task.model.Status; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.cases.CaseAdHocFragment; import org.kie.server.api.model.cases.CaseComment; import org.kie.server.api.model.cases.CaseDefinition; import org.kie.server.api.model.cases.CaseFile; import org.kie.server.api.model.cases.CaseFileDataItem; import org.kie.server.api.model.cases.CaseInstance; import org.kie.server.api.model.cases.CaseMilestone; import org.kie.server.api.model.cases.CaseRoleAssignment; import org.kie.server.api.model.cases.CaseStage; import org.kie.server.api.model.definition.ProcessDefinition; import org.kie.server.api.model.instance.NodeInstance; import org.kie.server.api.model.instance.TaskSummary; import org.kie.server.client.CaseServicesClient; import org.kie.server.api.exception.KieServicesException; import org.kie.server.integrationtests.config.TestConfig; import org.kie.server.integrationtests.jbpm.JbpmKieServerBaseIntegrationTest; import org.kie.server.integrationtests.shared.KieServerAssert; import org.kie.server.integrationtests.shared.KieServerDeployer; import static java.util.stream.Collectors.*; import static org.junit.Assert.*; public class CaseRuntimeDataServiceIntegrationTest extends JbpmKieServerBaseIntegrationTest { private static ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "case-insurance", "1.0.0.Final"); private static final String CONTAINER_ID = "insurance"; private static final String CONTAINER_ID2 = "insurance-second"; private static final String PROPERTY_DAMAGE_REPORT_CLASS_NAME = "org.kie.server.testing.PropertyDamageReport"; private static final String CLAIM_REPORT_CLASS_NAME = "org.kie.server.testing.ClaimReport"; private static final String CASE_OWNER_ROLE = "owner"; private static final String CASE_CONTACT_ROLE = "contact"; private static final String CASE_INSURED_ROLE = "insured"; private static final String CASE_INS_REP_ROLE = "insuranceRepresentative"; private static final String CASE_ASSESSOR_ROLE = "assessor"; private static final String CLAIM_CASE_ID_PREFIX = "CAR_INS"; private static final String CLAIM_CASE_DEF_ID = "insurance-claims.CarInsuranceClaimCase"; private static final String CLAIM_CASE_DESRIPTION = "CarInsuranceClaimCase"; private static final String CLAIM_CASE_NAME = "CarInsuranceClaimCase"; private static final String CLAIM_CASE_VERSION = "1.0"; private static final String CASE_HR_ID_PREFIX = "HR"; private static final String CASE_HR_DEF_ID = "UserTaskCase"; private static final String CASE_HR_DESRIPTION = "Case first case started"; private static final String CASE_HR_NAME = "Simple Case with User Tasks"; private static final String CASE_HR_VERSION = "1.0"; private static final String DATA_VERIFICATION_DEF_ID = "DataVerification"; @BeforeClass public static void buildAndDeployArtifacts() { KieServerDeployer.buildAndDeployCommonMavenParent(); KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/case-insurance").getFile()); kieContainer = KieServices.Factory.get().newKieContainer(releaseId); createContainer(CONTAINER_ID, releaseId); } @Override protected void addExtraCustomClasses(Map<String, Class<?>> extraClasses) throws Exception { extraClasses.put(CLAIM_REPORT_CLASS_NAME, Class.forName(CLAIM_REPORT_CLASS_NAME, true, kieContainer.getClassLoader())); extraClasses.put(PROPERTY_DAMAGE_REPORT_CLASS_NAME, Class.forName(PROPERTY_DAMAGE_REPORT_CLASS_NAME, true, kieContainer.getClassLoader())); } @After public void resetUser() throws Exception { changeUser(TestConfig.getUsername()); } @Test public void testGetCaseDefinitionsByNotExistingContainer() { List<CaseDefinition> definitions = caseClient.getCaseDefinitionsByContainer("not-existing-container", 0, 10); assertNotNull(definitions); assertEquals(0, definitions.size()); } @Test public void testGetCaseDefinitionsByContainer() { List<CaseDefinition> definitions = caseClient.getCaseDefinitionsByContainer(CONTAINER_ID, 0, 10); assertNotNull(definitions); assertEquals(2, definitions.size()); List<String> mappedDefinitions = definitions.stream().map(CaseDefinition::getIdentifier).collect(Collectors.toList()); assertTrue(mappedDefinitions.contains(CASE_HR_DEF_ID)); assertTrue(mappedDefinitions.contains(CLAIM_CASE_DEF_ID)); definitions = caseClient.getCaseDefinitionsByContainer(CONTAINER_ID, 0, 1); assertNotNull(definitions); assertEquals(1, definitions.size()); assertHrCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitionsByContainer(CONTAINER_ID, 1, 1); assertNotNull(definitions); assertEquals(1, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); } @Test public void testGetCaseDefinitionsByContainerSorting() { List<CaseDefinition> definitions = caseClient.getCaseDefinitionsByContainer(CONTAINER_ID, 0, 1, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, true); assertNotNull(definitions); assertEquals(1, definitions.size()); assertHrCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitionsByContainer(CONTAINER_ID, 1, 1, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, true); assertNotNull(definitions); assertEquals(1, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitionsByContainer(CONTAINER_ID, 0, 10, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, false); assertNotNull(definitions); assertEquals(2, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); assertHrCaseDefinition(definitions.get(1)); } @Test public void testGetCaseDefinitionNotExistingContainer() { try { caseClient.getCaseDefinition("not-existing-container", CASE_HR_DEF_ID); fail("Should have failed because of not existing container."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseDefinitionNotExistingCase() { try { caseClient.getCaseDefinition(CONTAINER_ID, "not-existing-case"); fail("Should have failed because of not existing case definition Id."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseDefinition() { CaseDefinition hrCase = caseClient.getCaseDefinition(CONTAINER_ID, CASE_HR_DEF_ID); assertHrCaseDefinition(hrCase); } @Test public void testGetCaseDefinitions() { List<CaseDefinition> definitions = caseClient.getCaseDefinitions(0, 10); assertNotNull(definitions); assertEquals(2, definitions.size()); List<String> mappedDefinitions = definitions.stream().map(CaseDefinition::getIdentifier).collect(Collectors.toList()); assertTrue(mappedDefinitions.contains(CASE_HR_DEF_ID)); assertTrue(mappedDefinitions.contains(CLAIM_CASE_DEF_ID)); definitions = caseClient.getCaseDefinitions(0, 1); assertNotNull(definitions); assertEquals(1, definitions.size()); assertHrCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitions(1, 1); assertNotNull(definitions); assertEquals(1, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); } @Test public void testGetCaseDefinitionsSorting() { List<CaseDefinition> definitions = caseClient.getCaseDefinitions(0, 1, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, true); assertNotNull(definitions); assertEquals(1, definitions.size()); assertHrCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitions(1, 1, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, true); assertNotNull(definitions); assertEquals(1, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitions(0, 10, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, false); assertNotNull(definitions); assertEquals(2, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); assertHrCaseDefinition(definitions.get(1)); } @Test public void testGetCaseDefinitionsSortingByCaseName() { List<CaseDefinition> definitions = caseClient.getCaseDefinitions(0, 10, CaseServicesClient.SORT_BY_CASE_DEFINITION_NAME, true); assertNotNull(definitions); assertEquals(2, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); assertHrCaseDefinition(definitions.get(1)); } @Test public void testGetCaseDefinitionsSortingByDeploymentId() { createContainer(CONTAINER_ID2, releaseId); List<CaseDefinition> definitions = caseClient.getCaseDefinitions(0, 10, CaseServicesClient.SORT_BY_CASE_DEFINITION_DEPLOYMENT_ID, true); assertNotNull(definitions); assertEquals(4, definitions.size()); assertEquals(definitions.get(0).getContainerId(), CONTAINER_ID); assertEquals(definitions.get(1).getContainerId(), CONTAINER_ID); assertEquals(definitions.get(2).getContainerId(), CONTAINER_ID2); assertEquals(definitions.get(3).getContainerId(), CONTAINER_ID2); KieServerAssert.assertSuccess(client.disposeContainer(CONTAINER_ID2)); } @Test public void testGetCaseDefinitionsWithFilter() { List<CaseDefinition> definitions = caseClient.getCaseDefinitions("User", 0, 10); assertNotNull(definitions); assertEquals(1, definitions.size()); assertHrCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitions("User", 1, 10); assertNotNull(definitions); assertEquals(0, definitions.size()); } @Test public void testGetCaseDefinitionsWithFilterSorting() { List<CaseDefinition> definitions = caseClient.getCaseDefinitions("Case", 0, 1, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, true); assertNotNull(definitions); assertEquals(1, definitions.size()); assertHrCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitions("Case", 1, 1, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, true); assertNotNull(definitions); assertEquals(1, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); definitions = caseClient.getCaseDefinitions("Case", 0, 10, CaseServicesClient.SORT_BY_CASE_DEFINITION_ID, false); assertNotNull(definitions); assertEquals(2, definitions.size()); assertCarInsuranceCaseDefinition(definitions.get(0)); assertHrCaseDefinition(definitions.get(1)); } @Test public void testGetCaseInstanceNotExistingContainer() { try { caseClient.getCaseInstance("not-existing-container", CASE_HR_DEF_ID); fail("Should have failed because of not existing container."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseInstanceNotExistingCase() { try { caseClient.getCaseInstance(CONTAINER_ID, "not-existing-case"); fail("Should have failed because of not existing case definition Id."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseInstance() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); CaseInstance caseInstance = caseClient.getCaseInstance(CONTAINER_ID, caseId); assertHrCaseInstance(caseInstance, caseId, USER_YODA); assertNull(caseInstance.getCaseFile()); assertNull(caseInstance.getRoleAssignments()); assertNull(caseInstance.getMilestones()); assertNull(caseInstance.getStages()); } @Test public void testGetCaseInstanceUserTaskCaseWithData() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); caseClient.triggerAdHocFragment(CONTAINER_ID, caseId, "Milestone1", null); CaseInstance caseInstance = caseClient.getCaseInstance(CONTAINER_ID, caseId, true, true, true, true); assertHrCaseInstance(caseInstance, caseId, USER_YODA); KieServerAssert.assertNullOrEmpty("Stages should be empty.", caseInstance.getStages()); // Assert case file assertNotNull(caseInstance.getCaseFile()); assertEquals("first case started", caseInstance.getCaseFile().getData().get("s")); // Assert role assignments assertNotNull(caseInstance.getRoleAssignments()); assertEquals(3, caseInstance.getRoleAssignments().size()); CaseRoleAssignment ownerRole = caseInstance.getRoleAssignments().get(0); assertEquals("owner", ownerRole.getName()); assertEquals(1, ownerRole.getUsers().size()); assertEquals(USER_YODA, ownerRole.getUsers().get(0)); KieServerAssert.assertNullOrEmpty("Groups should be empty.", ownerRole.getGroups()); CaseRoleAssignment contactRole = caseInstance.getRoleAssignments().get(1); assertEquals("contact", contactRole.getName()); assertEquals(1, contactRole.getUsers().size()); assertEquals(USER_JOHN, contactRole.getUsers().get(0)); KieServerAssert.assertNullOrEmpty("Groups should be empty.", contactRole.getGroups()); CaseRoleAssignment participantRole = caseInstance.getRoleAssignments().get(2); assertEquals("participant", participantRole.getName()); KieServerAssert.assertNullOrEmpty("Users should be empty.", participantRole.getUsers()); KieServerAssert.assertNullOrEmpty("Groups should be empty.", participantRole.getGroups()); // Assert milestones assertNotNull(caseInstance.getMilestones()); assertEquals(2, caseInstance.getMilestones().size()); CaseMilestone milestone = caseInstance.getMilestones().get(0); assertEquals("2", milestone.getIdentifier()); assertEquals("Milestone1", milestone.getName()); assertEquals("Completed", milestone.getStatus()); assertNotNull(milestone.getAchievedAt()); assertTrue(milestone.isAchieved()); milestone = caseInstance.getMilestones().get(1); assertNotNull(milestone.getIdentifier()); assertEquals("Milestone2", milestone.getName()); assertEquals("Available", milestone.getStatus()); assertNull(milestone.getAchievedAt()); assertFalse(milestone.isAchieved()); } @Test public void testGetCaseInstanceCarInsuranceClaimCaseWithData() { String caseId = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); CaseInstance caseInstance = caseClient.getCaseInstance(CONTAINER_ID, caseId, true, true, true, true); assertCarInsuranceCaseInstance(caseInstance, caseId, USER_YODA); KieServerAssert.assertNullOrEmpty("Milestones should be empty.", caseInstance.getMilestones()); // Assert case file assertNotNull(caseInstance.getCaseFile()); assertEquals("first case started", caseInstance.getCaseFile().getData().get("s")); // Assert role assignments assertNotNull(caseInstance.getRoleAssignments()); assertEquals(4, caseInstance.getRoleAssignments().size()); CaseRoleAssignment ownerRole = caseInstance.getRoleAssignments().get(0); assertEquals("owner", ownerRole.getName()); assertEquals(1, ownerRole.getUsers().size()); assertEquals(USER_YODA, ownerRole.getUsers().get(0)); KieServerAssert.assertNullOrEmpty("Groups should be empty.", ownerRole.getGroups()); CaseRoleAssignment insuredRole = caseInstance.getRoleAssignments().get(1); assertEquals("insured", insuredRole.getName()); assertEquals(1, insuredRole.getUsers().size()); assertEquals(USER_YODA, insuredRole.getUsers().get(0)); KieServerAssert.assertNullOrEmpty("Groups should be empty.", insuredRole.getGroups()); CaseRoleAssignment assessorRole = caseInstance.getRoleAssignments().get(2); assertEquals("assessor", assessorRole.getName()); assertEquals(USER_YODA, assessorRole.getUsers().get(0)); KieServerAssert.assertNullOrEmpty("Groups should be empty.", assessorRole.getGroups()); CaseRoleAssignment insuranceRepresentativeRole = caseInstance.getRoleAssignments().get(3); assertEquals("insuranceRepresentative", insuranceRepresentativeRole.getName()); assertEquals(1, insuranceRepresentativeRole.getUsers().size()); assertEquals(USER_JOHN, insuranceRepresentativeRole.getUsers().get(0)); KieServerAssert.assertNullOrEmpty("Groups should be empty.", insuranceRepresentativeRole.getGroups()); // Assert stages assertNotNull(caseInstance.getStages()); assertEquals(1, caseInstance.getStages().size()); CaseStage stage = caseInstance.getStages().get(0); assertNotNull(stage.getIdentifier()); assertEquals("Build claim report", stage.getName()); assertEquals("Active", stage.getStatus()); List<NodeInstance> activeNodes = stage.getActiveNodes(); assertEquals(1, activeNodes.size()); assertEquals("Provide accident information", activeNodes.get(0).getName()); assertEquals("HumanTaskNode", activeNodes.get(0).getNodeType()); assertEquals(2, stage.getAdHocFragments().size()); } @Test public void testGetCaseInstances() { List<CaseInstance> caseInstances = caseClient.getCaseInstances(0, 10); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); String caseId = startUserTaskCase(USER_YODA, USER_JOHN); String caseId2 = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); assertNotEquals(caseId, caseId2); caseInstances = caseClient.getCaseInstances(0, 10); assertEquals(2, caseInstances.size()); List<String> mappedInstances = caseInstances.stream().map(CaseInstance::getCaseId).collect(Collectors.toList()); assertTrue(mappedInstances.contains(caseId)); assertTrue(mappedInstances.contains(caseId2)); caseInstances = caseClient.getCaseInstances(0, 1); assertEquals(1, caseInstances.size()); assertCarInsuranceCaseInstance(caseInstances.get(0), caseId2, USER_YODA); caseInstances = caseClient.getCaseInstances(1, 1); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); } @Test public void testGetCaseInstancesSorting() { String hrCaseId = startUserTaskCase(USER_YODA, USER_JOHN); String claimCaseId = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); assertNotEquals(hrCaseId, claimCaseId); List<CaseInstance> caseInstances = caseClient.getCaseInstances(0, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertEquals(1, caseInstances.size()); assertEquals(claimCaseId, caseInstances.get(0).getCaseId()); caseInstances = caseClient.getCaseInstances(1, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertEquals(1, caseInstances.size()); assertEquals(hrCaseId, caseInstances.get(0).getCaseId()); caseInstances = caseClient.getCaseInstances(0, 10, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, false); assertEquals(2, caseInstances.size()); assertEquals(hrCaseId, caseInstances.get(0).getCaseId()); assertEquals(claimCaseId, caseInstances.get(1).getCaseId()); } @Test public void testGetCaseInstancesByStatus() { List<CaseInstance> caseInstances = caseClient.getCaseInstances(Arrays.asList(CaseStatus.CANCELLED.getName()), 0, 1000); assertNotNull(caseInstances); int abortedCaseInstanceCount = caseInstances.size(); String caseId = startUserTaskCase(USER_YODA, USER_JOHN); caseInstances = caseClient.getCaseInstances(Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); caseClient.cancelCaseInstance(CONTAINER_ID, caseId); caseInstances = caseClient.getCaseInstances(Arrays.asList(CaseStatus.CANCELLED.getName()), 0, 1000); assertNotNull(caseInstances); assertEquals(abortedCaseInstanceCount + 1, caseInstances.size()); } @Test public void testGetCaseInstancesByStatusSorting() { String hrCaseId = startUserTaskCase(USER_YODA, USER_JOHN); String claimCaseId = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); assertNotEquals(hrCaseId, claimCaseId); List<CaseInstance> caseInstances = caseClient.getCaseInstances(Arrays.asList(CaseStatus.OPEN.getName()), 0, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertEquals(1, caseInstances.size()); assertEquals(claimCaseId, caseInstances.get(0).getCaseId()); caseInstances = caseClient.getCaseInstances(Arrays.asList(CaseStatus.OPEN.getName()), 1, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertEquals(1, caseInstances.size()); assertEquals(hrCaseId, caseInstances.get(0).getCaseId()); caseInstances = caseClient.getCaseInstances(Arrays.asList(CaseStatus.OPEN.getName()), 0, 10, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, false); assertEquals(2, caseInstances.size()); assertEquals(hrCaseId, caseInstances.get(0).getCaseId()); assertEquals(claimCaseId, caseInstances.get(1).getCaseId()); } @Test public void testGetCaseInstancesByNotExistingContainer() { List<CaseInstance> caseInstances = caseClient.getCaseInstancesByContainer("not-existing-container", Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); } @Test public void testGetCaseInstancesByContainer() { List<CaseInstance> caseInstances = caseClient.getCaseInstancesByContainer(CONTAINER_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); String caseId = startUserTaskCase(USER_YODA, USER_JOHN); String caseId2 = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); caseInstances = caseClient.getCaseInstancesByContainer(CONTAINER_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 1); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertCarInsuranceCaseInstance(caseInstances.get(0), caseId2, USER_YODA); caseInstances = caseClient.getCaseInstancesByContainer(CONTAINER_ID, Arrays.asList(CaseStatus.OPEN.getName()), 1, 1); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); } @Test public void testGetCaseInstancesByContainerSorting() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); String caseId2 = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); List<CaseInstance> caseInstances = caseClient.getCaseInstancesByContainer(CONTAINER_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertCarInsuranceCaseInstance(caseInstances.get(0), caseId2, USER_YODA); caseInstances = caseClient.getCaseInstancesByContainer(CONTAINER_ID, Arrays.asList(CaseStatus.OPEN.getName()), 1, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); caseInstances = caseClient.getCaseInstancesByContainer(CONTAINER_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, false); assertNotNull(caseInstances); assertEquals(2, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); assertCarInsuranceCaseInstance(caseInstances.get(1), caseId2, USER_YODA); } @Test public void testGetCaseInstancesByDefinitionNotExistingContainer() { List<CaseInstance> caseInstances = caseClient.getCaseInstancesByDefinition("not-existing-container", CASE_HR_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); } @Test public void testGetCaseInstancesByNotExistingDefinition() { List<CaseInstance> caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, "not-existing-case", Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); } @Test public void testGetCaseInstancesByDefinition() { List<CaseInstance> caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, CASE_HR_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); String caseId = startUserTaskCase(USER_YODA, USER_JOHN); String caseId2 = startCarInsuranceClaimCase(USER_JOHN, USER_YODA, USER_YODA); caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, CASE_HR_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 1); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, CLAIM_CASE_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 1); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertCarInsuranceCaseInstance(caseInstances.get(0), caseId2, USER_YODA); caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, CLAIM_CASE_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 1, 1); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); } @Test public void testGetCaseInstancesByDefinitionSorting() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); String caseId2 = startUserTaskCase(USER_YODA, USER_JOHN); List<CaseInstance> caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, CASE_HR_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, CASE_HR_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 1, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId2, USER_YODA); caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, CASE_HR_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, false); assertNotNull(caseInstances); assertEquals(2, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId2, USER_YODA); assertHrCaseInstance(caseInstances.get(1), caseId, USER_YODA); } @Test public void testGetCaseInstancesOwnedByNotExistingUser() throws Exception { List<CaseInstance> caseInstances = caseClient.getCaseInstancesOwnedBy("not-existing-user", Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); } @Test public void testGetCaseInstancesOwnedBy() throws Exception { // Test is using user authentication, isn't available for local execution(which has mocked authentication info). Assume.assumeFalse(TestConfig.isLocalServer()); List<CaseInstance> caseInstances = caseClient.getCaseInstancesOwnedBy(USER_YODA, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); try { changeUser(USER_YODA); String caseId = startUserTaskCase(USER_YODA, USER_JOHN); changeUser(USER_JOHN); String caseId2 = startCarInsuranceClaimCase(USER_JOHN, USER_YODA, USER_YODA); changeUser(USER_YODA); caseInstances = caseClient.getCaseInstancesOwnedBy(USER_YODA, Arrays.asList(CaseStatus.OPEN.getName()), 0, 1); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); caseInstances = caseClient.getCaseInstancesOwnedBy(USER_YODA, Arrays.asList(CaseStatus.OPEN.getName()), 1, 1); assertNotNull(caseInstances); assertEquals(0, caseInstances.size()); changeUser(USER_JOHN); caseInstances = caseClient.getCaseInstancesOwnedBy(USER_JOHN, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertCarInsuranceCaseInstance(caseInstances.get(0), caseId2, USER_JOHN); } finally { changeUser(TestConfig.getUsername()); } } @Test public void testGetCaseInstancesOwnedBySorting() throws Exception { String hrCaseId = startUserTaskCase(USER_YODA, USER_JOHN); String claimCaseId = startCarInsuranceClaimCase(USER_JOHN, USER_YODA, USER_YODA); List<CaseInstance> caseInstances = caseClient.getCaseInstancesOwnedBy(USER_YODA, Arrays.asList(CaseStatus.OPEN.getName()), 0, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertCarInsuranceCaseInstance(caseInstances.get(0), claimCaseId, USER_YODA); caseInstances = caseClient.getCaseInstancesOwnedBy(USER_YODA, Arrays.asList(CaseStatus.OPEN.getName()), 1, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertNotNull(caseInstances); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), hrCaseId, USER_YODA); caseInstances = caseClient.getCaseInstancesOwnedBy(USER_YODA, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, false); assertNotNull(caseInstances); assertEquals(2, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), hrCaseId, USER_YODA); assertCarInsuranceCaseInstance(caseInstances.get(1), claimCaseId, USER_YODA); } @Test public void testAdHocFragments() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); List<CaseAdHocFragment> caseAdHocFragments = caseClient.getAdHocFragments(CONTAINER_ID, caseId); assertEquals(3, caseAdHocFragments.size()); Map<String, CaseAdHocFragment> mappedAdHocFragments = caseAdHocFragments.stream().collect(Collectors.toMap(CaseAdHocFragment::getName, d -> d)); assertTrue(mappedAdHocFragments.containsKey("Milestone1")); assertTrue(mappedAdHocFragments.containsKey("Milestone2")); assertTrue(mappedAdHocFragments.containsKey("Hello2")); assertEquals("MilestoneNode", mappedAdHocFragments.get("Milestone1").getType()); assertEquals("MilestoneNode", mappedAdHocFragments.get("Milestone2").getType()); assertEquals("HumanTaskNode", mappedAdHocFragments.get("Hello2").getType()); } @Test public void testAdHocFragmentsNotExistingCase() { try { caseClient.getAdHocFragments(CONTAINER_ID, "not-existing-case"); fail("Should have failed because of non existing case Id."); } catch (KieServicesException e) { // expected } } @Test public void testAdHocFragmentsNotExistingContainer() { try { caseClient.getAdHocFragments("not-existing-container", CASE_HR_DEF_ID); fail("Should have failed because of not existing container."); } catch (KieServicesException e) { // expected } } @Test public void testGetProcessInstances() { String userTaskCase = startUserTaskCase(USER_YODA, USER_JOHN); String carInsuranceClaimCase = startCarInsuranceClaimCase(USER_JOHN, USER_YODA, USER_YODA); List<org.kie.server.api.model.instance.ProcessInstance> processInstances = caseClient.getProcessInstances(CONTAINER_ID, userTaskCase, Arrays.asList(ProcessInstance.STATE_ACTIVE), 0, 1); assertNotNull(processInstances); assertEquals(1, processInstances.size()); assertHrProcessInstance(processInstances.get(0), userTaskCase); processInstances = caseClient.getProcessInstances(CONTAINER_ID, userTaskCase, Arrays.asList(ProcessInstance.STATE_ACTIVE), 1, 1); assertNotNull(processInstances); assertEquals(0, processInstances.size()); processInstances = caseClient.getProcessInstances(CONTAINER_ID, carInsuranceClaimCase, Arrays.asList(ProcessInstance.STATE_ACTIVE), 0, 10); assertNotNull(processInstances); assertEquals(1, processInstances.size()); assertCarInsuranceProcessInstance(processInstances.get(0), carInsuranceClaimCase); caseClient.cancelCaseInstance(CONTAINER_ID, userTaskCase); processInstances = caseClient.getProcessInstances(CONTAINER_ID, userTaskCase, Arrays.asList(ProcessInstance.STATE_ACTIVE), 0, 10); assertNotNull(processInstances); assertEquals(0, processInstances.size()); processInstances = caseClient.getProcessInstances(CONTAINER_ID, userTaskCase, Arrays.asList(ProcessInstance.STATE_ABORTED), 0, 10); assertNotNull(processInstances); assertEquals(1, processInstances.size()); assertHrProcessInstance(processInstances.get(0), userTaskCase, ProcessInstance.STATE_ABORTED); } @Test public void testGetProcessInstancesNotExistingCase() { List<org.kie.server.api.model.instance.ProcessInstance> processInstances = caseClient.getProcessInstances(CONTAINER_ID, "not-existing-case", Arrays.asList(ProcessInstance.STATE_ACTIVE), 0, 10); assertNotNull(processInstances); assertEquals(0, processInstances.size()); } @Test public void testGetProcessInstancesNotExistingContainer() { List<org.kie.server.api.model.instance.ProcessInstance> processInstances = caseClient.getProcessInstances("not-existing-container", CASE_HR_DEF_ID, Arrays.asList(ProcessInstance.STATE_ACTIVE), 0, 10); assertNotNull(processInstances); assertEquals(0, processInstances.size()); } @Test public void testGetProcessInstancesSorting() { String carInsuranceClaimCase = startCarInsuranceClaimCase(USER_JOHN, USER_YODA, USER_YODA); caseClient.addDynamicSubProcess(CONTAINER_ID, carInsuranceClaimCase, DATA_VERIFICATION_DEF_ID, new HashMap<>()); List<org.kie.server.api.model.instance.ProcessInstance> processInstances = caseClient.getProcessInstances(CONTAINER_ID, carInsuranceClaimCase, Arrays.asList(ProcessInstance.STATE_ACTIVE, ProcessInstance.STATE_COMPLETED), 0, 1, CaseServicesClient.SORT_BY_PROCESS_INSTANCE_ID, true); assertNotNull(processInstances); assertEquals(1, processInstances.size()); assertEquals(processInstances.get(0).getProcessId(), CLAIM_CASE_DEF_ID); processInstances = caseClient.getProcessInstances(CONTAINER_ID, carInsuranceClaimCase, Arrays.asList(ProcessInstance.STATE_ACTIVE, ProcessInstance.STATE_COMPLETED), 1, 1, CaseServicesClient.SORT_BY_PROCESS_INSTANCE_ID, true); assertNotNull(processInstances); assertEquals(1, processInstances.size()); assertEquals(processInstances.get(0).getProcessId(), DATA_VERIFICATION_DEF_ID); processInstances = caseClient.getProcessInstances(CONTAINER_ID, carInsuranceClaimCase, Arrays.asList(ProcessInstance.STATE_ACTIVE, ProcessInstance.STATE_COMPLETED), 0, 10, CaseServicesClient.SORT_BY_PROCESS_INSTANCE_ID, false); assertNotNull(processInstances); assertEquals(2, processInstances.size()); assertEquals(processInstances.get(0).getProcessId(), DATA_VERIFICATION_DEF_ID); assertEquals(processInstances.get(1).getProcessId(), CLAIM_CASE_DEF_ID); } @Test public void testGetActiveProcessInstances() { String userTaskCase = startUserTaskCase(USER_YODA, USER_JOHN); String carInsuranceClaimCase = startCarInsuranceClaimCase(USER_JOHN, USER_YODA, USER_YODA); List<org.kie.server.api.model.instance.ProcessInstance> processInstances = caseClient.getActiveProcessInstances(CONTAINER_ID, userTaskCase, 0, 1); assertNotNull(processInstances); assertEquals(1, processInstances.size()); assertHrProcessInstance(processInstances.get(0), userTaskCase); processInstances = caseClient.getActiveProcessInstances(CONTAINER_ID, userTaskCase, 1, 1); assertNotNull(processInstances); assertEquals(0, processInstances.size()); processInstances = caseClient.getActiveProcessInstances(CONTAINER_ID, carInsuranceClaimCase, 0, 10); assertNotNull(processInstances); assertEquals(1, processInstances.size()); assertCarInsuranceProcessInstance(processInstances.get(0), carInsuranceClaimCase); caseClient.cancelCaseInstance(CONTAINER_ID, userTaskCase); processInstances = caseClient.getActiveProcessInstances(CONTAINER_ID, userTaskCase, 0, 1); assertNotNull(processInstances); assertEquals(0, processInstances.size()); } @Test public void testGetActiveProcessInstancesNotExistingCase() { List<org.kie.server.api.model.instance.ProcessInstance> processInstances = caseClient.getActiveProcessInstances(CONTAINER_ID, "not-existing-case", 0, 10); assertNotNull(processInstances); assertEquals(0, processInstances.size()); } @Test public void testGetActiveProcessInstancesNotExistingContainer() { List<org.kie.server.api.model.instance.ProcessInstance> processInstances = caseClient.getActiveProcessInstances("not-existing-container", CASE_HR_DEF_ID, 0, 10); assertNotNull(processInstances); assertEquals(0, processInstances.size()); } @Test public void testCreateCaseWithCaseFileAndTriggerMilestones() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); CaseInstance caseInstance = caseClient.getCaseInstance(CONTAINER_ID, caseId); assertHrCaseInstance(caseInstance, caseId, USER_YODA); List<CaseInstance> caseInstances = caseClient.getCaseInstancesOwnedBy(USER_YODA, null, 0, 10); assertEquals(1, caseInstances.size()); List<CaseMilestone> milestones = caseClient.getMilestones(CONTAINER_ID, caseId, true, 0, 10); assertNotNull(milestones); assertEquals(0, milestones.size()); caseClient.triggerAdHocFragment(CONTAINER_ID, caseId, "Milestone1", null); milestones = caseClient.getMilestones(CONTAINER_ID, caseId, true, 0, 10); assertNotNull(milestones); assertEquals(1, milestones.size()); CaseMilestone milestone = milestones.get(0); assertNotNull(milestone); assertEquals("Milestone1", milestone.getName()); assertEquals(true, milestone.isAchieved()); assertEquals("2", milestone.getIdentifier()); assertNotNull(milestone.getAchievedAt()); caseClient.triggerAdHocFragment(CONTAINER_ID, caseId, "Milestone2", null); milestones = caseClient.getMilestones(CONTAINER_ID, caseId, true, 0, 10); assertNotNull(milestones); assertEquals(1, milestones.size()); milestones = caseClient.getMilestones(CONTAINER_ID, caseId, false, 0, 10); assertNotNull(milestones); assertEquals(2, milestones.size()); Map<String, CaseMilestone> mappedMilestones = milestones.stream().collect(Collectors.toMap(CaseMilestone::getName, d -> d)); assertTrue(mappedMilestones.containsKey("Milestone1")); assertTrue(mappedMilestones.containsKey("Milestone2")); assertTrue(mappedMilestones.get("Milestone1").isAchieved()); assertFalse(mappedMilestones.get("Milestone2").isAchieved()); caseInstances = caseClient.getCaseInstances(0, 10); assertEquals(1, caseInstances.size()); assertHrCaseInstance(caseInstances.get(0), caseId, USER_YODA); // now auto complete milestone by inserting data caseClient.putCaseInstanceData(CONTAINER_ID, caseId, "dataComplete", true); milestones = caseClient.getMilestones(CONTAINER_ID, caseId, true, 0, 10); assertNotNull(milestones); assertEquals(2, milestones.size()); } @Test public void testGetCaseMilestonesNotExistingContainer() { try { caseClient.getMilestones("not-existing-container", CASE_HR_DEF_ID, false, 0, 10); fail("Should have failed because of not existing case Id."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseMilestonesNotExistingCase() { try { caseClient.getMilestones(CONTAINER_ID, "not-existing-case", false, 0, 10); fail("Should have failed because of not existing case definition Id."); } catch (KieServicesException e) { // expected } } @Test public void testCreateCaseWithCaseFileAndDynamicActivities() { String caseId = startUserTaskCase(USER_JOHN, USER_YODA); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); List<NodeInstance> activeNodes = caseClient.getActiveNodes(CONTAINER_ID, caseId, 0, 10); assertNotNull(activeNodes); assertEquals(1, activeNodes.size()); NodeInstance activeNode = activeNodes.get(0); assertNotNull(activeNode); assertEquals("Hello1", activeNode.getName()); List<NodeInstance> completedNodes = caseClient.getCompletedNodes(CONTAINER_ID, caseId, 0, 10); assertNotNull(completedNodes); assertEquals(0, completedNodes.size()); List<org.kie.server.api.model.instance.ProcessInstance> instances = caseClient.getActiveProcessInstances(CONTAINER_ID, caseId, 0, 10); assertNotNull(instances); assertEquals(1, instances.size()); org.kie.server.api.model.instance.ProcessInstance pi = instances.get(0); assertEquals(CASE_HR_DEF_ID, pi.getProcessId()); assertEquals(caseId, pi.getCorrelationKey()); Map<String, Object> parameters = new HashMap<>(); parameters.put("input", "text data"); caseClient.addDynamicUserTask(CONTAINER_ID, caseId, "dynamic task", "simple description", USER_YODA, null, parameters); List<TaskSummary> tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("dynamic task", task.getName()); assertEquals("simple description", task.getDescription()); assertEquals(Status.Reserved.toString(), task.getStatus()); assertEquals(USER_YODA, task.getActualOwner()); activeNodes = caseClient.getActiveNodes(CONTAINER_ID, caseId, 0, 10); assertNotNull(activeNodes); assertEquals(2, activeNodes.size()); List<String> nodeNames = activeNodes.stream().map(n -> n.getName()).collect(toList()); assertTrue(nodeNames.contains("[Dynamic] dynamic task")); assertTrue(nodeNames.contains("Hello1")); taskClient.completeAutoProgress(CONTAINER_ID, task.getId(), USER_YODA, null); completedNodes = caseClient.getCompletedNodes(CONTAINER_ID, caseId, 0, 10); assertNotNull(completedNodes); assertEquals(1, completedNodes.size()); NodeInstance completedNode = completedNodes.get(0); assertNotNull(completedNode); assertEquals("[Dynamic] dynamic task", completedNode.getName()); caseClient.addDynamicSubProcess(CONTAINER_ID, caseId, "DataVerification", parameters); instances = caseClient.getProcessInstances(CONTAINER_ID, caseId, Arrays.asList(1, 2, 3), 0, 10); assertNotNull(instances); assertEquals(2, instances.size()); } @Test public void testCreateCaseWithCaseFileWithComments() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); List<CaseComment> comments = caseClient.getComments(CONTAINER_ID, caseId, 0, 10); assertNotNull(comments); assertEquals(0, comments.size()); caseClient.addComment(CONTAINER_ID, caseId, USER_YODA, "first comment"); comments = caseClient.getComments(CONTAINER_ID, caseId, 0, 10); assertNotNull(comments); assertEquals(1, comments.size()); CaseComment comment = comments.get(0); assertNotNull(comment); assertEquals(USER_YODA, comment.getAuthor()); assertEquals("first comment", comment.getText()); assertNotNull(comment.getAddedAt()); assertNotNull(comment.getId()); caseClient.updateComment(CONTAINER_ID, caseId, comment.getId(), USER_YODA, "updated comment"); comments = caseClient.getComments(CONTAINER_ID, caseId, 0, 10); assertNotNull(comments); assertEquals(1, comments.size()); comment = comments.get(0); assertNotNull(comment); assertEquals(USER_YODA, comment.getAuthor()); assertEquals("updated comment", comment.getText()); assertNotNull(comment.getAddedAt()); assertNotNull(comment.getId()); caseClient.removeComment(CONTAINER_ID, caseId, comment.getId()); comments = caseClient.getComments(CONTAINER_ID, caseId, 0, 10); assertNotNull(comments); assertEquals(0, comments.size()); } @Test public void testGetCaseCommentsNotExistingContainer() { try { caseClient.getComments("not-existing-container", CASE_HR_DEF_ID, 0, 10); fail("Should have failed because of not existing container."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseCommentsNotExistingCase() { try { caseClient.getComments(CONTAINER_ID, "not-existing-case", 0, 10); fail("Should have failed because of not existing case definition Id."); } catch (KieServicesException e) { // expected } } @Test public void testAddCaseCommentNotExistingContainer() { try { caseClient.addComment("not-existing-container", CASE_HR_DEF_ID, USER_YODA, "Random comment."); fail("Should have failed because of not existing container."); } catch (KieServicesException e) { // expected } } @Test public void testAddCaseCommentNotExistingCase() { try { caseClient.addComment(CONTAINER_ID, "not-existing-case", USER_YODA, "Random comment."); fail("Should have failed because of not existing case definition Id."); } catch (KieServicesException e) { // expected } } @Test public void testUpdateCaseCommentNotExistingContainer() { try { caseClient.updateComment("not-existing-container", CASE_HR_DEF_ID, "random-id", USER_YODA, "Random comment."); fail("Should have failed because of not existing container."); } catch (KieServicesException e) { // expected } } @Test public void testUpdateCaseCommentNotExistingCase() { try { caseClient.updateComment(CONTAINER_ID, "not-existing-case", "random-id", USER_YODA, "Random comment."); fail("Should have failed because of not existing case definition Id."); } catch (KieServicesException e) { // expected } } @Test public void testUpdateNotExistingCaseComment() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); try { caseClient.updateComment(CONTAINER_ID, caseId, "not-existing-id", USER_YODA, "Random comment."); fail("Should have failed because of not existing comment Id."); } catch (KieServicesException e) { // expected } } @Test public void testRemoveCaseCommentNotExistingContainer() { try { caseClient.removeComment("not-existing-container", CASE_HR_DEF_ID, "random-id"); fail("Should have failed because of not existing container."); } catch (KieServicesException e) { // expected } } @Test public void testRemoveCaseCommentNotExistingCase() { try { caseClient.removeComment(CONTAINER_ID, "not-existing-case", "random-id"); fail("Should have failed because of not existing case definition Id."); } catch (KieServicesException e) { // expected } } @Test public void testRemoveNotExistingCaseComment() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); try { caseClient.removeComment(CONTAINER_ID, caseId, "not-existing-id"); fail("Should have failed because of not existing comment Id."); } catch (KieServicesException e) { // expected } } @Test public void testCreateDifferentTypesCases() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); String caseClaimId = startCarInsuranceClaimCase(USER_JOHN, USER_YODA, USER_YODA); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); assertNotNull(caseClaimId); assertTrue(caseClaimId.startsWith(CLAIM_CASE_ID_PREFIX)); List<CaseInstance> caseInstances = caseClient.getCaseInstancesByContainer(CONTAINER_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertEquals(2, caseInstances.size()); List<String> caseDefs = caseInstances.stream().map(c -> c.getCaseDefinitionId()).collect(toList()); assertTrue(caseDefs.contains(CASE_HR_DEF_ID)); assertTrue(caseDefs.contains(CLAIM_CASE_DEF_ID)); caseInstances = caseClient.getCaseInstancesByDefinition(CONTAINER_ID, CLAIM_CASE_DEF_ID, Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertEquals(1, caseInstances.size()); List<CaseStage> stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); CaseStage caseStage = stages.get(0); assertEquals("Build claim report", caseStage.getName()); assertEquals(2, caseStage.getAdHocFragments().size()); List<CaseRoleAssignment> roles = caseClient.getRoleAssignments(CONTAINER_ID, caseClaimId); assertEquals(4, roles.size()); Map<String, CaseRoleAssignment> mappedRoles = roles.stream().collect(toMap(CaseRoleAssignment::getName, r -> r)); assertTrue(mappedRoles.containsKey(CASE_OWNER_ROLE)); assertTrue(mappedRoles.containsKey(CASE_INSURED_ROLE)); assertTrue(mappedRoles.containsKey(CASE_INS_REP_ROLE)); assertTrue(mappedRoles.containsKey(CASE_ASSESSOR_ROLE)); CaseRoleAssignment ownerRole = mappedRoles.get(CASE_OWNER_ROLE); assertTrue(ownerRole.getUsers().contains(USER_YODA)); KieServerAssert.assertNullOrEmpty("Groups should be empty", ownerRole.getGroups()); CaseRoleAssignment insuredRole = mappedRoles.get(CASE_INSURED_ROLE); assertTrue(insuredRole.getUsers().contains(USER_JOHN)); KieServerAssert.assertNullOrEmpty("Groups should be empty", insuredRole.getGroups()); CaseRoleAssignment insRepRole = mappedRoles.get(CASE_INS_REP_ROLE); assertTrue(insRepRole.getUsers().contains(USER_YODA)); KieServerAssert.assertNullOrEmpty("Groups should be empty", insRepRole.getGroups()); CaseRoleAssignment assessorRole = mappedRoles.get(CASE_ASSESSOR_ROLE); assertTrue(assessorRole.getUsers().contains(USER_YODA)); KieServerAssert.assertNullOrEmpty("Groups should be empty", assessorRole.getGroups()); caseClient.assignUserToRole(CONTAINER_ID, caseClaimId, CASE_ASSESSOR_ROLE, USER_MARY); caseClient.assignGroupToRole(CONTAINER_ID, caseClaimId, CASE_ASSESSOR_ROLE, "managers"); roles = caseClient.getRoleAssignments(CONTAINER_ID, caseClaimId); assertEquals(4, roles.size()); mappedRoles = roles.stream().collect(toMap(CaseRoleAssignment::getName, r -> r)); assessorRole = mappedRoles.get(CASE_ASSESSOR_ROLE); assertTrue(assessorRole.getUsers().contains(USER_MARY)); assertTrue(assessorRole.getGroups().contains("managers")); caseClient.removeUserFromRole(CONTAINER_ID, caseClaimId, CASE_ASSESSOR_ROLE, USER_MARY); caseClient.removeUserFromRole(CONTAINER_ID, caseClaimId, CASE_ASSESSOR_ROLE, USER_YODA); caseClient.removeGroupFromRole(CONTAINER_ID, caseClaimId, CASE_ASSESSOR_ROLE, "managers"); roles = caseClient.getRoleAssignments(CONTAINER_ID, caseClaimId); assertEquals(4, roles.size()); mappedRoles = roles.stream().collect(toMap(CaseRoleAssignment::getName, r -> r)); assessorRole = mappedRoles.get(CASE_ASSESSOR_ROLE); KieServerAssert.assertNullOrEmpty("Users should be empty", assessorRole.getUsers()); KieServerAssert.assertNullOrEmpty("Groups should be empty", assessorRole.getGroups()); } @Test public void testAssignUserToRoleNotExistingCase() { assertClientException( () -> caseClient.assignUserToRole(CONTAINER_ID, "not-existing-case", CASE_ASSESSOR_ROLE, USER_YODA), 404, "Could not find case instance \"not-existing-case\"", "Case with id not-existing-case was not found"); } @Test public void testAssignGroupToRoleNotExistingCase() { assertClientException( () -> caseClient.assignGroupToRole(CONTAINER_ID, "not-existing-case", CASE_ASSESSOR_ROLE, "managers"), 404, "Could not find case instance \"not-existing-case\"", "Case with id not-existing-case was not found"); } @Test public void testRemoveUserFromRoleNotExistingCase() { assertClientException( () -> caseClient.removeUserFromRole(CONTAINER_ID, "not-existing-case", CASE_ASSESSOR_ROLE, USER_YODA), 404, "Could not find case instance \"not-existing-case\"", "Case with id not-existing-case was not found"); } @Test public void testRemoveGroupFromRoleNotExistingCase() { assertClientException( () -> caseClient.removeGroupFromRole(CONTAINER_ID, "not-existing-case", CASE_ASSESSOR_ROLE, "managers"), 404, "Could not find case instance \"not-existing-case\"", "Case with id not-existing-case was not found"); } @Test public void testCaseRolesCardinality() { Map<String, Object> data = new HashMap<>(); data.put("s", "first case started"); CaseFile caseFile = CaseFile.builder() .data(data) .build(); String caseId = caseClient.startCase(CONTAINER_ID, CLAIM_CASE_DEF_ID, caseFile); assertNotNull(caseId); caseClient.assignUserToRole(CONTAINER_ID, caseId, CASE_INSURED_ROLE, USER_YODA); // Try to add second user to insured role with cardinality 1 assertClientException( () -> caseClient.assignUserToRole(CONTAINER_ID, caseId, CASE_INSURED_ROLE, USER_YODA), 400, "Cannot add more users for role " + CASE_INSURED_ROLE); } @Test public void testGetCaseStages() { String caseClaimId = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); assertNotNull(caseClaimId); List<CaseStage> stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertBuildClaimReportCaseStage(stages.iterator().next(), "Active"); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertBuildClaimReportCaseStage(stages.iterator().next(), "Active"); caseClient.putCaseInstanceData(CONTAINER_ID, caseClaimId, "claimReportDone", Boolean.TRUE); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, false, 0, 10); assertEquals(3, stages.size()); assertBuildClaimReportCaseStage(stages.get(0), "Completed"); assertClaimAssesmentCaseStage(stages.get(1), "Active"); assertEscalateRejectedClaimCaseStage(stages.get(2), "Available"); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertClaimAssesmentCaseStage(stages.iterator().next(), "Active"); } @Test public void testCompleteCaseStageAndAbort() { List<TaskSummary> tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertEquals(0, tasks.size()); String caseClaimId = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); assertNotNull(caseClaimId); caseClient.putCaseInstanceData(CONTAINER_ID, caseClaimId, "claimReportDone", Boolean.TRUE); tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertEquals(1, tasks.size()); caseClient.cancelCaseInstance(CONTAINER_ID, caseClaimId); tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertEquals(0, tasks.size()); } @Test public void testGetCaseStagesNotExistingContainer() { try { caseClient.getStages("not-existing-container", CASE_HR_DEF_ID, false, 0, 10); fail("Should have failed because of not existing container."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseStagesNotExistingCase() { try { caseClient.getStages(CONTAINER_ID, "not-existing-case", false, 0, 10); fail("Should have failed because of not existing case definition Id."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseTasksAsPotOwner() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); List<TaskSummary> instances = caseClient.findCaseTasksAssignedAsPotentialOwner(caseId, USER_YODA, 0, 10); assertNotNull(instances); assertEquals(1, instances.size()); String caseId2 = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId2); assertTrue(caseId2.startsWith(CASE_HR_ID_PREFIX)); instances = caseClient.findCaseTasksAssignedAsPotentialOwner(caseId, USER_YODA, Arrays.asList(Status.Ready.toString(), Status.Reserved.toString()), 0, 10); assertNotNull(instances); assertEquals(1, instances.size()); instances = caseClient.findCaseTasksAssignedAsPotentialOwner(caseId2, USER_YODA, Arrays.asList(Status.Ready.toString(), Status.Reserved.toString()), 0, 10, "t.name", true); assertNotNull(instances); assertEquals(1, instances.size()); caseClient.destroyCaseInstance(CONTAINER_ID, caseId); caseClient.destroyCaseInstance(CONTAINER_ID, caseId2); } @Test public void testGetCaseTasksAsBusinessAdmin() throws Exception { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); changeUser(USER_ADMINISTRATOR); List<TaskSummary> instances = caseClient.findCaseTasksAssignedAsBusinessAdministrator(caseId, USER_ADMINISTRATOR, 0, 10); assertNotNull(instances); assertEquals(1, instances.size()); changeUser(USER_YODA); String caseId2 = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId2); assertTrue(caseId2.startsWith(CASE_HR_ID_PREFIX)); changeUser(USER_ADMINISTRATOR); instances = caseClient.findCaseTasksAssignedAsBusinessAdministrator(caseId, USER_ADMINISTRATOR, Arrays.asList(Status.Ready.toString(), Status.Reserved.toString()), 0, 10); assertNotNull(instances); assertEquals(1, instances.size()); instances = caseClient.findCaseTasksAssignedAsBusinessAdministrator(caseId2, USER_ADMINISTRATOR, Arrays.asList(Status.Ready.toString(), Status.Reserved.toString()), 0, 10, "t.name", true); assertNotNull(instances); assertEquals(1, instances.size()); changeUser(USER_YODA); caseClient.destroyCaseInstance(CONTAINER_ID, caseId); caseClient.destroyCaseInstance(CONTAINER_ID, caseId2); } @Test public void testGetCaseTasksAsStakeholder() throws Exception { // Test is using user authentication, isn't available for local execution(which has mocked authentication info). Assume.assumeFalse(TestConfig.isLocalServer()); String caseId = startUserTaskCase(USER_JOHN, USER_YODA); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); Map<String, Object> parameters = new HashMap<>(); parameters.put("input", "text data"); parameters.put("TaskStakeholderId", USER_YODA); caseClient.addDynamicUserTask(CONTAINER_ID, caseId, "dynamic task", "simple description", USER_JOHN, null, parameters); List<TaskSummary> tasks = caseClient.findCaseTasksAssignedAsStakeholder(caseId, USER_YODA, 0, 10); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("dynamic task", task.getName()); assertEquals("simple description", task.getDescription()); assertEquals(Status.Reserved.toString(), task.getStatus()); assertEquals(USER_JOHN, task.getActualOwner()); // start another case String caseId2 = startUserTaskCase(USER_JOHN, USER_YODA); assertNotNull(caseId2); assertTrue(caseId2.startsWith(CASE_HR_ID_PREFIX)); caseClient.addDynamicUserTask(CONTAINER_ID, caseId2, "dynamic task", "simple description", USER_JOHN, null, parameters); tasks = caseClient.findCaseTasksAssignedAsStakeholder(caseId, USER_YODA, Arrays.asList(Status.Ready.toString(), Status.Reserved.toString()), 0, 10); assertNotNull(tasks); assertEquals(1, tasks.size()); tasks = caseClient.findCaseTasksAssignedAsStakeholder(caseId2, USER_YODA, Arrays.asList(Status.Ready.toString(), Status.Reserved.toString()), 0, 10, "t.name", true); assertNotNull(tasks); assertEquals(1, tasks.size()); changeUser(USER_JOHN); caseClient.destroyCaseInstance(CONTAINER_ID, caseId); } @Test public void testCaseInstanceAuthorization() throws Exception { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); changeUser(USER_JOHN); try { caseClient.cancelCaseInstance(CONTAINER_ID, caseId); fail("User john is not an owner so is not allowed to cancel case instance"); } catch (KieServicesException e) { String errorMessage = e.getMessage(); assertTrue(errorMessage.contains("User " + USER_JOHN +" is not authorized")); } try { caseClient.destroyCaseInstance(CONTAINER_ID, caseId); fail("User john is not an owner so is not allowed to destroy case instance"); } catch (KieServicesException e) { String errorMessage = e.getMessage(); assertTrue(errorMessage.contains("User " + USER_JOHN +" is not authorized")); } changeUser(USER_YODA); caseClient.cancelCaseInstance(CONTAINER_ID, caseId); caseClient.destroyCaseInstance(CONTAINER_ID, caseId); } @Test public void testGetProcessDefinitionsByContainer() { List<ProcessDefinition> definitions = caseClient.findProcessesByContainerId(CONTAINER_ID, 0, 10); assertNotNull(definitions); assertEquals(2, definitions.size()); List<String> mappedDefinitions = definitions.stream().map(ProcessDefinition::getId).collect(Collectors.toList()); assertTrue(mappedDefinitions.contains("DataVerification")); assertTrue(mappedDefinitions.contains("hiring")); definitions = caseClient.findProcessesByContainerId(CONTAINER_ID, 0, 1); assertNotNull(definitions); assertEquals(1, definitions.size()); assertEquals("DataVerification", definitions.get(0).getId()); definitions = caseClient.findProcessesByContainerId(CONTAINER_ID, 1, 1); assertNotNull(definitions); assertEquals(1, definitions.size()); assertEquals("hiring", definitions.get(0).getId()); definitions = caseClient.findProcessesByContainerId(CONTAINER_ID, 0, 1, CaseServicesClient.SORT_BY_PROCESS_NAME, false); assertNotNull(definitions); assertEquals(1, definitions.size()); assertEquals("hiring", definitions.get(0).getId()); } @Test public void testGetProcessDefinitions() { List<ProcessDefinition> definitions = caseClient.findProcesses("hir", 0, 10); assertNotNull(definitions); assertEquals(1, definitions.size()); assertEquals("hiring", definitions.get(0).getId()); definitions = caseClient.findProcesses(0, 1, CaseServicesClient.SORT_BY_PROCESS_NAME, false); assertNotNull(definitions); assertEquals(1, definitions.size()); assertEquals("hiring", definitions.get(0).getId()); definitions = caseClient.findProcesses(0, 10); assertNotNull(definitions); assertEquals(2, definitions.size()); List<String> mappedDefinitions = definitions.stream().map(ProcessDefinition::getId).collect(Collectors.toList()); assertTrue(mappedDefinitions.contains("DataVerification")); assertTrue(mappedDefinitions.contains("hiring")); } @Test public void testTriggerNotExistingAdHocFragments() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); assertNotNull(caseId); assertTrue(caseId.startsWith(CASE_HR_ID_PREFIX)); CaseInstance caseInstance = caseClient.getCaseInstance(CONTAINER_ID, caseId); assertHrCaseInstance(caseInstance, caseId, USER_YODA); List<CaseInstance> caseInstances = caseClient.getCaseInstancesOwnedBy(USER_YODA, null, 0, 10); assertEquals(1, caseInstances.size()); List<CaseMilestone> milestones = caseClient.getMilestones(CONTAINER_ID, caseId, true, 0, 10); assertNotNull(milestones); assertEquals(0, milestones.size()); try { caseClient.triggerAdHocFragment(CONTAINER_ID, caseId, "not existing", null); fail("Should have failed because of not existing comment Id."); } catch (KieServicesException e) { // expected } } @Test public void testGetCaseInstanceDataItems() { String caseClaimId = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); assertNotNull(caseClaimId); List<CaseFileDataItem> dataItems = caseClient.getCaseInstanceDataItems(caseClaimId, 0, 10); assertNotNull(dataItems); assertEquals(0, dataItems.size()); List<CaseStage> stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertBuildClaimReportCaseStage(stages.iterator().next(), "Active"); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertBuildClaimReportCaseStage(stages.iterator().next(), "Active"); caseClient.putCaseInstanceData(CONTAINER_ID, caseClaimId, "claimReportDone", Boolean.TRUE); dataItems = caseClient.getCaseInstanceDataItems(caseClaimId, 0, 10); assertNotNull(dataItems); assertEquals(1, dataItems.size()); CaseFileDataItem dataItem = dataItems.get(0); assertEquals(caseClaimId, dataItem.getCaseId()); assertEquals("claimReportDone", dataItem.getName()); assertEquals("true", dataItem.getValue()); assertEquals(Boolean.class.getName(), dataItem.getType()); assertEquals(USER_YODA, dataItem.getLastModifiedBy()); dataItems = caseClient.getCaseInstanceDataItemsByType(caseClaimId, Arrays.asList(Boolean.class.getName()), 0, 10); assertNotNull(dataItems); assertEquals(1, dataItems.size()); dataItems = caseClient.getCaseInstanceDataItemsByType(caseClaimId, Arrays.asList(String.class.getName()), 0, 10); assertNotNull(dataItems); assertEquals(0, dataItems.size()); dataItems = caseClient.getCaseInstanceDataItemsByName(caseClaimId, Arrays.asList("claimReportDone"), 0, 10); assertNotNull(dataItems); assertEquals(1, dataItems.size()); dataItems = caseClient.getCaseInstanceDataItemsByName(caseClaimId, Arrays.asList("notExisting"), 0, 10); assertNotNull(dataItems); assertEquals(0, dataItems.size()); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, false, 0, 10); assertEquals(3, stages.size()); assertBuildClaimReportCaseStage(stages.get(0), "Completed"); assertClaimAssesmentCaseStage(stages.get(1), "Active"); assertEscalateRejectedClaimCaseStage(stages.get(2), "Available"); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertClaimAssesmentCaseStage(stages.iterator().next(), "Active"); } @Test public void testGetCaseInstanceByData() { String caseClaimId = startCarInsuranceClaimCase(USER_YODA, USER_JOHN, USER_YODA); assertNotNull(caseClaimId); List<CaseStage> stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertBuildClaimReportCaseStage(stages.iterator().next(), "Active"); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertBuildClaimReportCaseStage(stages.iterator().next(), "Active"); List<CaseInstance> caseInstances = caseClient.getCaseInstancesByData("claimReportDone", Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertEquals(0, caseInstances.size()); caseClient.putCaseInstanceData(CONTAINER_ID, caseClaimId, "claimReportDone", Boolean.TRUE); caseInstances = caseClient.getCaseInstancesByData("claimReportDone", Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertEquals(1, caseInstances.size()); caseInstances = caseClient.getCaseInstancesByData("claimReportDone", "false", Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertEquals(0, caseInstances.size()); caseInstances = caseClient.getCaseInstancesByData("claimReportDone", "true", Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertEquals(1, caseInstances.size()); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, false, 0, 10); assertEquals(3, stages.size()); assertBuildClaimReportCaseStage(stages.get(0), "Completed"); assertClaimAssesmentCaseStage(stages.get(1), "Active"); assertEscalateRejectedClaimCaseStage(stages.get(2), "Available"); stages = caseClient.getStages(CONTAINER_ID, caseClaimId, true, 0, 10); assertEquals(1, stages.size()); assertClaimAssesmentCaseStage(stages.iterator().next(), "Active"); } private String startUserTaskCase(String owner, String contact) { Map<String, Object> data = new HashMap<>(); data.put("s", "first case started"); CaseFile caseFile = CaseFile.builder() .addUserAssignments(CASE_OWNER_ROLE, owner) .addUserAssignments(CASE_CONTACT_ROLE, contact) .data(data) .build(); String caseId = caseClient.startCase(CONTAINER_ID, CASE_HR_DEF_ID, caseFile); assertNotNull(caseId); return caseId; } private String startCarInsuranceClaimCase(String insured, String insuranceRep, String assessor) { Map<String, Object> data = new HashMap<>(); data.put("s", "first case started"); CaseFile caseFile = CaseFile.builder() .addUserAssignments(CASE_INSURED_ROLE, insured) .addUserAssignments(CASE_INS_REP_ROLE, insuranceRep) .addUserAssignments(CASE_ASSESSOR_ROLE, assessor) .data(data) .build(); String caseId = caseClient.startCase(CONTAINER_ID, CLAIM_CASE_DEF_ID, caseFile); assertNotNull(caseId); return caseId; } private void assertHrCaseInstance(CaseInstance caseInstance, String caseId, String owner) { assertNotNull(caseInstance); assertEquals(caseId, caseInstance.getCaseId()); assertEquals(CASE_HR_DEF_ID, caseInstance.getCaseDefinitionId()); assertEquals(CASE_HR_DESRIPTION, caseInstance.getCaseDescription()); assertEquals(owner, caseInstance.getCaseOwner()); assertEquals(CaseStatus.OPEN.getId(), caseInstance.getCaseStatus().intValue()); assertNotNull(caseInstance.getStartedAt()); assertNull(caseInstance.getCompletedAt()); assertEquals("", caseInstance.getCompletionMessage()); assertEquals(CONTAINER_ID, caseInstance.getContainerId()); } private void assertCarInsuranceCaseInstance(CaseInstance caseInstance, String caseId, String owner) { assertNotNull(caseInstance); assertEquals(caseId, caseInstance.getCaseId()); assertEquals(CLAIM_CASE_DEF_ID, caseInstance.getCaseDefinitionId()); assertEquals(CLAIM_CASE_DESRIPTION, caseInstance.getCaseDescription()); assertEquals(owner, caseInstance.getCaseOwner()); assertEquals(CaseStatus.OPEN.getId(), caseInstance.getCaseStatus().intValue()); assertNotNull(caseInstance.getStartedAt()); assertNull(caseInstance.getCompletedAt()); assertEquals("", caseInstance.getCompletionMessage()); assertEquals(CONTAINER_ID, caseInstance.getContainerId()); } private void assertHrCaseDefinition(CaseDefinition caseDefinition) { assertNotNull(caseDefinition); assertEquals(CASE_HR_DEF_ID, caseDefinition.getIdentifier()); assertEquals(CASE_HR_NAME, caseDefinition.getName()); assertEquals(CASE_HR_ID_PREFIX, caseDefinition.getCaseIdPrefix()); assertEquals(CASE_HR_VERSION, caseDefinition.getVersion()); assertEquals(3, caseDefinition.getAdHocFragments().size()); KieServerAssert.assertNullOrEmpty("Stages should be empty", caseDefinition.getCaseStages()); assertEquals(CONTAINER_ID, caseDefinition.getContainerId()); // Milestones checks assertEquals(2, caseDefinition.getMilestones().size()); assertEquals("Milestone1", caseDefinition.getMilestones().get(0).getName()); assertEquals("_SomeID4", caseDefinition.getMilestones().get(0).getIdentifier()); assertFalse("Case shouldn't be mandatory.", caseDefinition.getMilestones().get(0).isMandatory()); assertEquals("Milestone2", caseDefinition.getMilestones().get(1).getName()); assertEquals("_5", caseDefinition.getMilestones().get(1).getIdentifier()); assertFalse("Case shouldn't be mandatory.", caseDefinition.getMilestones().get(1).isMandatory()); // Roles check assertEquals(3, caseDefinition.getRoles().size()); assertTrue("Role 'owner' is missing.", caseDefinition.getRoles().containsKey("owner")); assertTrue("Role 'contact' is missing.", caseDefinition.getRoles().containsKey("contact")); assertTrue("Role 'participant' is missing.", caseDefinition.getRoles().containsKey("participant")); } private void assertCarInsuranceCaseDefinition(CaseDefinition caseDefinition) { assertNotNull(caseDefinition); assertEquals(CLAIM_CASE_DEF_ID, caseDefinition.getIdentifier()); assertEquals(CLAIM_CASE_NAME, caseDefinition.getName()); assertEquals(CLAIM_CASE_ID_PREFIX, caseDefinition.getCaseIdPrefix()); assertEquals(CLAIM_CASE_VERSION, caseDefinition.getVersion()); assertEquals(1, caseDefinition.getAdHocFragments().size()); KieServerAssert.assertNullOrEmpty("Milestones should be empty.", caseDefinition.getMilestones()); assertEquals(CONTAINER_ID, caseDefinition.getContainerId()); // Stages check assertEquals(3, caseDefinition.getCaseStages().size()); assertEquals("Build claim report", caseDefinition.getCaseStages().get(0).getName()); assertNotNull(caseDefinition.getCaseStages().get(0).getIdentifier()); assertEquals("Claim assesment", caseDefinition.getCaseStages().get(1).getName()); assertNotNull(caseDefinition.getCaseStages().get(1).getIdentifier()); assertEquals("Escalate rejected claim", caseDefinition.getCaseStages().get(2).getName()); assertNotNull(caseDefinition.getCaseStages().get(2).getIdentifier()); List<CaseAdHocFragment> buildClaimFragments = caseDefinition.getCaseStages().get(0).getAdHocFragments(); assertEquals(2, buildClaimFragments.size()); assertEquals("Provide accident information", buildClaimFragments.get(0).getName()); assertEquals("HumanTaskNode", buildClaimFragments.get(0).getType()); assertEquals("Submit police report", buildClaimFragments.get(1).getName()); assertEquals("HumanTaskNode", buildClaimFragments.get(1).getType()); List<CaseAdHocFragment> claimAssesmentFragments = caseDefinition.getCaseStages().get(1).getAdHocFragments(); assertEquals(2, claimAssesmentFragments.size()); assertEquals("Classify claim", claimAssesmentFragments.get(0).getName()); assertEquals("RuleSetNode", claimAssesmentFragments.get(0).getType()); assertEquals("Calculate claim", claimAssesmentFragments.get(1).getName()); assertEquals("WorkItemNode", claimAssesmentFragments.get(1).getType()); List<CaseAdHocFragment> escalateRejectedClaimFragments = caseDefinition.getCaseStages().get(2).getAdHocFragments(); assertEquals(1, escalateRejectedClaimFragments.size()); assertEquals("Negotiation meeting", escalateRejectedClaimFragments.get(0).getName()); assertEquals("HumanTaskNode", escalateRejectedClaimFragments.get(0).getType()); // Roles check assertEquals(3, caseDefinition.getRoles().size()); assertTrue("Role 'insured' is missing.", caseDefinition.getRoles().containsKey("insured")); assertTrue("Role 'insuranceRepresentative' is missing.", caseDefinition.getRoles().containsKey("insuranceRepresentative")); assertTrue("Role 'assessor' is missing.", caseDefinition.getRoles().containsKey("assessor")); } private void assertHrProcessInstance(org.kie.server.api.model.instance.ProcessInstance processInstance, String caseId) { assertHrProcessInstance(processInstance, caseId, ProcessInstance.STATE_ACTIVE); } private void assertHrProcessInstance(org.kie.server.api.model.instance.ProcessInstance processInstance, String caseId, long processInstanceState) { assertNotNull(processInstance); assertNotNull(processInstance.getId()); assertEquals(caseId, processInstance.getCorrelationKey()); assertEquals(processInstanceState, processInstance.getState().intValue()); assertEquals(CASE_HR_DEF_ID, processInstance.getProcessId()); assertEquals(CASE_HR_NAME, processInstance.getProcessName()); assertEquals(CASE_HR_VERSION, processInstance.getProcessVersion()); assertEquals(CONTAINER_ID, processInstance.getContainerId()); assertEquals(CASE_HR_DESRIPTION, processInstance.getProcessInstanceDescription()); assertEquals(USER_YODA, processInstance.getInitiator()); assertEquals(-1L, processInstance.getParentId().longValue()); assertNotNull(processInstance.getCorrelationKey()); assertNotNull(processInstance.getDate()); } private void assertCarInsuranceProcessInstance(org.kie.server.api.model.instance.ProcessInstance processInstance, String caseId) { assertNotNull(processInstance); assertNotNull(processInstance.getId()); assertEquals(caseId, processInstance.getCorrelationKey()); assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState().intValue()); assertEquals(CLAIM_CASE_DEF_ID, processInstance.getProcessId()); assertEquals(CLAIM_CASE_NAME, processInstance.getProcessName()); assertEquals(CLAIM_CASE_VERSION, processInstance.getProcessVersion()); assertEquals(CONTAINER_ID, processInstance.getContainerId()); assertEquals(CLAIM_CASE_DESRIPTION, processInstance.getProcessInstanceDescription()); assertEquals(USER_YODA, processInstance.getInitiator()); assertEquals(-1L, processInstance.getParentId().longValue()); assertNotNull(processInstance.getCorrelationKey()); assertNotNull(processInstance.getDate()); } private void assertBuildClaimReportCaseStage(CaseStage stage, String status) { assertEquals("Build claim report", stage.getName()); assertNotNull(stage.getIdentifier()); assertEquals(status, stage.getStatus()); if (status.endsWith("Active")) { List<NodeInstance> activeNodes = stage.getActiveNodes(); assertEquals(1, activeNodes.size()); assertEquals("Provide accident information", activeNodes.get(0).getName()); assertEquals("HumanTaskNode", activeNodes.get(0).getNodeType()); } else { KieServerAssert.assertNullOrEmpty("Active nodes should be null or empty.", stage.getActiveNodes()); } List<CaseAdHocFragment> adHocFragments = stage.getAdHocFragments(); assertEquals(2, adHocFragments.size()); assertEquals("Provide accident information", adHocFragments.get(0).getName()); assertEquals("HumanTaskNode", adHocFragments.get(0).getType()); assertEquals("Submit police report", adHocFragments.get(1).getName()); assertEquals("HumanTaskNode", adHocFragments.get(1).getType()); } private void assertClaimAssesmentCaseStage(CaseStage stage, String status) { assertEquals("Claim assesment", stage.getName()); assertNotNull(stage.getIdentifier()); assertEquals(status, stage.getStatus()); if (status.endsWith("Active")) { List<NodeInstance> activeNodes = stage.getActiveNodes(); assertEquals(1, activeNodes.size()); assertEquals("Assessor evaluation", activeNodes.get(0).getName()); assertEquals("HumanTaskNode", activeNodes.get(0).getNodeType()); } else { KieServerAssert.assertNullOrEmpty("Active nodes should be null or empty.", stage.getActiveNodes()); } List<CaseAdHocFragment> adHocFragments = stage.getAdHocFragments(); assertEquals(2, adHocFragments.size()); assertEquals("Classify claim", adHocFragments.get(0).getName()); assertEquals("RuleSetNode", adHocFragments.get(0).getType()); assertEquals("Calculate claim", adHocFragments.get(1).getName()); assertEquals("WorkItemNode", adHocFragments.get(1).getType()); } private void assertEscalateRejectedClaimCaseStage(CaseStage stage, String status) { assertEquals("Escalate rejected claim", stage.getName()); assertNotNull(stage.getIdentifier()); assertEquals(status, stage.getStatus()); KieServerAssert.assertNullOrEmpty("Active nodes should be null or empty.", stage.getActiveNodes()); List<CaseAdHocFragment> adHocFragments = stage.getAdHocFragments(); assertEquals(1, adHocFragments.size()); assertEquals("Negotiation meeting", adHocFragments.get(0).getName()); assertEquals("HumanTaskNode", adHocFragments.get(0).getType()); } }