Search in sources :

Example 36 with ProcessInfo

use of org.alfresco.rest.workflow.api.model.ProcessInfo in project alfresco-remote-api by Alfresco.

the class ProcessWorkflowApiTest method testMNT12382.

@Test
public void testMNT12382() throws Exception {
    currentNetwork = getTestFixture().getRandomNetwork();
    TestPerson initiator = currentNetwork.getPeople().get(0);
    RequestContext requestContext = new RequestContext(currentNetwork.getId(), initiator.getId());
    publicApiClient.setRequestContext(requestContext);
    ProcessInfo processInfo = startReviewPooledProcess(requestContext);
    final List<TestPerson> persons = transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<List<TestPerson>>() {

        @SuppressWarnings("synthetic-access")
        public List<TestPerson> execute() throws Throwable {
            ArrayList<TestPerson> persons = new ArrayList<TestPerson>();
            persons.add(currentNetwork.createUser(new PersonInfo("Maxim0", "Bobyleu0", "maxim0.bobyleu0", "password", null, "skype", "location", "telephone", "mob", "instant", "google")));
            persons.add(currentNetwork.createUser(new PersonInfo("Maxim1", "Bobyleu1", "maxim1.bobyleu1", "password", null, "skype", "location", "telephone", "mob", "instant", "google")));
            persons.add(currentNetwork.createUser(new PersonInfo("Maxim2", "Bobyleu2", "maxim2.bobyleu2", "password", null, "skype", "location", "telephone", "mob", "instant", "google")));
            return persons;
        }
    }, false, true);
    final MemberOfSite memberOfSite = currentNetwork.getSiteMemberships(initiator.getId()).get(0);
    // startReviewPooledProcess() uses initiator's site id and role name for construct bpm_groupAssignee, thus we need appropriate things for created users
    transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>() {

        public Void execute() throws Throwable {
            TenantUtil.runAsUserTenant(new TenantRunAsWork<Void>() {

                @Override
                public Void doWork() throws Exception {
                    TestSite initiatorSite = (TestSite) memberOfSite.getSite();
                    initiatorSite.inviteToSite(persons.get(0).getId(), memberOfSite.getRole());
                    initiatorSite.inviteToSite(persons.get(1).getId(), memberOfSite.getRole());
                    // this user wouldn't be in group
                    initiatorSite.inviteToSite(persons.get(2).getId(), SiteRole.SiteConsumer == memberOfSite.getRole() ? SiteRole.SiteCollaborator : SiteRole.SiteConsumer);
                    return null;
                }
            }, AuthenticationUtil.getAdminUserName(), currentNetwork.getId());
            return null;
        }
    }, false, true);
    String processId = processInfo.getId();
    // getting process items by workflow initiator
    ProcessesClient processesClient = publicApiClient.processesClient();
    JSONObject initiatorItems = processesClient.findProcessItems(processId);
    // getting unclaimed process items by user in group
    requestContext = new RequestContext(currentNetwork.getId(), persons.get(0).getId());
    publicApiClient.setRequestContext(requestContext);
    JSONObject items1 = processesClient.findProcessItems(processId);
    assertEquals(initiatorItems.toJSONString(), items1.toJSONString());
    // getting unclaimed process items by user not in group
    requestContext = new RequestContext(currentNetwork.getId(), persons.get(2).getId());
    publicApiClient.setRequestContext(requestContext);
    try {
        JSONObject items2 = processesClient.findProcessItems(processId);
        fail("User not from group should not see items.");
    } catch (PublicApiException e) {
        // expected
        assertEquals(403, e.getHttpResponse().getStatusCode());
    }
    // claim task
    TaskService taskService = activitiProcessEngine.getTaskService();
    Task task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
    TestPerson assignee = persons.get(1);
    taskService.setAssignee(task.getId(), assignee.getId());
    // getting claimed process items by assignee
    requestContext = new RequestContext(currentNetwork.getId(), assignee.getId());
    publicApiClient.setRequestContext(requestContext);
    JSONObject items3 = processesClient.findProcessItems(processId);
    assertEquals(initiatorItems.toJSONString(), items3.toJSONString());
    // getting claimed process items by user in group
    requestContext = new RequestContext(currentNetwork.getId(), persons.get(0).getId());
    publicApiClient.setRequestContext(requestContext);
    try {
        JSONObject items4 = processesClient.findProcessItems(processId);
        fail("User from group should not see items for claimed task by another user.");
    } catch (PublicApiException e) {
        // expected
        assertEquals(403, e.getHttpResponse().getStatusCode());
    } finally {
        cleanupProcessInstance(processId);
    }
}
Also used : ProcessesClient(org.alfresco.rest.workflow.api.tests.WorkflowApiClient.ProcessesClient) Task(org.activiti.engine.task.Task) PersonInfo(org.alfresco.rest.api.tests.PersonInfo) RetryingTransactionHelper(org.alfresco.repo.transaction.RetryingTransactionHelper) TestSite(org.alfresco.rest.api.tests.RepoService.TestSite) TaskService(org.activiti.engine.TaskService) ArrayList(java.util.ArrayList) MemberOfSite(org.alfresco.rest.api.tests.client.data.MemberOfSite) ProcessInfo(org.alfresco.rest.workflow.api.model.ProcessInfo) PublicApiException(org.alfresco.rest.api.tests.client.PublicApiException) JSONObject(org.json.simple.JSONObject) TenantRunAsWork(org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork) ArrayList(java.util.ArrayList) List(java.util.List) RequestContext(org.alfresco.rest.api.tests.client.RequestContext) TestPerson(org.alfresco.rest.api.tests.RepoService.TestPerson) Test(org.junit.Test)

