package org.activiti.rest.service.api.repository; import java.util.List; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.rest.service.BaseSpringRestTestCase; import org.activiti.rest.service.api.RestUrls; import org.apache.http.HttpStatus; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import com.fasterxml.jackson.databind.JsonNode; /** * Test for all REST-operations related to the Deployment collection. * * @author Frederik Heremans * @author Joram Barrez */ public class ProcessDefinitionCollectionResourceTest extends BaseSpringRestTestCase { /** * Test getting process definitions. * GET repository/process-definitions */ public void testGetProcessDefinitions() throws Exception { try { Deployment firstDeployment = repositoryService.createDeployment().name("Deployment 1") .addClasspathResource("org/activiti/rest/service/api/repository/oneTaskProcess.bpmn20.xml") .deploy(); Deployment secondDeployment = repositoryService.createDeployment().name("Deployment 2") .addClasspathResource("org/activiti/rest/service/api/repository/oneTaskProcess.bpmn20.xml") .addClasspathResource("org/activiti/rest/service/api/repository/twoTaskProcess.bpmn20.xml") .deploy(); Deployment thirdDeployment = repositoryService.createDeployment().name("Deployment 3") .addClasspathResource("org/activiti/rest/service/api/repository/oneTaskProcessWithDi.bpmn20.xml") .deploy(); ProcessDefinition oneTaskProcess = repositoryService.createProcessDefinitionQuery() .processDefinitionKey("oneTaskProcess").deploymentId(firstDeployment.getId()).singleResult(); ProcessDefinition latestOneTaskProcess = repositoryService.createProcessDefinitionQuery() .processDefinitionKey("oneTaskProcess").deploymentId(secondDeployment.getId()).singleResult(); ProcessDefinition twoTaskprocess = repositoryService.createProcessDefinitionQuery() .processDefinitionKey("twoTaskProcess").deploymentId(secondDeployment.getId()).singleResult(); ProcessDefinition oneTaskWithDiProcess = repositoryService.createProcessDefinitionQuery() .processDefinitionKey("oneTaskProcessWithDi").deploymentId(thirdDeployment.getId()).singleResult(); // Test parameterless call String baseUrl = RestUrls.createRelativeResourceUrl(RestUrls.URL_PROCESS_DEFINITION_COLLECTION); assertResultsPresentInDataResponse(baseUrl, oneTaskProcess.getId(), twoTaskprocess.getId(), latestOneTaskProcess.getId(), oneTaskWithDiProcess.getId()); // Verify ACT-2141 Persistent isGraphicalNotation flag for process definitions CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + baseUrl), HttpStatus.SC_OK); JsonNode dataNode = objectMapper.readTree(response.getEntity().getContent()).get("data"); closeResponse(response); for (int i=0; i<dataNode.size(); i++) { JsonNode processDefinitionJson = dataNode.get(i); String key = processDefinitionJson.get("key").asText(); JsonNode graphicalNotationNode = processDefinitionJson.get("graphicalNotationDefined"); if (key.equals("oneTaskProcessWithDi")) { assertTrue(graphicalNotationNode.asBoolean()); } else { assertFalse(graphicalNotationNode.asBoolean()); } } // Verify // Test name filtering String url = baseUrl + "?name=" + encode("The Two Task Process"); assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test nameLike filtering url = baseUrl + "?nameLike=" + encode("The Two%"); assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test key filtering url = baseUrl + "?key=twoTaskProcess"; assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test returning multiple versions for the same key url = baseUrl + "?key=oneTaskProcess"; assertResultsPresentInDataResponse(url, oneTaskProcess.getId(), latestOneTaskProcess.getId()); // Test keyLike filtering url = baseUrl + "?keyLike=" + encode("two%"); assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test category filtering url = baseUrl + "?category=TwoTaskCategory"; assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test categoryLike filtering url = baseUrl + "?categoryLike=" + encode("Two%"); assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test categoryNotEquals filtering url = baseUrl + "?categoryNotEquals=OneTaskCategory"; assertResultsPresentInDataResponse(url, twoTaskprocess.getId(), oneTaskWithDiProcess.getId()); // Test resourceName filtering url = baseUrl + "?resourceName=org/activiti/rest/service/api/repository/twoTaskProcess.bpmn20.xml"; assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test resourceNameLike filtering url = baseUrl + "?resourceNameLike=" + encode("%twoTaskProcess%"); assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test version filtering url = baseUrl + "?version=2"; assertResultsPresentInDataResponse(url, latestOneTaskProcess.getId()); // Test latest filtering url = baseUrl + "?latest=true"; assertResultsPresentInDataResponse(url, latestOneTaskProcess.getId(), twoTaskprocess.getId(), oneTaskWithDiProcess.getId()); url = baseUrl + "?latest=false"; assertResultsPresentInDataResponse(baseUrl, oneTaskProcess.getId(), twoTaskprocess.getId(), latestOneTaskProcess.getId(), oneTaskWithDiProcess.getId()); // Test deploymentId url = baseUrl + "?deploymentId=" + secondDeployment.getId(); assertResultsPresentInDataResponse(url, twoTaskprocess.getId(), latestOneTaskProcess.getId()); // Test startableByUser url = baseUrl + "?startableByUser=kermit"; assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); // Test suspended repositoryService.suspendProcessDefinitionById(twoTaskprocess.getId()); url = baseUrl + "?suspended=true"; assertResultsPresentInDataResponse(url, twoTaskprocess.getId()); url = baseUrl + "?suspended=false"; assertResultsPresentInDataResponse(url, latestOneTaskProcess.getId(), oneTaskProcess.getId(), oneTaskWithDiProcess.getId()); } finally { // Always cleanup any created deployments, even if the test failed List<Deployment> deployments = repositoryService.createDeploymentQuery().list(); for(Deployment deployment : deployments) { repositoryService.deleteDeployment(deployment.getId(), true); } } } }