/* * Copyright 2016 JBoss by Red Hat. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * 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.rest.cases; import static org.junit.Assert.assertNotNull; import static org.kie.server.api.rest.RestURI.build; import java.util.HashMap; import java.util.Map; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; import org.junit.After; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.kie.server.api.KieServerConstants; import org.kie.server.api.marshalling.Marshaller; import org.kie.server.api.marshalling.MarshallerFactory; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.cases.CaseFile; import org.kie.server.api.model.type.JaxbString; import org.kie.server.api.rest.RestURI; import org.kie.server.integrationtests.config.TestConfig; import org.kie.server.integrationtests.jbpm.rest.RestJbpmBaseIntegrationTest; import org.kie.server.integrationtests.shared.KieServerDeployer; public class CaseServiceRestOnlyIntegrationTest extends RestJbpmBaseIntegrationTest { 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 CASE_OWNER_ROLE = "owner"; private static final String CASE_CONTACT_ROLE = "contact"; private static final String CASE_HR_DEF_ID = "UserTaskCase"; private Response response = null; @BeforeClass public static void buildAndDeployArtifacts() { KieServerDeployer.buildAndDeployCommonMavenParent(); KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/case-insurance").getFile()); createContainer(CONTAINER_ID, releaseId); } @After public void releaseConnection() { if (response != null) { response.close(); } } @Test public void testCreateCase() { Entity<CaseFile> caseFile = Entity.entity(new CaseFile(), getMediaType()); Map<String, Object> valuesMap = new HashMap<String, Object>(); valuesMap.put(RestURI.CONTAINER_ID, CONTAINER_ID); valuesMap.put(RestURI.CASE_DEF_ID, CASE_HR_DEF_ID); WebTarget clientRequest = newRequest(build(TestConfig.getKieServerHttpUrl(), RestURI.CASE_URI + "/" + RestURI.START_CASE_POST_URI, valuesMap)); logger.debug("Start case: [POST] " + clientRequest.getUri()); response = clientRequest.request(getMediaType()).post(caseFile); Assert.assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus()); String caseId = response.readEntity(JaxbString.class).getValue(); assertNotNull(caseId); } @Test public void testUpdateNotExistingCaseComment() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); Entity<String> newComment = Entity.entity("", getMediaType()); Map<String, Object> valuesMap = new HashMap<String, Object>(); valuesMap.put(RestURI.CONTAINER_ID, CONTAINER_ID); valuesMap.put(RestURI.CASE_ID, caseId); valuesMap.put(RestURI.CASE_COMMENT_ID, "not-existing-id"); WebTarget clientRequest = newRequest(build(TestConfig.getKieServerHttpUrl(), RestURI.CASE_URI + "/" + RestURI.CASE_COMMENTS_PUT_URI, valuesMap)); logger.debug("Update case: [PUT] " + clientRequest.getUri()); response = clientRequest.request(getMediaType()).put(newComment); Assert.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus()); } @Test public void testRemoveNotExistingCaseComment() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); Map<String, Object> valuesMap = new HashMap<String, Object>(); valuesMap.put(RestURI.CONTAINER_ID, CONTAINER_ID); valuesMap.put(RestURI.CASE_ID, caseId); valuesMap.put(RestURI.CASE_COMMENT_ID, "not-existing-id"); WebTarget clientRequest = newRequest(build(TestConfig.getKieServerHttpUrl(), RestURI.CASE_URI + "/" + RestURI.CASE_COMMENTS_DELETE_URI, valuesMap)); logger.debug("Remove case: [DELETE] " + clientRequest.getUri()); response = clientRequest.request(getMediaType()).delete(); Assert.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus()); } @Test public void testAddDynamicWorkItemTaskNoTaskSpec() { String caseId = startUserTaskCase(USER_YODA, USER_JOHN); Map<String, Object> valuesMap = new HashMap<String, Object>(); valuesMap.put(RestURI.CONTAINER_ID, CONTAINER_ID); valuesMap.put(RestURI.CASE_ID, caseId); WebTarget clientRequest = newRequest(build(TestConfig.getKieServerHttpUrl(), RestURI.CASE_URI + "/" + RestURI.CASE_DYNAMIC_TASK_POST_URI, valuesMap)); logger.debug("Add dynamic work item: [POST] " + clientRequest.getUri()); response = clientRequest.request(getMediaType()).post(Entity.entity("", getMediaType())); Assert.assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } @Test public void testAddDynamicWorkItemTaskNotExistingContainer() { Marshaller marshaller = MarshallerFactory.getMarshaller(marshallingFormat, ClassLoader.getSystemClassLoader()); Map<String, Object> valuesMap = new HashMap<String, Object>(); valuesMap.put(RestURI.CONTAINER_ID, "not-existing-id"); valuesMap.put(RestURI.CASE_ID, "not-existing-id"); Map<String, Object> taskSpecMap = new HashMap<String, Object>(); taskSpecMap.put(KieServerConstants.CASE_DYNAMIC_NAME_PROP, "Contact car producer"); taskSpecMap.put(KieServerConstants.CASE_DYNAMIC_NODE_TYPE_PROP, "ContactCarProducer"); WebTarget clientRequest = newRequest(build(TestConfig.getKieServerHttpUrl(), RestURI.CASE_URI + "/" + RestURI.CASE_DYNAMIC_TASK_POST_URI, valuesMap)); logger.debug("Add dynamic work item: [POST] " + clientRequest.getUri()); response = clientRequest.request(getMediaType()).post(createEntity(marshaller.marshall(taskSpecMap))); Assert.assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } 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; } }