Example 37 with ProcessInfo

use of org.alfresco.rest.workflow.api.model.ProcessInfo in project alfresco-remote-api by Alfresco.

the class ProcessWorkflowApiTest method testGetProcessInstancesWithSorting.

@Test
public void testGetProcessInstancesWithSorting() throws Exception {
    final RequestContext requestContext = initApiClientWithTestUser();
    final ProcessInfo process1 = startAdhocProcess(requestContext, null, "akey");
    final ProcessInfo process2 = startAdhocProcess(requestContext, null, "bkey");
    final ProcessInfo process3 = startAdhocProcess(requestContext, null, "aakey");
    try {
        // sort on business key ascending
        ProcessesClient processesClient = publicApiClient.processesClient();
        Map<String, String> paramMap = new HashMap<String, String>();
        paramMap.put("orderBy", "businessKey ASC");
        ListResponse<ProcessInfo> processList = processesClient.getProcesses(paramMap);
        assertNotNull(processList);
        assertEquals(3, processList.getList().size());
        assertEquals(process3.getId(), processList.getList().get(0).getId());
        assertEquals(process1.getId(), processList.getList().get(1).getId());
        assertEquals(process2.getId(), processList.getList().get(2).getId());
        // sort on business key descending
        paramMap.put("orderBy", "businessKey DESC");
        processList = processesClient.getProcesses(paramMap);
        assertNotNull(processList);
        assertEquals(3, processList.getList().size());
        assertEquals(process2.getId(), processList.getList().get(0).getId());
        assertEquals(process1.getId(), processList.getList().get(1).getId());
        assertEquals(process3.getId(), processList.getList().get(2).getId());
        paramMap.put("orderBy", "startedAt ASC");
        processList = processesClient.getProcesses(paramMap);
        assertNotNull(processList);
        paramMap.put("orderBy", "endedAt ASC");
        processList = processesClient.getProcesses(paramMap);
        assertNotNull(processList);
        paramMap.put("orderBy", "durationInMillis ASC");
        processList = processesClient.getProcesses(paramMap);
        assertNotNull(processList);
        // sort on more than 1.
        paramMap.put("orderBy", "startedAt, endedAt");
        try {
            processList = processesClient.getProcesses(paramMap);
            fail();
        } catch (PublicApiException e) {
            assertEquals(HttpStatus.BAD_REQUEST.value(), e.getHttpResponse().getStatusCode());
        }
        // sort on non existing key
        paramMap.put("orderBy", "businessKey2 ASC");
        try {
            processList = processesClient.getProcesses(paramMap);
            fail();
        } catch (PublicApiException e) {
            assertEquals(HttpStatus.BAD_REQUEST.value(), e.getHttpResponse().getStatusCode());
        }
        // sort on non existing sort order
        try {
            paramMap.put("orderBy", "businessKey ASC2");
            processList = processesClient.getProcesses(paramMap);
            fail("forbidden expected");
        } catch (PublicApiException e) {
            assertEquals(HttpStatus.BAD_REQUEST.value(), e.getHttpResponse().getStatusCode());
        }
    } finally {
        cleanupProcessInstance(process1.getId(), process2.getId(), process3.getId());
    }
}
Also used : PublicApiException(org.alfresco.rest.api.tests.client.PublicApiException) ProcessesClient(org.alfresco.rest.workflow.api.tests.WorkflowApiClient.ProcessesClient) HashMap(java.util.HashMap) RequestContext(org.alfresco.rest.api.tests.client.RequestContext) ProcessInfo(org.alfresco.rest.workflow.api.model.ProcessInfo) Test(org.junit.Test)

