/* * Copyright 2017 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 static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; 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.server.api.model.ReleaseId; import org.kie.server.api.model.cases.CaseFile; import org.kie.server.api.model.cases.CaseInstance; import org.kie.server.client.CaseServicesClient; import org.kie.server.integrationtests.config.TestConfig; import org.kie.server.integrationtests.jbpm.JbpmKieServerBaseIntegrationTest; import org.kie.server.integrationtests.shared.KieServerDeployer; public class CaseAdminServiceIntegrationTest 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 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_DEF_ID = "insurance-claims.CarInsuranceClaimCase"; private static final String CASE_HR_DEF_ID = "UserTaskCase"; @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 testGetCaseInstances() { // 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_MARY); assertNotNull(caseId); // yoda is not involved in case at all so should not see case at all List<CaseInstance> caseInstances = caseClient.getCaseInstances(0, 10); assertEquals(0, caseInstances.size()); // Admin client should return all case instances regardless of user caseInstances = caseAdminClient.getCaseInstances(0, 10); assertEquals(1, caseInstances.size()); caseInstances = caseAdminClient.getCaseInstances(1, 10); assertEquals(0, caseInstances.size()); } @Test public void testGetCaseInstancesByStatus() 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 = caseAdminClient.getCaseInstances(Arrays.asList(CaseStatus.CANCELLED.getName()), 0, 1000); assertNotNull(caseInstances); int abortedCaseInstanceCount = caseInstances.size(); String caseId = startUserTaskCase(USER_JOHN, USER_MARY); caseInstances = caseAdminClient.getCaseInstances(Arrays.asList(CaseStatus.OPEN.getName()), 0, 10); assertEquals(1, caseInstances.size()); caseInstances = caseAdminClient.getCaseInstances(Arrays.asList(CaseStatus.OPEN.getName()), 1, 10); assertEquals(0, caseInstances.size()); // Only users in roles defined in case-authorization.properties can cancel Case changeUser(USER_JOHN); caseClient.cancelCaseInstance(CONTAINER_ID, caseId); changeUser(USER_YODA); caseInstances = caseAdminClient.getCaseInstances(Arrays.asList(CaseStatus.CANCELLED.getName()), 0, 1000); assertNotNull(caseInstances); assertEquals(abortedCaseInstanceCount + 1, caseInstances.size()); } @Test public void testGetCaseInstancesSorting() { String hrCaseId = startUserTaskCase(USER_JOHN, USER_MARY); String claimCaseId = startCarInsuranceClaimCase(USER_JOHN, USER_MARY, USER_YODA); assertNotEquals(hrCaseId, claimCaseId); List<CaseInstance> caseInstances = caseAdminClient.getCaseInstances(0, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertEquals(1, caseInstances.size()); assertEquals(claimCaseId, caseInstances.get(0).getCaseId()); caseInstances = caseAdminClient.getCaseInstances(1, 1, CaseServicesClient.SORT_BY_CASE_INSTANCE_ID, true); assertEquals(1, caseInstances.size()); assertEquals(hrCaseId, caseInstances.get(0).getCaseId()); caseInstances = caseAdminClient.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 testGetCaseInstancesByStatusSorting() { String hrCaseId = startUserTaskCase(USER_JOHN, USER_MARY); String claimCaseId = startCarInsuranceClaimCase(USER_JOHN, USER_MARY, USER_YODA); assertNotEquals(hrCaseId, claimCaseId); List<CaseInstance> caseInstances = caseAdminClient.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 = caseAdminClient.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 = caseAdminClient.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()); } 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; } }