mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged HEAD-QA to HEAD (4.2) - final one
r54310-54386 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@54387 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -71,7 +71,7 @@ public class PublicApiHttpClient
|
||||
|
||||
private static final String OLD_BASE_URL = "http://{0}:{1}{2}/{3}/{4}/api/";
|
||||
private static final String INDEX_URL = "http://{0}:{1}{2}/{3}";
|
||||
private static final String BASE_URL = "http://{0}:{1}{2}/{3}/{4}/{5}/alfresco/versions/1";
|
||||
private static final String BASE_URL = "http://{0}:{1}{2}/{3}/{4}/{5}/{6}/versions/1";
|
||||
private static final String PUBLICAPI_CMIS_SERVICE_URL = "http://{0}:{1}{2}/{3}/cmis/versions/{4}/{5}";
|
||||
private static final String PUBLICAPI_CMIS_URL = "http://{0}:{1}{2}/{3}/{4}/{5}/cmis/versions/{6}/{7}";
|
||||
private static final String ATOM_PUB_URL = "http://{0}:{1}{2}/cmisatom";
|
||||
@@ -86,6 +86,9 @@ public class PublicApiHttpClient
|
||||
private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
|
||||
private MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(this.resourcePatternResolver);
|
||||
|
||||
// can be overriden by other clients like the workflow client
|
||||
protected String apiName = "alfresco";
|
||||
|
||||
public PublicApiHttpClient(String host, int port, String contextPath, String servletName, AuthenticatedHttp authenticatedHttp)
|
||||
{
|
||||
super();
|
||||
@@ -500,7 +503,7 @@ public class PublicApiHttpClient
|
||||
Pair<String, String> relationshipCollectionInfo = getRelationCollectionInfo(resourceClass);
|
||||
|
||||
sb.append(MessageFormat.format(BASE_URL, new Object[] {host, String.valueOf(port), contextPath, servletName,
|
||||
tenantDomain == null ? TenantUtil.DEFAULT_TENANT : tenantDomain, scope.toString()}));
|
||||
tenantDomain == null ? TenantUtil.DEFAULT_TENANT : tenantDomain, scope.toString(), apiName}));
|
||||
|
||||
if(relationshipCollectionInfo != null)
|
||||
{
|
||||
@@ -578,7 +581,7 @@ public class PublicApiHttpClient
|
||||
tenantDomain = TenantUtil.DEFAULT_TENANT;
|
||||
}
|
||||
sb.append(MessageFormat.format(BASE_URL, new Object[] {host, String.valueOf(port), contextPath, servletName,
|
||||
tenantDomain, scope}));
|
||||
tenantDomain, scope, apiName}));
|
||||
|
||||
if(collectionName != null)
|
||||
{
|
||||
|
@@ -2,9 +2,12 @@ package org.alfresco.rest.workflow.api.tests;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.activiti.engine.ProcessEngine;
|
||||
import org.activiti.engine.repository.DeploymentBuilder;
|
||||
@@ -23,11 +26,11 @@ import org.alfresco.rest.api.tests.client.AuthenticationDetailsProvider;
|
||||
import org.alfresco.rest.api.tests.client.HttpClientProvider;
|
||||
import org.alfresco.rest.api.tests.client.HttpResponse;
|
||||
import org.alfresco.rest.api.tests.client.PublicApiException;
|
||||
import org.alfresco.rest.api.tests.client.PublicApiHttpClient;
|
||||
import org.alfresco.rest.api.tests.client.RequestContext;
|
||||
import org.alfresco.rest.api.tests.client.UserAuthenticationDetailsProviderImpl;
|
||||
import org.alfresco.rest.api.tests.client.UserData;
|
||||
import org.alfresco.rest.api.tests.client.UserDataService;
|
||||
import org.alfresco.rest.api.tests.client.data.MemberOfSite;
|
||||
import org.alfresco.rest.workflow.api.model.ProcessInfo;
|
||||
import org.alfresco.rest.workflow.api.tests.WorkflowApiClient.ProcessesClient;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
@@ -85,7 +88,7 @@ public class EnterpriseWorkflowTestApi extends EnterpriseTestApi
|
||||
};
|
||||
AuthenticationDetailsProvider authenticationDetailsProvider = new UserAuthenticationDetailsProviderImpl(userDataService, "admin", "admin");
|
||||
AuthenticatedHttp authenticatedHttp = new AuthenticatedHttp(httpClientProvider, authenticationDetailsProvider);
|
||||
this.httpClient = new PublicApiHttpClient("localhost", TestFixture.PORT, TestFixture.CONTEXT_PATH,
|
||||
this.httpClient = new WorkflowApiHttpClient("localhost", TestFixture.PORT, TestFixture.CONTEXT_PATH,
|
||||
TestFixture.PUBLIC_API_SERVLET_NAME, authenticatedHttp);
|
||||
this.publicApiClient = new WorkflowApiClient(httpClient, userDataService);
|
||||
activitiProcessEngine = (ProcessEngine) applicationContext.getBean("activitiProcessEngine");
|
||||
@@ -116,6 +119,29 @@ public class EnterpriseWorkflowTestApi extends EnterpriseTestApi
|
||||
return requestContext;
|
||||
}
|
||||
|
||||
protected TestNetwork getOtherNetwork(String usedNetworkId) throws Exception {
|
||||
Iterator<TestNetwork> networkIt = getTestFixture().getNetworksIt();
|
||||
while(networkIt.hasNext()) {
|
||||
TestNetwork network = networkIt.next();
|
||||
if(!usedNetworkId.equals(network.getId())) {
|
||||
return network;
|
||||
}
|
||||
}
|
||||
fail("Need more than one network to test permissions");
|
||||
return null;
|
||||
}
|
||||
|
||||
protected TestPerson getOtherPersonInNetwork(String usedPerson, String networkId) throws Exception {
|
||||
TestNetwork usedNetwork = getTestFixture().getNetwork(networkId);
|
||||
for(TestPerson person : usedNetwork.getPeople()) {
|
||||
if(!person.getId().equals(usedPerson)) {
|
||||
return person;
|
||||
}
|
||||
}
|
||||
fail("Network doesn't have additonal users, cannot perform test");
|
||||
return null;
|
||||
}
|
||||
|
||||
protected Date parseDate(JSONObject entry, String fieldName) {
|
||||
String dateText = (String) entry.get(fieldName);
|
||||
if (dateText!=null) {
|
||||
@@ -188,10 +214,17 @@ public class EnterpriseWorkflowTestApi extends EnterpriseTestApi
|
||||
}
|
||||
|
||||
/**
|
||||
* Start an adhoc-process through the public REST-API.
|
||||
* Start an adhoc-process without business key through the public REST-API.
|
||||
*/
|
||||
protected ProcessInfo startAdhocProcess(final RequestContext requestContext, NodeRef[] documentRefs) throws PublicApiException {
|
||||
return startAdhocProcess(requestContext, documentRefs, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start an adhoc-process with possible business key through the public REST-API.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
protected ProcessInfo startAdhocProcess(final RequestContext requestContext, NodeRef[] documentRefs) throws PublicApiException {
|
||||
protected ProcessInfo startAdhocProcess(final RequestContext requestContext, NodeRef[] documentRefs, String businessKey) throws PublicApiException {
|
||||
org.activiti.engine.repository.ProcessDefinition processDefinition = activitiProcessEngine
|
||||
.getRepositoryService()
|
||||
.createProcessDefinitionQuery()
|
||||
@@ -202,8 +235,13 @@ public class EnterpriseWorkflowTestApi extends EnterpriseTestApi
|
||||
|
||||
final JSONObject createProcessObject = new JSONObject();
|
||||
createProcessObject.put("processDefinitionId", processDefinition.getId());
|
||||
if (businessKey != null)
|
||||
{
|
||||
createProcessObject.put("businessKey", businessKey);
|
||||
}
|
||||
final JSONObject variablesObject = new JSONObject();
|
||||
variablesObject.put("bpm_priority", 1);
|
||||
variablesObject.put("wf_notifyMe", Boolean.FALSE);
|
||||
|
||||
TenantUtil.runAsUserTenant(new TenantRunAsWork<Void>()
|
||||
{
|
||||
@@ -220,7 +258,7 @@ public class EnterpriseWorkflowTestApi extends EnterpriseTestApi
|
||||
final JSONArray itemsObject = new JSONArray();
|
||||
for (NodeRef nodeRef : documentRefs)
|
||||
{
|
||||
itemsObject.add(nodeRef.toString());
|
||||
itemsObject.add(nodeRef.getId());
|
||||
}
|
||||
createProcessObject.put("items", itemsObject);
|
||||
}
|
||||
@@ -229,4 +267,43 @@ public class EnterpriseWorkflowTestApi extends EnterpriseTestApi
|
||||
|
||||
return processesClient.createProcess(createProcessObject.toJSONString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Start a review pooled process through the public REST-API.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
protected ProcessInfo startReviewPooledProcess(final RequestContext requestContext) throws PublicApiException {
|
||||
org.activiti.engine.repository.ProcessDefinition processDefinition = activitiProcessEngine
|
||||
.getRepositoryService()
|
||||
.createProcessDefinitionQuery()
|
||||
.processDefinitionKey("@" + requestContext.getNetworkId() + "@activitiReviewPooled")
|
||||
.singleResult();
|
||||
|
||||
ProcessesClient processesClient = publicApiClient.processesClient();
|
||||
|
||||
final JSONObject createProcessObject = new JSONObject();
|
||||
createProcessObject.put("processDefinitionId", processDefinition.getId());
|
||||
|
||||
final JSONObject variablesObject = new JSONObject();
|
||||
variablesObject.put("bpm_priority", 1);
|
||||
variablesObject.put("wf_notifyMe", Boolean.FALSE);
|
||||
|
||||
TenantUtil.runAsUserTenant(new TenantRunAsWork<Void>()
|
||||
{
|
||||
@Override
|
||||
public Void doWork() throws Exception
|
||||
{
|
||||
List<MemberOfSite> memberships = getTestFixture().getNetwork(requestContext.getNetworkId()).getSiteMemberships(requestContext.getRunAsUser());
|
||||
assertTrue(memberships.size() > 0);
|
||||
MemberOfSite memberOfSite = memberships.get(0);
|
||||
String group = "GROUP_site_" + memberOfSite.getSiteId() + "_" + memberOfSite.getRole().name();
|
||||
variablesObject.put("bpm_groupAssignee", group);
|
||||
return null;
|
||||
}
|
||||
}, requestContext.getRunAsUser(), requestContext.getNetworkId());
|
||||
|
||||
createProcessObject.put("variables", variablesObject);
|
||||
|
||||
return processesClient.createProcess(createProcessObject.toJSONString());
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2012 Alfresco Software Limited.
|
||||
* Copyright (C) 2005-2013 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
@@ -34,6 +34,8 @@ public class ProcessDefinitionParser extends ListParser<ProcessDefinition>
|
||||
processDefinition.setVersion(((Number) entry.get("version")).intValue());
|
||||
processDefinition.setName((String) entry.get("name"));
|
||||
processDefinition.setDeploymentId((String) entry.get("deploymentId"));
|
||||
processDefinition.setTitle((String) entry.get("title"));
|
||||
processDefinition.setDescription((String) entry.get("description"));
|
||||
processDefinition.setCategory((String) entry.get("category"));
|
||||
processDefinition.setStartFormResourceKey((String) entry.get("startFormResourceKey"));
|
||||
processDefinition.setGraphicNotationDefined((Boolean) entry.get("graphicNotationDefined"));
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2012 Alfresco Software Limited.
|
||||
* Copyright (C) 2005-2013 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
@@ -29,6 +29,9 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.rest.api.tests.RepoService.TestNetwork;
|
||||
import org.alfresco.rest.api.tests.client.HttpResponse;
|
||||
import org.alfresco.rest.api.tests.client.PublicApiClient.ListResponse;
|
||||
import org.alfresco.rest.api.tests.client.PublicApiException;
|
||||
import org.alfresco.rest.api.tests.client.RequestContext;
|
||||
@@ -40,8 +43,7 @@ import org.junit.Test;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Tijs Rademakers
|
||||
* @author Frederik Heremans
|
||||
*/
|
||||
public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
@@ -57,11 +59,11 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
ListResponse<ProcessDefinition> processDefinitionsResponse = processDefinitionsClient.getProcessDefinitions(null);
|
||||
Map<String, ProcessDefinition> processDefinitionMap = getProcessDefinitionMapByKey(processDefinitionsResponse.getList());
|
||||
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiReviewPooled", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiParallelGroupReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiParallelReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiAdhoc", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReviewPooled"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelGroupReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(5, processDefinitionMap.size());
|
||||
|
||||
|
||||
@@ -74,16 +76,18 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
|
||||
assertNotNull(activitiDefinition);
|
||||
|
||||
ProcessDefinition adhocDefinition = processDefinitionMap.get(adhocKey);
|
||||
ProcessDefinition adhocDefinitionRest = processDefinitionMap.get("activitiAdhoc");
|
||||
|
||||
assertEquals(activitiDefinition.getId(), adhocDefinition.getId());
|
||||
assertEquals(activitiDefinition.getKey(), adhocDefinition.getKey());
|
||||
assertEquals(activitiDefinition.getDeploymentId(), adhocDefinition.getDeploymentId());
|
||||
assertEquals(activitiDefinition.getCategory(), adhocDefinition.getCategory());
|
||||
assertEquals(activitiDefinition.getName(), adhocDefinition.getName());
|
||||
assertEquals(activitiDefinition.getVersion(), adhocDefinition.getVersion());
|
||||
assertEquals(((ProcessDefinitionEntity) activitiDefinition).isGraphicalNotationDefined(), adhocDefinition.isGraphicNotationDefined());
|
||||
assertEquals("wf:submitAdhocTask", adhocDefinition.getStartFormResourceKey());
|
||||
assertEquals(activitiDefinition.getId(), adhocDefinitionRest.getId());
|
||||
assertEquals("activitiAdhoc", adhocDefinitionRest.getKey());
|
||||
assertEquals(activitiDefinition.getDeploymentId(), adhocDefinitionRest.getDeploymentId());
|
||||
assertEquals(activitiDefinition.getCategory(), adhocDefinitionRest.getCategory());
|
||||
assertEquals(activitiDefinition.getName(), adhocDefinitionRest.getName());
|
||||
assertEquals(activitiDefinition.getVersion(), adhocDefinitionRest.getVersion());
|
||||
assertEquals(((ProcessDefinitionEntity) activitiDefinition).isGraphicalNotationDefined(), adhocDefinitionRest.isGraphicNotationDefined());
|
||||
assertEquals("wf:submitAdhocTask", adhocDefinitionRest.getStartFormResourceKey());
|
||||
assertEquals("New Task", adhocDefinitionRest.getTitle());
|
||||
assertEquals("Assign a new task to yourself or a colleague", adhocDefinitionRest.getDescription());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -104,11 +108,11 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
// Filter on category equals
|
||||
Map<String, ProcessDefinition> processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(category = 'http://alfresco.org')");
|
||||
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiReviewPooled", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiParallelGroupReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiParallelReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiAdhoc", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReviewPooled"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelGroupReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(5, processDefinitionMap.size());
|
||||
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(category = 'unexisting')");
|
||||
@@ -116,15 +120,15 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
|
||||
// Filter on name equals
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(name = 'Adhoc Activiti Process')");
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiAdhoc", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(1, processDefinitionMap.size());
|
||||
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(name = 'unexisting')");
|
||||
assertEquals(0, processDefinitionMap.size());
|
||||
|
||||
// Filter on key equals
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(key='" + adhocKey +"')");
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiAdhoc", requestContext)));
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(key='activitiAdhoc')");
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(1, processDefinitionMap.size());
|
||||
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(key='unexisting')");
|
||||
@@ -139,7 +143,7 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
|
||||
// Filter on deploymentId equals
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(deploymentId='" + activitiDefinition.getDeploymentId() + "')");
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiAdhoc", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(1, processDefinitionMap.size());
|
||||
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(deploymentId='unexisting')");
|
||||
@@ -148,11 +152,11 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
// Filter on category matches
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(category matches('%alfresco.o%'))");
|
||||
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiReviewPooled", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiParallelGroupReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiParallelReview", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiAdhoc", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReviewPooled"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelGroupReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(5, processDefinitionMap.size());
|
||||
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(category matches('unexisting'))");
|
||||
@@ -160,15 +164,15 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
|
||||
// Filter on name matches
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(name matches('Adhoc Activiti %'))");
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiAdhoc", requestContext)));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(1, processDefinitionMap.size());
|
||||
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(name matches('unexisting'))");
|
||||
assertEquals(0, processDefinitionMap.size());
|
||||
|
||||
// Filter on key matches
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(key matches('" + adhocKey.substring(0, adhocKey.length() - 3) +"%'))");
|
||||
assertTrue(processDefinitionMap.containsKey(createProcessDefinitionKey("activitiAdhoc", requestContext)));
|
||||
processDefinitionMap = getProcessDefinitions(processDefinitionsClient, "(key matches('activitiAd%'))");
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(1, processDefinitionMap.size());
|
||||
|
||||
}
|
||||
@@ -193,7 +197,7 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
|
||||
// Check fields of a resulting process-definition
|
||||
assertEquals(activitiDefinition.getId(), adhocDefinition.getId());
|
||||
assertEquals(activitiDefinition.getKey(), adhocDefinition.getKey());
|
||||
assertEquals("activitiAdhoc", adhocDefinition.getKey());
|
||||
assertEquals(activitiDefinition.getDeploymentId(), adhocDefinition.getDeploymentId());
|
||||
assertEquals(activitiDefinition.getCategory(), adhocDefinition.getCategory());
|
||||
assertEquals(activitiDefinition.getName(), adhocDefinition.getName());
|
||||
@@ -254,10 +258,10 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
// Check well-known properties and their types
|
||||
|
||||
// Validate bpm:description
|
||||
JSONObject modelEntry = modelFieldsByName.get("bpm_description");
|
||||
JSONObject modelEntry = modelFieldsByName.get("bpm_workflowDescription");
|
||||
assertNotNull(modelEntry);
|
||||
assertEquals("Description", modelEntry.get("title"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}description", modelEntry.get("qualifiedName"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}workflowDescription", modelEntry.get("qualifiedName"));
|
||||
assertEquals("d:text", modelEntry.get("dataType"));
|
||||
assertFalse((Boolean)modelEntry.get("required"));
|
||||
|
||||
@@ -286,13 +290,13 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
assertFalse((Boolean)modelEntry.get("required"));
|
||||
|
||||
// Validate bpm:priority
|
||||
modelEntry = modelFieldsByName.get("bpm_priority");
|
||||
modelEntry = modelFieldsByName.get("bpm_workflowPriority");
|
||||
assertNotNull(modelEntry);
|
||||
assertEquals("Priority", modelEntry.get("title"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}priority", modelEntry.get("qualifiedName"));
|
||||
assertEquals("Workflow Priority", modelEntry.get("title"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}workflowPriority", modelEntry.get("qualifiedName"));
|
||||
assertEquals("d:int", modelEntry.get("dataType"));
|
||||
assertEquals("2", modelEntry.get("defaultValue"));
|
||||
assertTrue((Boolean)modelEntry.get("required"));
|
||||
assertFalse((Boolean)modelEntry.get("required"));
|
||||
|
||||
// Validate bpm:package
|
||||
modelEntry = modelFieldsByName.get("bpm_package");
|
||||
@@ -301,6 +305,196 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}package", modelEntry.get("qualifiedName"));
|
||||
assertEquals("bpm:workflowPackage", modelEntry.get("dataType"));
|
||||
assertFalse((Boolean)modelEntry.get("required"));
|
||||
|
||||
// Validate bpm:status
|
||||
modelEntry = modelFieldsByName.get("bpm_status");
|
||||
assertNotNull(modelEntry);
|
||||
assertEquals("Status", modelEntry.get("title"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}status", modelEntry.get("qualifiedName"));
|
||||
assertEquals("d:text", modelEntry.get("dataType"));
|
||||
assertEquals("Not Yet Started", modelEntry.get("defaultValue"));
|
||||
assertTrue((Boolean)modelEntry.get("required"));
|
||||
JSONArray allowedValues = (JSONArray) modelEntry.get("allowedValues");
|
||||
assertNotNull(allowedValues);
|
||||
assertEquals(5, allowedValues.size());
|
||||
assertTrue(allowedValues.contains("Not Yet Started"));
|
||||
assertTrue(allowedValues.contains("In Progress"));
|
||||
assertTrue(allowedValues.contains("On Hold"));
|
||||
assertTrue(allowedValues.contains("Cancelled"));
|
||||
assertTrue(allowedValues.contains("Completed"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProcessDefinitionStartModelUnexisting() throws Exception
|
||||
{
|
||||
initApiClientWithTestUser();
|
||||
ProcessDefinitionsClient processDefinitionsClient = publicApiClient.processDefinitionsClient();
|
||||
try
|
||||
{
|
||||
processDefinitionsClient.findStartFormModel("unexisting");
|
||||
fail("Exception expected");
|
||||
}
|
||||
catch(PublicApiException expected)
|
||||
{
|
||||
assertEquals(HttpStatus.NOT_FOUND.value(), expected.getHttpResponse().getStatusCode());
|
||||
assertErrorSummary("The entity with id: unexisting was not found", expected.getHttpResponse());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMethodNotAllowedURIs() throws Exception
|
||||
{
|
||||
RequestContext requestContext = initApiClientWithTestUser();
|
||||
HttpResponse response = publicApiClient.get("public", "process-definitions", null, null, null, null);
|
||||
assertEquals(200, response.getStatusCode());
|
||||
response = publicApiClient.post("public", "process-definitions", null, null, null, null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
response = publicApiClient.delete("public", "process-definitions", null, null, null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
response = publicApiClient.put("public", "process-definitions", null, null, null, null, null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
|
||||
String adhocKey = createProcessDefinitionKey("activitiAdhoc", requestContext);
|
||||
org.activiti.engine.repository.ProcessDefinition processDefinition = activitiProcessEngine.getRepositoryService()
|
||||
.createProcessDefinitionQuery()
|
||||
.processDefinitionKey(adhocKey)
|
||||
.singleResult();
|
||||
|
||||
assertNotNull(processDefinition);
|
||||
|
||||
response = publicApiClient.get("public", "process-definitions", processDefinition.getId(), null, null, null);
|
||||
assertEquals(200, response.getStatusCode());
|
||||
response = publicApiClient.post("public", "process-definitions", processDefinition.getId(), null, null, null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
response = publicApiClient.delete("public", "process-definitions", processDefinition.getId(), null, null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
response = publicApiClient.put("public", "process-definitions", processDefinition.getId(), null, null, null, null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
|
||||
response = publicApiClient.get("public", "process-definitions", processDefinition.getId(), "start-form-model", null, null);
|
||||
assertEquals(200, response.getStatusCode());
|
||||
response = publicApiClient.post("public", "process-definitions", processDefinition.getId(), "start-form-model", null, null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
response = publicApiClient.delete("public", "process-definitions", processDefinition.getId(), "start-form-model", null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
response = publicApiClient.put("public", "process-definitions", processDefinition.getId(), "start-form-model", null, null, null);
|
||||
assertEquals(405, response.getStatusCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAuthenticationAndAuthorization() throws Exception
|
||||
{
|
||||
// Fetching process definitions as admin should be possible
|
||||
RequestContext requestContext = initApiClientWithTestUser();
|
||||
String tenantAdmin = AuthenticationUtil.getAdminUserName() + "@" + requestContext.getNetworkId();
|
||||
publicApiClient.setRequestContext(new RequestContext(requestContext.getNetworkId(), tenantAdmin));
|
||||
|
||||
ProcessDefinitionsClient processDefinitionsClient = publicApiClient.processDefinitionsClient();
|
||||
ListResponse<ProcessDefinition> processDefinitionsResponse = processDefinitionsClient.getProcessDefinitions(null);
|
||||
Map<String, ProcessDefinition> processDefinitionMap = getProcessDefinitionMapByKey(processDefinitionsResponse.getList());
|
||||
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReviewPooled"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelGroupReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(5, processDefinitionMap.size());
|
||||
|
||||
// Fetching process definitions as admin from another tenant shouldn't be possible
|
||||
TestNetwork anotherNetwork = getOtherNetwork(requestContext.getNetworkId());
|
||||
tenantAdmin = AuthenticationUtil.getAdminUserName() + "@" + anotherNetwork.getId();
|
||||
RequestContext otherContext = new RequestContext(anotherNetwork.getId(), tenantAdmin);
|
||||
publicApiClient.setRequestContext(otherContext);
|
||||
|
||||
processDefinitionsResponse = processDefinitionsClient.getProcessDefinitions(null);
|
||||
processDefinitionMap = getProcessDefinitionMapByKey(processDefinitionsResponse.getList());
|
||||
|
||||
// the response should contain process definitions from the new tenant
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReviewPooled"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelGroupReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiParallelReview"));
|
||||
assertTrue(processDefinitionMap.containsKey("activitiAdhoc"));
|
||||
assertEquals(5, processDefinitionMap.size());
|
||||
|
||||
// Fetching a specific process definitions as admin should be possible
|
||||
publicApiClient.setRequestContext(requestContext);
|
||||
|
||||
String adhocKey = createProcessDefinitionKey("activitiAdhoc", requestContext);
|
||||
org.activiti.engine.repository.ProcessDefinition activitiDefinition = activitiProcessEngine.getRepositoryService()
|
||||
.createProcessDefinitionQuery()
|
||||
.processDefinitionKey(adhocKey)
|
||||
.singleResult();
|
||||
|
||||
assertNotNull(activitiDefinition);
|
||||
|
||||
// Get a single process definitions
|
||||
ProcessDefinition adhocDefinition = processDefinitionsClient.findProcessDefinitionById(activitiDefinition.getId());
|
||||
assertNotNull(adhocDefinition);
|
||||
|
||||
// Check fields of a resulting process-definition
|
||||
assertEquals(activitiDefinition.getId(), adhocDefinition.getId());
|
||||
assertEquals("activitiAdhoc", adhocDefinition.getKey());
|
||||
assertEquals(activitiDefinition.getDeploymentId(), adhocDefinition.getDeploymentId());
|
||||
assertEquals(activitiDefinition.getCategory(), adhocDefinition.getCategory());
|
||||
assertEquals(activitiDefinition.getName(), adhocDefinition.getName());
|
||||
assertEquals(activitiDefinition.getVersion(), adhocDefinition.getVersion());
|
||||
assertEquals(((ProcessDefinitionEntity) activitiDefinition).isGraphicalNotationDefined(), adhocDefinition.isGraphicNotationDefined());
|
||||
assertEquals("wf:submitAdhocTask", adhocDefinition.getStartFormResourceKey());
|
||||
|
||||
// Fetching a specific process definitions as admin from another tenant should not be possible
|
||||
publicApiClient.setRequestContext(otherContext);
|
||||
try
|
||||
{
|
||||
adhocDefinition = processDefinitionsClient.findProcessDefinitionById(activitiDefinition.getId());
|
||||
fail("not found expected");
|
||||
}
|
||||
catch (PublicApiException e)
|
||||
{
|
||||
assertEquals(HttpStatus.NOT_FOUND.value(), e.getHttpResponse().getStatusCode());
|
||||
}
|
||||
|
||||
// Fetching the start form model of a process definition as admin should be possible
|
||||
publicApiClient.setRequestContext(requestContext);
|
||||
JSONObject model = processDefinitionsClient.findStartFormModel(activitiDefinition.getId());
|
||||
assertNotNull(model);
|
||||
|
||||
JSONArray entries = (JSONArray) model.get("entries");
|
||||
assertNotNull(entries);
|
||||
|
||||
// Add all entries to a map, to make lookup easier
|
||||
Map<String, JSONObject> modelFieldsByName = new HashMap<String, JSONObject>();
|
||||
JSONObject entry = null;
|
||||
for(int i=0; i<entries.size(); i++)
|
||||
{
|
||||
entry = (JSONObject) entries.get(i);
|
||||
assertNotNull(entry);
|
||||
entry = (JSONObject) entry.get("entry");
|
||||
assertNotNull(entry);
|
||||
modelFieldsByName.put((String) entry.get("name"), entry);
|
||||
}
|
||||
|
||||
// Check well-known properties and their types
|
||||
|
||||
// Validate bpm:description
|
||||
JSONObject modelEntry = modelFieldsByName.get("bpm_workflowDescription");
|
||||
assertNotNull(modelEntry);
|
||||
assertEquals("Description", modelEntry.get("title"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}workflowDescription", modelEntry.get("qualifiedName"));
|
||||
assertEquals("d:text", modelEntry.get("dataType"));
|
||||
assertFalse((Boolean)modelEntry.get("required"));
|
||||
|
||||
// Fetching a specific process definitions as admin from another tenant should not be possible
|
||||
publicApiClient.setRequestContext(otherContext);
|
||||
try
|
||||
{
|
||||
model = processDefinitionsClient.findStartFormModel(activitiDefinition.getId());
|
||||
fail("not found expected");
|
||||
}
|
||||
catch (PublicApiException e)
|
||||
{
|
||||
assertEquals(HttpStatus.NOT_FOUND.value(), e.getHttpResponse().getStatusCode());
|
||||
}
|
||||
}
|
||||
|
||||
protected String createProcessDefinitionKey(String key, RequestContext requestContext)
|
||||
@@ -325,6 +519,7 @@ public class ProcessDefinitionWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
{
|
||||
params = Collections.singletonMap("where", whereClause);
|
||||
}
|
||||
|
||||
ListResponse<ProcessDefinition> processDefinitionsResponse = processDefinitionsClient.getProcessDefinitions(params);
|
||||
return getProcessDefinitionMapByKey(processDefinitionsResponse.getList());
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -38,10 +38,14 @@ public class ProcessesParser extends ListParser<ProcessInfo>
|
||||
processesRest.setProcessDefinitionKey((String) entry.get("processDefinitionKey"));
|
||||
processesRest.setStartedAt(WorkflowApiClient.parseDate(entry, "startedAt"));
|
||||
processesRest.setEndedAt(WorkflowApiClient.parseDate(entry, "endedAt"));
|
||||
processesRest.setDurationInMillis((Long) entry.get("durationInMillis"));
|
||||
processesRest.setDurationInMs((Long) entry.get("durationInMs"));
|
||||
processesRest.setDeleteReason((String) entry.get("deleteReason"));
|
||||
processesRest.setBusinessKey((String) entry.get("businessKey"));
|
||||
processesRest.setSuperProcessInstanceId((String) entry.get("superProcessInstanceId"));
|
||||
processesRest.setStartActivityId((String) entry.get("startActivityId"));
|
||||
processesRest.setStartUserId((String) entry.get("startUserId"));
|
||||
processesRest.setEndActivityId((String) entry.get("endActivityId"));
|
||||
processesRest.setCompleted((Boolean) entry.get("completed"));
|
||||
processesRest.setVariables((Map<String,Object>) entry.get("variables"));
|
||||
processesRest.setItems((Set<String>) entry.get("item"));
|
||||
return processesRest;
|
||||
|
@@ -31,7 +31,6 @@ import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -50,7 +49,6 @@ import org.alfresco.repo.workflow.WorkflowConstants;
|
||||
import org.alfresco.repo.workflow.activiti.ActivitiConstants;
|
||||
import org.alfresco.repo.workflow.activiti.ActivitiScriptNode;
|
||||
import org.alfresco.rest.api.tests.RepoService.TestNetwork;
|
||||
import org.alfresco.rest.api.tests.RepoService.TestPerson;
|
||||
import org.alfresco.rest.api.tests.client.PublicApiException;
|
||||
import org.alfresco.rest.api.tests.client.RequestContext;
|
||||
import org.alfresco.rest.api.tests.client.data.MemberOfSite;
|
||||
@@ -806,6 +804,53 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void testChangeDueDate() throws Exception
|
||||
{
|
||||
RequestContext requestContext = initApiClientWithTestUser();
|
||||
ProcessInstance processInstance = startAdhocProcess(requestContext.getRunAsUser(), requestContext.getNetworkId(), null);
|
||||
try
|
||||
{
|
||||
Task task = activitiProcessEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
|
||||
|
||||
TasksClient tasksClient = publicApiClient.tasksClient();
|
||||
JSONObject taskObject = tasksClient.findTaskById(task.getId());
|
||||
assertNull(taskObject.get("dueAt"));
|
||||
|
||||
List<String> selectedFields = new ArrayList<String>();
|
||||
selectedFields.addAll(Arrays.asList(new String[] { "name", "description", "dueAt", "priority", "assignee", "owner"}));
|
||||
|
||||
// set due date
|
||||
JSONObject taskBody = new JSONObject();
|
||||
String dueAt = formatDate(new Date());
|
||||
taskBody.put("dueAt", dueAt);
|
||||
tasksClient.updateTask(task.getId(), taskBody, selectedFields);
|
||||
|
||||
taskObject = tasksClient.findTaskById(task.getId());
|
||||
assertNotNull(taskObject.get("dueAt"));
|
||||
|
||||
taskBody = new JSONObject();
|
||||
taskBody.put("dueAt", taskObject.get("dueAt"));
|
||||
tasksClient.updateTask(task.getId(), taskBody, selectedFields);
|
||||
|
||||
taskObject = tasksClient.findTaskById(task.getId());
|
||||
assertNotNull(taskObject.get("dueAt"));
|
||||
|
||||
JSONObject variableBody = new JSONObject();
|
||||
variableBody.put("name", "bpm_workflowDueDate");
|
||||
variableBody.put("value", formatDate(new Date()));
|
||||
variableBody.put("type", "d:datetime");
|
||||
variableBody.put("scope", "global");
|
||||
|
||||
tasksClient.updateTaskVariable(task.getId(), "bpm_workflowDueDate", variableBody);
|
||||
}
|
||||
finally
|
||||
{
|
||||
cleanupProcessInstance(processInstance);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTasks() throws Exception
|
||||
{
|
||||
@@ -922,27 +967,28 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
activitiProcessEngine.getTaskService().saveTask(activeTask);
|
||||
activitiProcessEngine.getTaskService().addCandidateUser(activeTask.getId(), anotherUserId);
|
||||
activitiProcessEngine.getTaskService().addCandidateGroup(activeTask.getId(), "sales");
|
||||
activitiProcessEngine.getTaskService().setVariableLocal(activeTask.getId(), "numberVar", 10);
|
||||
|
||||
TasksClient tasksClient = publicApiClient.tasksClient();
|
||||
|
||||
// Test status filtering - active
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
params.put("where", "(status = 'active' AND processInstanceId = '" + processInstance.getId() + "')");
|
||||
params.put("where", "(status = 'active' AND processId = '" + processInstance.getId() + "')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, false, activeTask.getId());
|
||||
|
||||
// Test status filtering - completed
|
||||
params.clear();
|
||||
params.put("where", "(status = 'completed' AND processInstanceId = '" + processInstance.getId() + "')");
|
||||
params.put("where", "(status = 'completed' AND processId = '" + processInstance.getId() + "')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, false, completedTask.getId());
|
||||
|
||||
// Test status filtering - any
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND processInstanceId = '" + processInstance.getId() + "')");
|
||||
params.put("where", "(status = 'any' AND processId = '" + processInstance.getId() + "')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, false, activeTask.getId(), completedTask.getId());
|
||||
|
||||
// Test status filtering - no value should default to 'active'
|
||||
params.clear();
|
||||
params.put("where", "(processInstanceId = '" + processInstance.getId() + "')");
|
||||
params.put("where", "(processId = '" + processInstance.getId() + "')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, false, activeTask.getId());
|
||||
|
||||
// Test status filtering - illegal status
|
||||
@@ -1021,11 +1067,11 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
|
||||
// Candidate group filtering, only available for active tasks. When used with completed/any 400 is returned
|
||||
params.clear();
|
||||
params.put("where", "(status = 'active' AND candidateGroup = 'sales' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'active' AND candidateGroup = 'sales' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'completed' AND candidateGroup = 'sales' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'completed' AND candidateGroup = 'sales' AND processId='" + processInstance.getId() +"')");
|
||||
try
|
||||
{
|
||||
tasksClient.findTasks(params);
|
||||
@@ -1038,7 +1084,7 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
}
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND candidateGroup = 'sales' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'any' AND candidateGroup = 'sales' AND processId='" + processInstance.getId() +"')");
|
||||
try
|
||||
{
|
||||
tasksClient.findTasks(params);
|
||||
@@ -1052,94 +1098,94 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
|
||||
// Name filtering
|
||||
params.clear();
|
||||
params.put("where", "(status = 'active' AND name = 'Task name' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'active' AND name = 'Task name' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'completed' AND name = 'Another task name' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'completed' AND name = 'Another task name' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND name = 'Another task name' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'any' AND name = 'Another task name' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
// Description filtering
|
||||
params.clear();
|
||||
params.put("where", "(status = 'active' AND description = 'This is a test description' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'active' AND description = 'This is a test description' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'completed' AND description = 'This is another test description' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'completed' AND description = 'This is another test description' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND description = 'This is another test description' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'any' AND description = 'This is another test description' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
// Priority filtering
|
||||
params.clear();
|
||||
params.put("where", "(status = 'active' AND priority = 2 AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'active' AND priority = 2 AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.put("where", "(status = 'completed' AND priority = 3 AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'completed' AND priority = 3 AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
params.put("where", "(status = 'any' AND priority = 3 AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'any' AND priority = 3 AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
// Process instance business-key filtering
|
||||
params.clear();
|
||||
params.put("where", "(status = 'active' AND processInstanceBusinessKey = '" + businessKey + "')");
|
||||
params.put("where", "(status = 'active' AND processBusinessKey = '" + businessKey + "')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'completed' AND processInstanceBusinessKey = '" + businessKey + "')");
|
||||
params.put("where", "(status = 'completed' AND processBusinessKey = '" + businessKey + "')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND processInstanceBusinessKey = '" + businessKey + "')");
|
||||
params.put("where", "(status = 'any' AND processBusinessKey = '" + businessKey + "')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId(), activeTask.getId());
|
||||
|
||||
// Activity definition id filtering
|
||||
params.clear();
|
||||
params.put("where", "(status = 'active' AND activityDefinitionId = 'verifyTaskDone' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'active' AND activityDefinitionId = 'verifyTaskDone' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'completed' AND activityDefinitionId = 'adhocTask' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'completed' AND activityDefinitionId = 'adhocTask' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND activityDefinitionId = 'adhocTask' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'any' AND activityDefinitionId = 'adhocTask' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
// Process definition id filtering
|
||||
params.clear();
|
||||
params.put("where", "(status = 'active' AND processDefinitionId = '" + processInstance.getProcessDefinitionId() +
|
||||
"' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
"' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'completed' AND processDefinitionId = '" + processInstance.getProcessDefinitionId() +
|
||||
"' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
"' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND processDefinitionId = '" + processInstance.getProcessDefinitionId() +
|
||||
"' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
"' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId(), completedTask.getId());
|
||||
|
||||
// Process definition name filerting
|
||||
params.clear();
|
||||
params.put("where", "(status = 'active' AND processDefinitionName = 'Adhoc Activiti Process' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'active' AND processDefinitionName = 'Adhoc Activiti Process' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'completed' AND processDefinitionName = 'Adhoc Activiti Process' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'completed' AND processDefinitionName = 'Adhoc Activiti Process' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND processDefinitionName = 'Adhoc Activiti Process' AND processInstanceId='" + processInstance.getId() +"')");
|
||||
params.put("where", "(status = 'any' AND processDefinitionName = 'Adhoc Activiti Process' AND processId='" + processInstance.getId() +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId(), completedTask.getId());
|
||||
|
||||
// Due date filtering
|
||||
@@ -1167,6 +1213,38 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
params.clear();
|
||||
params.put("where", "(status = 'any' AND startedAt = '" + ISO8601DateFormat.format(taskCreated.getTime()) +"')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, completedTask.getId(), activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(variables/numberVar > 'd:int 5')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(variables/numberVar > 'd:int 10')");
|
||||
assertEquals(0, getResultSizeForTaskQuery(params, tasksClient));
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(variables/numberVar >= 'd_int 10')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(variables/numberVar >= 'd:int 11')");
|
||||
assertEquals(0, getResultSizeForTaskQuery(params, tasksClient));
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(variables/numberVar <= 'd:int 10')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(variables/numberVar <= 'd:int 9')");
|
||||
assertEquals(0, getResultSizeForTaskQuery(params, tasksClient));
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(variables/numberVar < 'd_int 15')");
|
||||
assertTasksPresentInTaskQuery(params, tasksClient, activeTask.getId());
|
||||
|
||||
params.clear();
|
||||
params.put("where", "(variables/numberVar < 'd:int 10')");
|
||||
assertEquals(0, getResultSizeForTaskQuery(params, tasksClient));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1240,7 +1318,7 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
TasksClient tasksClient = publicApiClient.tasksClient();
|
||||
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
params.put("processInstanceId", processInstance.getId());
|
||||
params.put("processId", processInstance.getId());
|
||||
|
||||
JSONObject resultingTasks = tasksClient.findTasks(params);
|
||||
assertNotNull(resultingTasks);
|
||||
@@ -1864,6 +1942,64 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void testCreateTaskVariablesPresentInModel() throws Exception
|
||||
{
|
||||
RequestContext requestContext = initApiClientWithTestUser();
|
||||
|
||||
ProcessInstance processInstance = startAdhocProcess(requestContext.getRunAsUser(), requestContext.getNetworkId(), null);
|
||||
try
|
||||
{
|
||||
Task task = activitiProcessEngine.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
|
||||
assertNotNull(task);
|
||||
|
||||
Map<String, Object> actualLocalVariables = activitiProcessEngine.getTaskService().getVariablesLocal(task.getId());
|
||||
Map<String, Object> actualGlobalVariables = activitiProcessEngine.getRuntimeService().getVariables(processInstance.getId());
|
||||
assertEquals(5, actualGlobalVariables.size());
|
||||
assertEquals(7, actualLocalVariables.size());
|
||||
|
||||
// Update a global value that is present in the model with type given
|
||||
JSONArray variablesArray = new JSONArray();
|
||||
JSONObject variableBody = new JSONObject();
|
||||
variableBody.put("name", "bpm_percentComplete");
|
||||
variableBody.put("value", 20);
|
||||
variableBody.put("type", "d:int");
|
||||
variableBody.put("scope", "global");
|
||||
variablesArray.add(variableBody);
|
||||
variableBody = new JSONObject();
|
||||
variableBody.put("name", "bpm_workflowPriority");
|
||||
variableBody.put("value", 50);
|
||||
variableBody.put("type", "d:int");
|
||||
variableBody.put("scope", "local");
|
||||
variablesArray.add(variableBody);
|
||||
|
||||
TasksClient tasksClient = publicApiClient.tasksClient();
|
||||
JSONObject result = tasksClient.createTaskVariables(task.getId(), variablesArray);
|
||||
assertNotNull(result);
|
||||
JSONObject resultObject = (JSONObject) result.get("list");
|
||||
JSONArray resultList = (JSONArray) resultObject.get("entries");
|
||||
assertEquals(2, resultList.size());
|
||||
JSONObject firstResultObject = (JSONObject) ((JSONObject) resultList.get(0)).get("entry");
|
||||
assertEquals("bpm_percentComplete", firstResultObject.get("name"));
|
||||
assertEquals(20L, firstResultObject.get("value"));
|
||||
assertEquals("d:int", firstResultObject.get("type"));
|
||||
assertEquals("global", firstResultObject.get("scope"));
|
||||
assertEquals(20, activitiProcessEngine.getRuntimeService().getVariable(processInstance.getId(), "bpm_percentComplete"));
|
||||
|
||||
JSONObject secondResultObject = (JSONObject) ((JSONObject) resultList.get(1)).get("entry");
|
||||
assertEquals("bpm_workflowPriority", secondResultObject.get("name"));
|
||||
assertEquals(50L, secondResultObject.get("value"));
|
||||
assertEquals("d:int", secondResultObject.get("type"));
|
||||
assertEquals("local", secondResultObject.get("scope"));
|
||||
assertEquals(50, activitiProcessEngine.getTaskService().getVariable(task.getId(), "bpm_workflowPriority"));
|
||||
}
|
||||
finally
|
||||
{
|
||||
cleanupProcessInstance(processInstance);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskVariablesRawVariableTypes() throws Exception
|
||||
{
|
||||
@@ -2244,16 +2380,8 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
|
||||
// Check well-known properties and their types
|
||||
|
||||
// Validate bpm:description
|
||||
JSONObject modelEntry = modelFieldsByName.get("bpm_description");
|
||||
assertNotNull(modelEntry);
|
||||
assertEquals("Description", modelEntry.get("title"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}description", modelEntry.get("qualifiedName"));
|
||||
assertEquals("d:text", modelEntry.get("dataType"));
|
||||
assertFalse((Boolean)modelEntry.get("required"));
|
||||
|
||||
// Validate bpm:description
|
||||
modelEntry = modelFieldsByName.get("bpm_completionDate");
|
||||
// Validate bpm:completionDate
|
||||
JSONObject modelEntry = modelFieldsByName.get("bpm_completionDate");
|
||||
assertNotNull(modelEntry);
|
||||
assertEquals("Completion Date", modelEntry.get("title"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}completionDate", modelEntry.get("qualifiedName"));
|
||||
@@ -2268,15 +2396,6 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
assertEquals("d:text", modelEntry.get("dataType"));
|
||||
assertFalse((Boolean)modelEntry.get("required"));
|
||||
|
||||
// Validate bpm:priority
|
||||
modelEntry = modelFieldsByName.get("bpm_priority");
|
||||
assertNotNull(modelEntry);
|
||||
assertEquals("Priority", modelEntry.get("title"));
|
||||
assertEquals("{http://www.alfresco.org/model/bpm/1.0}priority", modelEntry.get("qualifiedName"));
|
||||
assertEquals("d:int", modelEntry.get("dataType"));
|
||||
assertEquals("2", modelEntry.get("defaultValue"));
|
||||
assertTrue((Boolean)modelEntry.get("required"));
|
||||
|
||||
// Validate bpm:package
|
||||
modelEntry = modelFieldsByName.get("bpm_package");
|
||||
assertNotNull(modelEntry);
|
||||
@@ -2322,7 +2441,7 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
JSONObject entryJSON = (JSONObject) entryObjectJSON.get("entry");
|
||||
if (entryJSON.get("name").equals("Test Doc1")) {
|
||||
doc1Found = true;
|
||||
assertEquals(docNodeRefs[0].toString(), entryJSON.get("id"));
|
||||
assertEquals(docNodeRefs[0].getId(), entryJSON.get("id"));
|
||||
assertEquals("Test Doc1", entryJSON.get("name"));
|
||||
assertEquals("Test Doc1 Title", entryJSON.get("title"));
|
||||
assertEquals("Test Doc1 Description", entryJSON.get("description"));
|
||||
@@ -2334,7 +2453,7 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
assertNotNull(entryJSON.get("mimeType"));
|
||||
} else {
|
||||
doc2Found = true;
|
||||
assertEquals(docNodeRefs[1].toString(), entryJSON.get("id"));
|
||||
assertEquals(docNodeRefs[1].getId(), entryJSON.get("id"));
|
||||
assertEquals("Test Doc2", entryJSON.get("name"));
|
||||
assertEquals("Test Doc2 Title", entryJSON.get("title"));
|
||||
assertEquals("Test Doc2 Description", entryJSON.get("description"));
|
||||
@@ -2430,27 +2549,4 @@ public class TaskWorkflowApiTest extends EnterpriseWorkflowTestApi
|
||||
log("Error while cleaning up process instance");
|
||||
}
|
||||
}
|
||||
|
||||
protected TestNetwork getOtherNetwork(String usedNetworkId) throws Exception {
|
||||
Iterator<TestNetwork> networkIt = getTestFixture().getNetworksIt();
|
||||
while(networkIt.hasNext()) {
|
||||
TestNetwork network = networkIt.next();
|
||||
if(!usedNetworkId.equals(network.getId())) {
|
||||
return network;
|
||||
}
|
||||
}
|
||||
fail("Need more than one network to test permissions");
|
||||
return null;
|
||||
}
|
||||
|
||||
protected TestPerson getOtherPersonInNetwork(String usedPerson, String networkId) throws Exception {
|
||||
TestNetwork usedNetwork = getTestFixture().getNetwork(networkId);
|
||||
for(TestPerson person : usedNetwork.getPeople()) {
|
||||
if(!person.getId().equals(usedPerson)) {
|
||||
return person;
|
||||
}
|
||||
}
|
||||
fail("Network doesn't have additonal users, cannot perform test");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@@ -16,6 +16,7 @@ import org.alfresco.rest.workflow.api.model.Deployment;
|
||||
import org.alfresco.rest.workflow.api.model.ProcessDefinition;
|
||||
import org.alfresco.rest.workflow.api.model.ProcessInfo;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class WorkflowApiClient extends PublicApiClient
|
||||
@@ -143,6 +144,20 @@ public class WorkflowApiClient extends PublicApiClient
|
||||
return ProcessesParser.INSTANCE.parseEntry(entry);
|
||||
}
|
||||
|
||||
public JSONObject getTasks(String processInstanceId, Map<String, String> params) throws PublicApiException
|
||||
{
|
||||
HttpResponse response = getAll("processes", processInstanceId, "tasks", null, params, "Failed to get task instances of processInstanceId " + processInstanceId);
|
||||
JSONObject list = (JSONObject) response.getJsonResponse().get("list");
|
||||
return list;
|
||||
}
|
||||
|
||||
public JSONObject getActivities(String processInstanceId, Map<String, String> params) throws PublicApiException
|
||||
{
|
||||
HttpResponse response = getAll("processes", processInstanceId, "activities", null, params, "Failed to get activity instances of processInstanceId " + processInstanceId);
|
||||
JSONObject list = (JSONObject) response.getJsonResponse().get("list");
|
||||
return list;
|
||||
}
|
||||
|
||||
public JSONObject findProcessItems(String processInstanceId) throws PublicApiException
|
||||
{
|
||||
HttpResponse response = getAll("processes", processInstanceId, "items", null, null,
|
||||
@@ -159,6 +174,12 @@ public class WorkflowApiClient extends PublicApiClient
|
||||
return list;
|
||||
}
|
||||
|
||||
public JSONObject createVariables(String processId, JSONArray variables) throws PublicApiException
|
||||
{
|
||||
HttpResponse response = create("processes", processId, "variables", null, variables.toJSONString(), "Failed to create variables");
|
||||
return response.getJsonResponse();
|
||||
}
|
||||
|
||||
public JSONObject updateVariable(String processId, String variableName, JSONObject variable) throws PublicApiException
|
||||
{
|
||||
HttpResponse response = update("processes", processId, "variables", variableName, variable.toJSONString(), "Failed to update variable");
|
||||
@@ -170,6 +191,11 @@ public class WorkflowApiClient extends PublicApiClient
|
||||
remove("processes", processId, "variables", variableName, "Failed to delete variable");
|
||||
}
|
||||
|
||||
public void addProcessItem(String processId, String body) throws PublicApiException
|
||||
{
|
||||
create("processes", processId, "items", null, body, "Failed to add item");
|
||||
}
|
||||
|
||||
public void deleteProcessItem(String processId, String itemId) throws PublicApiException
|
||||
{
|
||||
remove("processes", processId, "items", itemId, "Failed to delete item");
|
||||
@@ -234,6 +260,12 @@ public class WorkflowApiClient extends PublicApiClient
|
||||
return findTaskVariables(taskId, null);
|
||||
}
|
||||
|
||||
public JSONObject createTaskVariables(String taskId, JSONArray variables) throws PublicApiException
|
||||
{
|
||||
HttpResponse response = create("tasks", taskId, "variables", null, variables.toJSONString(), "Failed to create task variables");
|
||||
return response.getJsonResponse();
|
||||
}
|
||||
|
||||
public JSONObject updateTaskVariable(String taskId, String variableName, JSONObject variable) throws PublicApiException
|
||||
{
|
||||
HttpResponse response = update("tasks", taskId, "variables", variableName, variable.toJSONString(), "Failed to update task variable");
|
||||
|
@@ -0,0 +1,14 @@
|
||||
package org.alfresco.rest.workflow.api.tests;
|
||||
|
||||
import org.alfresco.rest.api.tests.client.AuthenticatedHttp;
|
||||
import org.alfresco.rest.api.tests.client.PublicApiHttpClient;
|
||||
|
||||
public class WorkflowApiHttpClient extends PublicApiHttpClient
|
||||
{
|
||||
public WorkflowApiHttpClient(String host, int port, String contextPath, String servletName, AuthenticatedHttp authenticatedHttp)
|
||||
{
|
||||
super(host, port, contextPath, servletName, authenticatedHttp);
|
||||
apiName = "workflow";
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user