Example 38 with ProcessInfo

use of org.alfresco.rest.workflow.api.model.ProcessInfo in project alfresco-remote-api by Alfresco.

the class ProcessWorkflowApiTest method testDeleteProcessVariable.

@Test
public void testDeleteProcessVariable() throws Exception {
    RequestContext requestContext = initApiClientWithTestUser();
    ProcessInfo processRest = startAdhocProcess(requestContext, null);
    try {
        assertNotNull(processRest);
        String processId = processRest.getId();
        // Create a variable to be deleted
        activitiProcessEngine.getRuntimeService().setVariable(processId, "deleteMe", "This is a string");
        // Delete variable
        publicApiClient.processesClient().deleteVariable(processId, "deleteMe");
        assertFalse(activitiProcessEngine.getRuntimeService().hasVariable(processId, "deleteMe"));
        // Deleting again should fail with 404, as variable doesn't exist anymore
        try {
            publicApiClient.processesClient().deleteVariable(processId, "deleteMe");
            fail("Exception expected");
        } catch (PublicApiException expected) {
            assertEquals(HttpStatus.NOT_FOUND.value(), expected.getHttpResponse().getStatusCode());
            assertErrorSummary("The entity with id: deleteMe was not found", expected.getHttpResponse());
        }
    } finally {
        cleanupProcessInstance(processRest.getId());
    }
}
Also used : PublicApiException(org.alfresco.rest.api.tests.client.PublicApiException) RequestContext(org.alfresco.rest.api.tests.client.RequestContext) ProcessInfo(org.alfresco.rest.workflow.api.model.ProcessInfo) Test(org.junit.Test)

Example 39 with ProcessInfo

use of org.alfresco.rest.workflow.api.model.ProcessInfo in project alfresco-remote-api by Alfresco.

the class ProcessWorkflowApiTest method testGetProcessActivities.

@Test
public void testGetProcessActivities() throws Exception {
    final RequestContext requestContext = initApiClientWithTestUser();
    String tenantAdmin = AuthenticationUtil.getAdminUserName() + "@" + requestContext.getNetworkId();
    final RequestContext adminContext = new RequestContext(requestContext.getNetworkId(), tenantAdmin);
    TestNetwork anotherNetwork = getOtherNetwork(requestContext.getNetworkId());
    tenantAdmin = AuthenticationUtil.getAdminUserName() + "@" + anotherNetwork.getId();
    final RequestContext otherContext = new RequestContext(anotherNetwork.getId(), tenantAdmin);
    final ProcessInfo process1 = startAdhocProcess(requestContext, null);
    try {
        ProcessesClient processesClient = publicApiClient.processesClient();
        Map<String, String> paramMap = new HashMap<String, String>();
        JSONObject activitiesJSON = processesClient.getActivities(process1.getId(), paramMap);
        assertNotNull(activitiesJSON);
        JSONArray entriesJSON = (JSONArray) activitiesJSON.get("entries");
        assertNotNull(entriesJSON);
        assertTrue(entriesJSON.size() == 2);
        Map<String, JSONObject> activitiesMap = new HashMap<String, JSONObject>();
        for (Object entry : entriesJSON) {
            JSONObject jsonEntry = (JSONObject) entry;
            JSONObject activityJSONObject = (JSONObject) jsonEntry.get("entry");
            activitiesMap.put((String) activityJSONObject.get("activityDefinitionId"), activityJSONObject);
        }
        JSONObject activityJSONObject = activitiesMap.get("start");
        assertNotNull(activityJSONObject);
        assertNotNull(activityJSONObject.get("id"));
        assertEquals("start", activityJSONObject.get("activityDefinitionId"));
        assertNull(activityJSONObject.get("activityDefinitionName"));
        assertEquals("startEvent", activityJSONObject.get("activityDefinitionType"));
        assertNotNull(activityJSONObject.get("startedAt"));
        assertNotNull(activityJSONObject.get("endedAt"));
        assertNotNull(activityJSONObject.get("durationInMs"));
        activityJSONObject = activitiesMap.get("adhocTask");
        assertNotNull(activityJSONObject);
        assertNotNull(activityJSONObject.get("id"));
        assertEquals("adhocTask", activityJSONObject.get("activityDefinitionId"));
        assertEquals("Adhoc Task", activityJSONObject.get("activityDefinitionName"));
        assertEquals("userTask", activityJSONObject.get("activityDefinitionType"));
        assertNotNull(activityJSONObject.get("startedAt"));
        assertNull(activityJSONObject.get("endedAt"));
        assertNull(activityJSONObject.get("durationInMs"));
        paramMap = new HashMap<String, String>();
        paramMap.put("status", "active");
        activitiesJSON = processesClient.getActivities(process1.getId(), paramMap);
        assertNotNull(activitiesJSON);
        entriesJSON = (JSONArray) activitiesJSON.get("entries");
        assertNotNull(entriesJSON);
        assertTrue(entriesJSON.size() == 1);
        paramMap = new HashMap<String, String>();
        paramMap.put("status", "completed");
        activitiesJSON = processesClient.getActivities(process1.getId(), paramMap);
        assertNotNull(activitiesJSON);
        entriesJSON = (JSONArray) activitiesJSON.get("entries");
        assertNotNull(entriesJSON);
        assertTrue(entriesJSON.size() == 1);
        paramMap = new HashMap<String, String>();
        try {
            processesClient.getActivities("fakeid", paramMap);
            fail("Exception expected");
        } catch (PublicApiException expected) {
            assertEquals(HttpStatus.NOT_FOUND.value(), expected.getHttpResponse().getStatusCode());
            assertErrorSummary("The entity with id: fakeid was not found", expected.getHttpResponse());
        }
        // get activities with admin from the same tenant as the process initiator
        publicApiClient.setRequestContext(adminContext);
        paramMap = new HashMap<String, String>();
        activitiesJSON = processesClient.getActivities(process1.getId(), paramMap);
        assertNotNull(activitiesJSON);
        entriesJSON = (JSONArray) activitiesJSON.get("entries");
        assertNotNull(entriesJSON);
        assertTrue(entriesJSON.size() == 2);
        // get tasks with admin from another tenant as the process initiator
        publicApiClient.setRequestContext(otherContext);
        paramMap = new HashMap<String, String>();
        try {
            processesClient.getActivities(process1.getId(), paramMap);
            fail("forbidden expected");
        } catch (PublicApiException e) {
            assertEquals(HttpStatus.FORBIDDEN.value(), e.getHttpResponse().getStatusCode());
        }
    } finally {
        cleanupProcessInstance(process1.getId());
    }
}
Also used : ProcessesClient(org.alfresco.rest.workflow.api.tests.WorkflowApiClient.ProcessesClient) HashMap(java.util.HashMap) JSONArray(org.json.simple.JSONArray) ProcessInfo(org.alfresco.rest.workflow.api.model.ProcessInfo) PublicApiException(org.alfresco.rest.api.tests.client.PublicApiException) JSONObject(org.json.simple.JSONObject) TestNetwork(org.alfresco.rest.api.tests.RepoService.TestNetwork) JSONObject(org.json.simple.JSONObject) RequestContext(org.alfresco.rest.api.tests.client.RequestContext) Test(org.junit.Test)

Example 40 with ProcessInfo

use of org.alfresco.rest.workflow.api.model.ProcessInfo in project alfresco-remote-api by Alfresco.

the class ProcessWorkflowApiTest method testCreateVariablesPresentInModel.

@Test
@SuppressWarnings("unchecked")
public void testCreateVariablesPresentInModel() throws Exception {
    RequestContext requestContext = initApiClientWithTestUser();
    ProcessInfo processInstance = startAdhocProcess(requestContext, null);
    try {
        JSONArray variablesArray = new JSONArray();
        JSONObject variableBody = new JSONObject();
        variableBody.put("name", "bpm_percentComplete");
        variableBody.put("value", 20);
        variableBody.put("type", "d:int");
        variablesArray.add(variableBody);
        variableBody = new JSONObject();
        variableBody.put("name", "bpm_workflowPriority");
        variableBody.put("value", 50);
        variableBody.put("type", "d:int");
        variablesArray.add(variableBody);
        JSONObject result = publicApiClient.processesClient().createVariables(processInstance.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(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(50, activitiProcessEngine.getRuntimeService().getVariable(processInstance.getId(), "bpm_workflowPriority"));
    } finally {
        cleanupProcessInstance(processInstance.getId());
    }
}
Also used : JSONObject(org.json.simple.JSONObject) JSONArray(org.json.simple.JSONArray) RequestContext(org.alfresco.rest.api.tests.client.RequestContext) ProcessInfo(org.alfresco.rest.workflow.api.model.ProcessInfo) Test(org.junit.Test)

Aggregations

ProcessInfo (org.alfresco.rest.workflow.api.model.ProcessInfo)40 RequestContext (org.alfresco.rest.api.tests.client.RequestContext)36 Test (org.junit.Test)36 PublicApiException (org.alfresco.rest.api.tests.client.PublicApiException)26 JSONObject (org.json.simple.JSONObject)26 ProcessesClient (org.alfresco.rest.workflow.api.tests.WorkflowApiClient.ProcessesClient)16 Task (org.activiti.engine.task.Task)13 HashMap (java.util.HashMap)12 JSONArray (org.json.simple.JSONArray)11 NodeRef (org.alfresco.service.cmr.repository.NodeRef)10 TasksClient (org.alfresco.rest.workflow.api.tests.WorkflowApiClient.TasksClient)8 ArrayList (java.util.ArrayList)6 MemberOfSite (org.alfresco.rest.api.tests.client.data.MemberOfSite)5 HistoricProcessInstance (org.activiti.engine.history.HistoricProcessInstance)4 TestNetwork (org.alfresco.rest.api.tests.RepoService.TestNetwork)4 Date (java.util.Date)3 List (java.util.List)3 HttpResponse (org.alfresco.rest.api.tests.client.HttpResponse)3 Variable (org.alfresco.rest.workflow.api.model.Variable)3 Calendar (java.util.Calendar)2