mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merging DEV/ACTIVITI_INTEGRATION2 to HEAD
25933: Updated activiti jars to 5.3 release + temporarily disabled query-tests for activtiti 25932: Fixed failing FormServiceImplTest. 25930: Fixed ClassCastException and NullPointerException when using JBPM and Activiti tasks in Alfresco Explorer. 25898: Implemented testGetWorkflows() which tests the methods getWorkflows() getActiveWorkflows() and getCompletedWorkflows() for both workflow engines. 25888: Fixed failing testOutcome. 25884: Workflow console fully tested using activiti engine + small bugfixes 25854: Implemented testGetPathProperties on AbstractWorkflowServiceIntegrationTest. This tests getPathProperties for Activiti and JBPM workflow engines. 25827: Added lifecycle sample for activiti engine 25801: Added a new WorkflowRestApiTest testTaskInstancesForWorkflowGet. Also fixed issues with ActivitWorkflowEngine.queryTasks() relating to the start task being returned incorrectly. 25731: Added timer execution test to verify Authentication and Transactional behavior + added license headers to 2 files 25682: ALF-6902 delete identitylinks + added timer sample + adhoc notify me feature 25649: Redeploying of parallel activiti WF's turned of (remainder from development) 25645: Fixing getWorkflows test, using valid date to check "due before" 25642: Implemented getPathProperties() on ActivitiWorkflowEngine. Also refactored ActivitiTypeConverter to create ActivitiPropertyConverter which uses a WorkflowPropertyHandlerRegistry. 25636: Fixes for use of Activiti workflows in JSF client 25615: Added parallel review and approve process (regular + grouped) 25520: Added REST-test for review workflow and pooled review workflow for both engines 25471: Added queryTasks test for both engines 25397: Testing getTimers() on both engines 25368: Using authorityName instead of name for candidate-group + fixed priority WF vs. Task mixup in start-task 25335: F96: A form control for LIST constraint based decision properties in Activiti tasks exists 25324: Added correct sources for current 5.3-SNAPSHOT 25323: Implemented TaskQuery further and added extra test-coverage + delete/cancel WF now deletes History as well 25318: The signal() method on ActivitiWorkflowEngine now returns a WorkflowPath if the signal ended the WorkflowInstance. 25300: Fixed start workflow form for Activiti pooled review and approve process definition 25294: Implemented signal() method on ActivitiWorkflowEngine. Currently it returns null if the signal() ended the Workflowinstance. 25199: Implemented getTimers() + fixed some issues with the outcome prop name + upgraded to activiti 5.3 25179: Added support for wf:outcome property on Activiti tasks. Now ian arbitrary property can be set as the property from which outcomes are read. 25152: Refactored the WorkflowServiceImplTest to create an AbstractWorkflowServiceImplTest. Extended this base test with Jbpm and Activiti implementations. 25134: Fixed workflowPath node issue on start-task + Task variables are no longer flushed to process-instance variables 25131: ALF-6901 start task completion date + taskListeners using ScriptService instead of activiti's built-in JSR-223 25105: Implemented getWorkflows() and getCompletedWorkflows() methods on ActivitiWorkflowEngine. 25098: Mandatory properties are now checked in TaskCompleteListener to allow setting of mandatory properties in end-task listeners before the check is performed + review-pooled used person to set as bpm_assignee + removed duplicate messageService in ActivitiWE 25089: Merged ActivitiTaskComponent and ActivitiWorkflowComponent into a single class, ActivitiWorkflowEngine. 25048: Implemented getStartTask(String) method on WorkflowService interface. This gets the start task instance for a given workflow instance Id. Also, modified the start task returned by the ActivitiTaskComponent so that it has the correct title. 25028: Added WorkflowDefinitionGet webscript and test + tested WorkflowInstanceDelete and fixed WorkflowTaskDefinition bug 25003: Added getStartTask() method to WorkflowService. Implemented for JBPMEngine and ActivitiTaskComponent. 24996: Added activiti process-definition for pooled review/approve workflow + new version of activiti 5.2 to allow releasing task to pool agian 24972: Extended TaskInstanceGet REST-test + upgraded activiti lib due to bug in HistoricTaskInstance 24934: Refactored package assignment/creation so that it is now mainly performed by the WOrkflowPackageComponent rather than the WorkflowComponent or TaskComponent. Implemented correct package behaviour for Activiti workflow engine. 24926: Extended TaskInstancePut REST-test + added extra logic for ignoring tasks for deleted/canceled WF's 24895: Added new tests to FormServiceImplTest to check TaskFormProcessor correctly transitions tasks with both workflow engines. 24888: Updated WorkflowRestApiTest, enhanced testing of getTaskInstances 24861: Updated the FormServiceImplTest so that it includes tests for the TaskFormProcessor using both workflow engines. 24851: Made WorkflowRestApiTest abstract and created a subtype for activiti and jbpm 24832: Added integration test to FormServiceImplTest to check WorkflowFormProcessor works correctly with both Activiti and Jbpm engines. 24829: ALF-6195 Pooled actors are now available on completed tasks 24806: Added null check for parameters variable 24805: Cleaned up WorkflowRestAPITest to remove deprecated field access. 24797: ALF-6016 start-task now contains variables, upgraded to activiti 5.2-SNAPSHOT 24796: Removed accidentaly checked-in folder 24795: Share project "Catalina-virtual" into "https://svn.alfresco.com/repos/enterprise/alfresco/BRANCHES/DEV/ACTIVITI_INTEGRATION2/root" 24780: Created Activiti Review & Approve workflow. 24702: ALF-6201 cleaned up WOFactory.createInstance + removed candidate group from adhoc WF (pooled task) 24693: ALF-6438 implemented getWorkflowById for completed workflows + added unittest for getWorkflowById from running and complete processes 24686: ALF-6195 added formKey (typeDefinition name) to variables to make available in history + added test for getTaskById() for a completed task 24642: ALF-6003 + ALF-6195 Introduced mapping of WorkfloTask from HistoricTaskInstance and it's variables 24565: ALF-6016 tested getting start task by id + added initial test for taskQuery 24560: ALF-6217 implemented and tested pooled actors using activiti-candidate user/group 24520: ALF-6003 ALF-6014 tested + various minor improvements + TaskTypeEvaluator matchin pattern adjusted to be able to use workflow-detail form for activiti start-tasks 24417: ALF-6003, ALF-6014 Added tasklisteners to set default task props + flush variables when task ends + running script in tasklistener (to set task-variables in script based on wf-props) 24399: Merged BRANCHES/V3.4 to BRANCHES/DEV/ACTIVITI_INTEGRATION2: 24396: Fix for ALF-6126: TaskTypeEvaluator uses task-name instead of taskType-name for node-type matching 24396: Fix for ALF-6126: TaskTypeEvaluator uses task-name instead of taskType-name for node-type matching 24334: ALF-6015 ALF-6016: Completing a task implemented + using task-local variables 24125: ALF-5995 properties passed when starting workflow are stored 24111: ALF-5974, ALF-5972 Task-update implemented + capturing company-home, initiator and initiator home implemented and tested 23891: Fixing failing tests in ActivitiWorkflowComponentTest 23776: Upgraded activiti to 5.0-SNAPSHOT + Introduced error-handling using messages + initial support for HistoricActivity/ProcessInstances 23600: Removing unneeded folder that was introduced accidentally when reattaching SVN to eclipse 23599: 23298: 23250: Rolling back revisions 23212 to 23113 to fix issue with logging in. 23212: Trying to fix the problem with logging in. 23200: Added Form config for the Activiti Adhoc Process. Fixed failing tests in ActivitiWorkflowComponentTest. 23197: Fixed failing tests in WorkflowServiceeImplTest. Updated Activiti jars in 3rdParty. 23191: Adding Activiti Ahodc Workflow to Workflow Deployer to demonstrate Activiti Workflow/Task..Component integration with UI. 23129: Copy Activiti JAR files when building WAR and doing exploded deploy 23113: Implemented ActivitiTaskComponent.getTaskById() 23079: Created ActivitiTaskComponent and started to implement various task getter methods. 22890: Added testStartTask to WorkflowServiceImplTests to test that the start task functionality works as required by the Workflow UI. 22889: Added testStartTask to WorkflowServiceImplTests to test that the start task functionality works as required by the Workflow UI. 22888: Added testStartTask to WorkflowServiceImplTests to test that the start task functionality works as required by the Workflow UI. 22887: Added testStartTask to WorkflowServiceImplTests to test that the start task functionality works as required by the Workflow UI. 22769: Added more functionality to ActivitiWorkflowComponent.startWorkflow. 22759: Implemented more methods for getting WorkflowDefinitions on ActivitiWorkflowComponent. Also added more functionality to the startWorkflow method. 22758: Implemented more methods for getting WorkflowDefinitions on ActivitiWorkflowComponent. Also added more functionality to the startWorkflow method. 22672: Created ActivitiWorkflowComponent and implemented deployDefinition(), undeployDefinition() and isDefinitionDeployed() methods. 22659: Replacing Activiti Jars 22359: Added tests to check rollback of transactions in Activiti. 22358: Got some simple transaction tests working. These test transaction visibility is working properly and also check that rollbacks work correctly. 22342: Created a patch to add the Activiti tables in. 22333: Added some simple tests to check if Activiti works using a DataSource and TransactionManager. 22332: Updating Activiti to the beta release. 22286: Added Activiti and its dependencies to 3rd Party libraries. Updated JUnit jar to 4.8. Created package org/alfresco/repo/workflow/activiti and added some simple tests to check Activiti integration. 21879: Branch to develop support for Activiti workflow engine. 23264: Creating branch ACTIVITI_INTEGRATION2 to merge HEAD back into the existing ACTIVITI_INTEGGRATION branch. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@25984 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -174,11 +174,11 @@ public class AlfrescoJavaScriptIntegrationTest extends BaseAlfrescoSpringTest
|
||||
private String fullUser;
|
||||
private JBPMNode person = null;
|
||||
|
||||
public void storeUsers(JBPMNode person)
|
||||
public void storeUsers(JBPMNode thePerson)
|
||||
{
|
||||
fullUser = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||
runAsUser = AuthenticationUtil.getRunAsUser();
|
||||
this.person = person;
|
||||
this.person = thePerson;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -59,18 +59,10 @@ import org.springframework.extensions.surf.util.I18NUtil;
|
||||
*/
|
||||
public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String USER3 = "JbpmEngineTestJoe";
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String USER2 = "JbpmEngineTestJane";
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String USER1 = "JbpmEngineTestJohn";
|
||||
private static final String USER2 = "JbpmEngineTestJane";
|
||||
private static final String USER3 = "JbpmEngineTestJoe";
|
||||
|
||||
private WorkflowComponent workflowComponent;
|
||||
private TaskComponent taskComponent;
|
||||
private WorkflowPackageComponent packageComponent;
|
||||
@@ -112,6 +104,11 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
|
||||
}
|
||||
|
||||
public void todoTestGetStartTask() throws Exception
|
||||
{
|
||||
//TODO Implement
|
||||
}
|
||||
|
||||
public void testGetWorkflowDefinitions()
|
||||
{
|
||||
List<WorkflowDefinition> workflowDefs = workflowComponent.getDefinitions();
|
||||
@@ -124,10 +121,10 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
{
|
||||
ClassPathResource processDef = new ClassPathResource("jbpmresources/test_processdefinition.xml");
|
||||
WorkflowDeployment deployment = workflowComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
|
||||
testWorkflowDef = deployment.definition;
|
||||
testWorkflowDef = deployment.getDefinition();
|
||||
assertNotNull(testWorkflowDef);
|
||||
assertEquals("jbpm$test", testWorkflowDef.name);
|
||||
assertEquals("2", testWorkflowDef.version);
|
||||
assertEquals("jbpm$test", testWorkflowDef.getName());
|
||||
assertEquals("2", testWorkflowDef.getVersion());
|
||||
}
|
||||
|
||||
|
||||
@@ -135,7 +132,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
{
|
||||
try
|
||||
{
|
||||
@SuppressWarnings("unused") WorkflowPath path = workflowComponent.startWorkflow("norfolknchance", null);
|
||||
workflowComponent.startWorkflow("norfolknchance", null);
|
||||
fail("Failed to catch invalid definition id");
|
||||
}
|
||||
catch(WorkflowException e)
|
||||
@@ -146,7 +143,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
// TODO: Determine why process definition is loaded, even though it doesn't exist
|
||||
// try
|
||||
// {
|
||||
// @SuppressWarnings("unused") WorkflowPosition pos = workflowComponent.startProcess("1000", null);
|
||||
// workflowComponent.startProcess("1000", null);
|
||||
// fail("Failed to catch workflow definition id that does not exist");
|
||||
// }
|
||||
// catch(WorkflowException e)
|
||||
@@ -154,30 +151,30 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
// }
|
||||
|
||||
WorkflowDefinition workflowDef = getTestDefinition();
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, null);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), null);
|
||||
assertNotNull(path);
|
||||
assertTrue(path.id.endsWith("-@"));
|
||||
assertNotNull(path.node);
|
||||
assertNotNull(path.instance);
|
||||
assertEquals(workflowDef.id, path.instance.definition.id);
|
||||
assertTrue(path.getId().endsWith("-@"));
|
||||
assertNotNull(path.getNode());
|
||||
assertNotNull(path.getInstance());
|
||||
assertEquals(workflowDef.getId(), path.getInstance().getDefinition().getId());
|
||||
}
|
||||
|
||||
|
||||
public void testGetWorkflowById()
|
||||
{
|
||||
WorkflowDefinition workflowDef = getTestDefinition();
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, null);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), null);
|
||||
assertNotNull(path);
|
||||
assertTrue(path.id.endsWith("-@"));
|
||||
assertNotNull(path.node);
|
||||
assertNotNull(path.instance);
|
||||
assertEquals(workflowDef.id, path.instance.definition.id);
|
||||
WorkflowInstance instance = workflowComponent.getWorkflowById(path.instance.id);
|
||||
assertTrue(path.getId().endsWith("-@"));
|
||||
assertNotNull(path.getNode());
|
||||
assertNotNull(path.getInstance());
|
||||
assertEquals(workflowDef.getId(), path.getInstance().getDefinition().getId());
|
||||
WorkflowInstance instance = workflowComponent.getWorkflowById(path.getInstance().getId());
|
||||
assertNotNull(instance);
|
||||
assertEquals(path.instance.id, instance.id);
|
||||
assertEquals(path.getInstance().getId(), instance.getId());
|
||||
|
||||
workflowComponent.cancelWorkflow(instance.id);
|
||||
WorkflowInstance result = workflowComponent.getWorkflowById(instance.id);
|
||||
workflowComponent.cancelWorkflow(instance.getId());
|
||||
WorkflowInstance result = workflowComponent.getWorkflowById(instance.getId());
|
||||
assertNull("The workflow isntance should be null!", result);
|
||||
}
|
||||
|
||||
@@ -196,24 +193,24 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
params.put(QName.createQName("", "NodeRef"), new NodeRef("workspace://1/1001")); // context variable outside of task definition
|
||||
params.put(ContentModel.PROP_OWNER, AuthenticationUtil.getAdminUserName()); // task assignment
|
||||
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, params);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), params);
|
||||
assertNotNull(path);
|
||||
assertTrue(path.id.endsWith("-@"));
|
||||
assertNotNull(path.node);
|
||||
assertNotNull(path.instance);
|
||||
assertEquals(workflowDef.id, path.instance.definition.id);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
assertTrue(path.getId().endsWith("-@"));
|
||||
assertNotNull(path.getNode());
|
||||
assertNotNull(path.getInstance());
|
||||
assertEquals(workflowDef.getId(), path.getInstance().getDefinition().getId());
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
|
||||
WorkflowTask task = tasks1.get(0);
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_TASK_ID));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_DUE_DATE));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PRIORITY));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
assertTrue(task.properties.containsKey(ContentModel.PROP_OWNER));
|
||||
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_TASK_ID));
|
||||
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_DUE_DATE));
|
||||
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_PRIORITY));
|
||||
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
assertTrue(task.getProperties().containsKey(ContentModel.PROP_OWNER));
|
||||
|
||||
NodeRef initiator = path.instance.initiator;
|
||||
NodeRef initiator = path.getInstance().getInitiator();
|
||||
String initiatorUsername = (String)nodeService.getProperty(initiator, ContentModel.PROP_USERNAME);
|
||||
assertEquals(AuthenticationUtil.getAdminUserName(), initiatorUsername);
|
||||
}
|
||||
@@ -233,27 +230,27 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
params.put(QName.createQName("", "NodeRef"), new NodeRef("workspace://1/1001")); // context variable outside of task definition
|
||||
params.put(ContentModel.PROP_OWNER, AuthenticationUtil.getAdminUserName()); // task assignment
|
||||
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, params);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), params);
|
||||
assertNotNull(path);
|
||||
assertTrue(path.id.endsWith("-@"));
|
||||
assertNotNull(path.node);
|
||||
assertNotNull(path.instance);
|
||||
assertEquals(workflowDef.id, path.instance.definition.id);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
assertTrue(path.getId().endsWith("-@"));
|
||||
assertNotNull(path.getNode());
|
||||
assertNotNull(path.getInstance());
|
||||
assertEquals(workflowDef.getId(), path.getInstance().getDefinition().getId());
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
|
||||
WorkflowTask task = tasks1.get(0);
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_TASK_ID));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_DUE_DATE));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PRIORITY));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
assertTrue(task.properties.containsKey(ContentModel.PROP_OWNER));
|
||||
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_TASK_ID));
|
||||
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_DUE_DATE));
|
||||
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_PRIORITY));
|
||||
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
assertTrue(task.getProperties().containsKey(ContentModel.PROP_OWNER));
|
||||
|
||||
// update with null parameters
|
||||
try
|
||||
{
|
||||
WorkflowTask taskU1 = taskComponent.updateTask(task.id, null, null, null);
|
||||
WorkflowTask taskU1 = taskComponent.updateTask(task.getId(), null, null, null);
|
||||
assertNotNull(taskU1);
|
||||
}
|
||||
catch(Throwable e)
|
||||
@@ -264,8 +261,8 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
// update property value
|
||||
Map<QName, Serializable> updateProperties2 = new HashMap<QName, Serializable>();
|
||||
updateProperties2.put(WorkflowModel.PROP_PERCENT_COMPLETE, 100);
|
||||
WorkflowTask taskU2 = taskComponent.updateTask(task.id, updateProperties2, null, null);
|
||||
assertEquals(100, taskU2.properties.get(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
WorkflowTask taskU2 = taskComponent.updateTask(task.getId(), updateProperties2, null, null);
|
||||
assertEquals(100, taskU2.getProperties().get(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
|
||||
// add to assocation
|
||||
QName assocName = QName.createQName("", "TestAssoc");
|
||||
@@ -275,9 +272,9 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
toAdd.add(new NodeRef("workspace://1/1003"));
|
||||
Map<QName, List<NodeRef>> addAssocs = new HashMap<QName, List<NodeRef>>();
|
||||
addAssocs.put(assocName, toAdd);
|
||||
WorkflowTask taskU3 = taskComponent.updateTask(task.id, null, addAssocs, null);
|
||||
assertNotNull(taskU3.properties.get(assocName));
|
||||
assertEquals(3, ((List<?>)taskU3.properties.get(assocName)).size());
|
||||
WorkflowTask taskU3 = taskComponent.updateTask(task.getId(), null, addAssocs, null);
|
||||
assertNotNull(taskU3.getProperties().get(assocName));
|
||||
assertEquals(3, ((List<?>)taskU3.getProperties().get(assocName)).size());
|
||||
|
||||
// add to assocation again
|
||||
List<NodeRef> toAddAgain = new ArrayList<NodeRef>();
|
||||
@@ -285,9 +282,9 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
toAddAgain.add(new NodeRef("workspace://1/1005"));
|
||||
Map<QName, List<NodeRef>> addAssocsAgain = new HashMap<QName, List<NodeRef>>();
|
||||
addAssocsAgain.put(assocName, toAddAgain);
|
||||
WorkflowTask taskU4 = taskComponent.updateTask(task.id, null, addAssocsAgain, null);
|
||||
assertNotNull(taskU4.properties.get(assocName));
|
||||
assertEquals(5, ((List<?>)taskU4.properties.get(assocName)).size());
|
||||
WorkflowTask taskU4 = taskComponent.updateTask(task.getId(), null, addAssocsAgain, null);
|
||||
assertNotNull(taskU4.getProperties().get(assocName));
|
||||
assertEquals(5, ((List<?>)taskU4.getProperties().get(assocName)).size());
|
||||
|
||||
// remove assocation
|
||||
List<NodeRef> toRemove = new ArrayList<NodeRef>();
|
||||
@@ -295,23 +292,23 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
toRemove.add(new NodeRef("workspace://1/1003"));
|
||||
Map<QName, List<NodeRef>> removeAssocs = new HashMap<QName, List<NodeRef>>();
|
||||
removeAssocs.put(assocName, toRemove);
|
||||
WorkflowTask taskU5 = taskComponent.updateTask(task.id, null, null, removeAssocs);
|
||||
assertNotNull(taskU5.properties.get(assocName));
|
||||
assertEquals(3, ((List<?>)taskU5.properties.get(assocName)).size());
|
||||
WorkflowTask taskU5 = taskComponent.updateTask(task.getId(), null, null, removeAssocs);
|
||||
assertNotNull(taskU5.getProperties().get(assocName));
|
||||
assertEquals(3, ((List<?>)taskU5.getProperties().get(assocName)).size());
|
||||
}
|
||||
|
||||
|
||||
public void testGetWorkflowInstances()
|
||||
{
|
||||
WorkflowDefinition workflowDef = getTestDefinition();
|
||||
workflowComponent.startWorkflow(workflowDef.id, null);
|
||||
workflowComponent.startWorkflow(workflowDef.id, null);
|
||||
List<WorkflowInstance> instances = workflowComponent.getActiveWorkflows(workflowDef.id);
|
||||
workflowComponent.startWorkflow(workflowDef.getId(), null);
|
||||
workflowComponent.startWorkflow(workflowDef.getId(), null);
|
||||
List<WorkflowInstance> instances = workflowComponent.getActiveWorkflows(workflowDef.getId());
|
||||
assertNotNull(instances);
|
||||
assertEquals(2, instances.size());
|
||||
for (WorkflowInstance instance : instances)
|
||||
{
|
||||
assertEquals(workflowDef.id, instance.definition.id);
|
||||
assertEquals(workflowDef.getId(), instance.getDefinition().getId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -319,37 +316,37 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
public void testGetPositions()
|
||||
{
|
||||
WorkflowDefinition workflowDef = getTestDefinition();
|
||||
workflowComponent.startWorkflow(workflowDef.id, null);
|
||||
List<WorkflowInstance> instances = workflowComponent.getActiveWorkflows(workflowDef.id);
|
||||
workflowComponent.startWorkflow(workflowDef.getId(), null);
|
||||
List<WorkflowInstance> instances = workflowComponent.getActiveWorkflows(workflowDef.getId());
|
||||
assertNotNull(instances);
|
||||
assertEquals(1, instances.size());
|
||||
List<WorkflowPath> paths = workflowComponent.getWorkflowPaths(instances.get(0).id);
|
||||
List<WorkflowPath> paths = workflowComponent.getWorkflowPaths(instances.get(0).getId());
|
||||
assertNotNull(paths);
|
||||
assertEquals(1, paths.size());
|
||||
assertEquals(instances.get(0).id, paths.get(0).instance.id);
|
||||
assertTrue(paths.get(0).id.endsWith("-@"));
|
||||
assertEquals(instances.get(0).getId(), paths.get(0).getInstance().getId());
|
||||
assertTrue(paths.get(0).getId().endsWith("-@"));
|
||||
}
|
||||
|
||||
|
||||
public void testCancelWorkflowInstance() throws Exception
|
||||
{
|
||||
WorkflowDefinition workflowDef = getTestDefinition();
|
||||
workflowComponent.startWorkflow(workflowDef.id, null);
|
||||
List<WorkflowInstance> instances1 = workflowComponent.getActiveWorkflows(workflowDef.id);
|
||||
workflowComponent.startWorkflow(workflowDef.getId(), null);
|
||||
List<WorkflowInstance> instances1 = workflowComponent.getActiveWorkflows(workflowDef.getId());
|
||||
assertNotNull(instances1);
|
||||
assertEquals(1, instances1.size());
|
||||
List<WorkflowTask> tasks = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.IN_PROGRESS);
|
||||
assertNotNull(tasks);
|
||||
assertTrue(tasks.size() > 0);
|
||||
WorkflowInstance cancelledInstance = workflowComponent.cancelWorkflow(instances1.get(0).id);
|
||||
WorkflowInstance cancelledInstance = workflowComponent.cancelWorkflow(instances1.get(0).getId());
|
||||
assertNotNull(cancelledInstance);
|
||||
assertFalse(cancelledInstance.active);
|
||||
List<WorkflowInstance> instances2 = workflowComponent.getActiveWorkflows(workflowDef.id);
|
||||
assertFalse(cancelledInstance.isActive());
|
||||
List<WorkflowInstance> instances2 = workflowComponent.getActiveWorkflows(workflowDef.getId());
|
||||
assertNotNull(instances2);
|
||||
assertEquals(0, instances2.size());
|
||||
List<WorkflowTask> tasks1 = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.IN_PROGRESS);
|
||||
assertNotNull(tasks1);
|
||||
tasks1 = filterTasksByWorkflowInstance(tasks1, cancelledInstance.id);
|
||||
tasks1 = filterTasksByWorkflowInstance(tasks1, cancelledInstance.getId());
|
||||
assertEquals(0, tasks1.size());
|
||||
}
|
||||
|
||||
@@ -383,7 +380,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
WorkflowPath path = workflowComponent.startWorkflow(parallelDef.getId(), parameters);
|
||||
WorkflowTask startTask = workflowComponent.getTasksForWorkflowPath(path.getId()).get(0);
|
||||
taskComponent.endTask(startTask.getId(), null);
|
||||
checkInstanceExists(path.instance.getId(), parallelDef.getId(), true);
|
||||
checkInstanceExists(path.getInstance().getId(), parallelDef.getId(), true);
|
||||
|
||||
// Set all users to reject document.
|
||||
ParallelReject(USER1);
|
||||
@@ -428,9 +425,9 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
Map<QName, Serializable> parameters = new HashMap<QName, Serializable>();
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
|
||||
WorkflowDefinition workflowDef = getTestDefinition();
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
|
||||
assertNotNull(path);
|
||||
WorkflowPath updatedPath = workflowComponent.signal(path.id, path.node.transitions[1].id);
|
||||
WorkflowPath updatedPath = workflowComponent.signal(path.getId(), path.getNode().getTransitions()[1].getId());
|
||||
assertNotNull(updatedPath);
|
||||
}
|
||||
|
||||
@@ -442,22 +439,22 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "reviewer"), AuthenticationUtil.getAdminUserName());
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
|
||||
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"), packageComponent.createPackage(null));
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
|
||||
assertNotNull(path);
|
||||
List<WorkflowTask> tasks = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
List<WorkflowTask> tasks = workflowComponent.getTasksForWorkflowPath(path.getId());
|
||||
assertNotNull(tasks);
|
||||
assertEquals(1, tasks.size());
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks.get(0).id, path.node.transitions[0].id);
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks.get(0).getId(), path.getNode().getTransitions()[0].getId());
|
||||
assertNotNull(updatedTask);
|
||||
List<WorkflowTask> completedTasks = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.COMPLETED);
|
||||
assertNotNull(completedTasks);
|
||||
completedTasks = filterTasksByWorkflowInstance(completedTasks, path.instance.id);
|
||||
completedTasks = filterTasksByWorkflowInstance(completedTasks, path.getInstance().getId());
|
||||
assertEquals(1, completedTasks.size());
|
||||
List<WorkflowTask> assignedTasks = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.IN_PROGRESS);
|
||||
assertNotNull(assignedTasks);
|
||||
assignedTasks = filterTasksByWorkflowInstance(assignedTasks, path.instance.id);
|
||||
assignedTasks = filterTasksByWorkflowInstance(assignedTasks, path.getInstance().getId());
|
||||
assertEquals(1, assignedTasks.size());
|
||||
assertEquals("review", assignedTasks.get(0).name);
|
||||
assertEquals("review", assignedTasks.get(0).getName());
|
||||
}
|
||||
|
||||
|
||||
@@ -471,12 +468,12 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
Map<QName, Serializable> parameters = new HashMap<QName, Serializable>();
|
||||
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "assignees"), (Serializable)bpm_assignees);
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
|
||||
assertNotNull(path);
|
||||
List<WorkflowTask> tasks = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
List<WorkflowTask> tasks = workflowComponent.getTasksForWorkflowPath(path.getId());
|
||||
assertNotNull(tasks);
|
||||
assertEquals(1, tasks.size());
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks.get(0).id, "multi");
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks.get(0).getId(), "multi");
|
||||
assertNotNull(updatedTask);
|
||||
}
|
||||
|
||||
@@ -488,20 +485,20 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "reviewer"), AuthenticationUtil.getAdminUserName());
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
|
||||
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"), packageComponent.createPackage(null));
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
|
||||
assertNotNull(path);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).state);
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).id, null);
|
||||
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).getState());
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).getId(), null);
|
||||
assertNotNull(updatedTask);
|
||||
assertEquals(WorkflowTaskState.COMPLETED, updatedTask.state);
|
||||
assertEquals(WorkflowTaskState.COMPLETED, updatedTask.getState());
|
||||
List<WorkflowTask> completedTasks = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.COMPLETED);
|
||||
assertNotNull(completedTasks);
|
||||
completedTasks = filterTasksByWorkflowInstance(completedTasks, path.instance.id);
|
||||
completedTasks = filterTasksByWorkflowInstance(completedTasks, path.getInstance().getId());
|
||||
assertEquals(1, completedTasks.size());
|
||||
assertEquals(WorkflowTaskState.COMPLETED, completedTasks.get(0).state);
|
||||
assertEquals(WorkflowTaskState.COMPLETED, completedTasks.get(0).getState());
|
||||
}
|
||||
|
||||
|
||||
@@ -511,15 +508,15 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
Map<QName, Serializable> parameters = new HashMap<QName, Serializable>();
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "reviewer"), AuthenticationUtil.getAdminUserName());
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
|
||||
assertNotNull(path);
|
||||
assertNotNull(path);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
WorkflowTask getTask = taskComponent.getTaskById(tasks1.get(0).id);
|
||||
WorkflowTask getTask = taskComponent.getTaskById(tasks1.get(0).getId());
|
||||
assertNotNull(getTask);
|
||||
assertEquals(getTask.id, tasks1.get(0).id);
|
||||
assertEquals(getTask.getId(), tasks1.get(0).getId());
|
||||
}
|
||||
|
||||
|
||||
@@ -530,13 +527,13 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "reviewer"), AuthenticationUtil.getAdminUserName());
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
|
||||
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"), packageComponent.createPackage(null));
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
|
||||
assertNotNull(path);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).state);
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).id, null);
|
||||
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).getState());
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).getId(), null);
|
||||
assertNotNull(updatedTask);
|
||||
}
|
||||
|
||||
@@ -550,17 +547,17 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
WorkflowDeployment deployment = workflowComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
|
||||
assertNotNull(deployment);
|
||||
|
||||
WorkflowDefinition workflowDef = deployment.definition;
|
||||
WorkflowDefinition workflowDef = deployment.getDefinition();
|
||||
Map<QName, Serializable> parameters = new HashMap<QName, Serializable>();
|
||||
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
|
||||
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"), packageComponent.createPackage(null));
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
|
||||
assertNotNull(path);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).state);
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).id, null);
|
||||
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).getState());
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).getId(), null);
|
||||
assertNotNull(updatedTask);
|
||||
}
|
||||
|
||||
@@ -611,7 +608,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
|
||||
List<WorkflowTask> filteredTasks = new ArrayList<WorkflowTask>();
|
||||
for (WorkflowTask task : tasks)
|
||||
{
|
||||
if (task.path.instance.id.equals(workflowInstanceId))
|
||||
if (task.getPath().getInstance().getId().equals(workflowInstanceId))
|
||||
{
|
||||
filteredTasks.add(task);
|
||||
}
|
||||
|
@@ -1,442 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2010 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.alfresco.repo.workflow.jbpm;
|
||||
|
||||
import static org.mockito.Matchers.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.i18n.MessageService;
|
||||
import org.alfresco.repo.tenant.TenantService;
|
||||
import org.alfresco.repo.workflow.BPMEngineRegistry;
|
||||
import org.alfresco.repo.workflow.WorkflowModel;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.search.SearchService;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowDeployment;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowException;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowInstance;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowPath;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.NamespaceServiceMemoryImpl;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.test.AbstractTransactionalSpringContextTests;
|
||||
import org.springmodules.workflow.jbpm31.JbpmTemplate;
|
||||
|
||||
/**
|
||||
* JBPMEngine Unit Tests.
|
||||
*
|
||||
* @author Nick Smith
|
||||
*/
|
||||
public class JBPMEngineUnitTest extends AbstractTransactionalSpringContextTests
|
||||
{
|
||||
private static final String USER_NAME = "admin";
|
||||
|
||||
private static final String TEST_JBPM_ENGINE = "test_jbpm_engine";
|
||||
|
||||
private static final NodeRef companyHome = new NodeRef("for://test/home");
|
||||
|
||||
private JBPMEngine engine = new JBPMEngine();
|
||||
|
||||
private WorkflowDefinition workflowDef;
|
||||
|
||||
public void testDeployWorkflow() throws Exception
|
||||
{
|
||||
ClassPathResource processDef = new ClassPathResource("jbpmresources/test_processdefinition.xml");
|
||||
List<WorkflowDefinition> workflowDefs = engine.getDefinitions();
|
||||
assertFalse(engine.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
|
||||
assertNotNull(workflowDefs);
|
||||
|
||||
int workflowDefCnt = workflowDefs.size();
|
||||
|
||||
deployTestDefinition();
|
||||
assertTrue(engine.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
|
||||
workflowDefs = engine.getDefinitions();
|
||||
assertNotNull(workflowDefs);
|
||||
assertEquals(workflowDefCnt+1, workflowDefs.size());
|
||||
|
||||
assertNotNull(workflowDef);
|
||||
assertEquals(TEST_JBPM_ENGINE + "$test", workflowDef.name);
|
||||
assertEquals("1", workflowDef.version);
|
||||
|
||||
deployTestDefinition();
|
||||
assertTrue(engine.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
|
||||
assertEquals("2", workflowDef.version);
|
||||
}
|
||||
|
||||
public void testGetWorkflowInstance() throws Exception
|
||||
{
|
||||
deployTestDefinition();
|
||||
WorkflowPath path = engine.startWorkflow(workflowDef.getId(), null);
|
||||
checkPath(path);
|
||||
WorkflowInstance instance = engine.getWorkflowById(path.instance.id);
|
||||
assertNotNull(instance);
|
||||
assertEquals(path.instance.id, instance.id);
|
||||
}
|
||||
|
||||
public void testStartWorkflowWithoutPackage() throws Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
engine.startWorkflow("norfolknchance", null);
|
||||
fail("Failed to catch invalid definition id");
|
||||
}
|
||||
catch (WorkflowException e)
|
||||
{ // Do nothing here!
|
||||
}
|
||||
|
||||
deployTestDefinition();
|
||||
WorkflowPath path = engine.startWorkflow(workflowDef.getId(), null);
|
||||
assertNotNull(path);
|
||||
assertTrue(path.id.endsWith("-@"));
|
||||
assertNotNull(path.node);
|
||||
assertNotNull(path.instance);
|
||||
assertEquals(workflowDef.getId(), path.instance.definition.id);
|
||||
}
|
||||
|
||||
public void testStartWorkflowParameters() throws Exception
|
||||
{
|
||||
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
|
||||
|
||||
// protected - shouldn't be written
|
||||
params.put(WorkflowModel.PROP_TASK_ID, 3);
|
||||
|
||||
// task instance field
|
||||
params.put(WorkflowModel.PROP_DUE_DATE, new Date());
|
||||
|
||||
params.put(WorkflowModel.PROP_PRIORITY, 1); // task instance field
|
||||
params.put(WorkflowModel.PROP_PERCENT_COMPLETE, 10); // context variable
|
||||
|
||||
// context variable outside of task definition
|
||||
params.put(QName.createQName("", "Message"), "Hello World");
|
||||
|
||||
// context variable outside of task definition
|
||||
params.put(QName.createQName("", "Array"), new String[] { "one", "two" });
|
||||
|
||||
// context variable outside of task definition
|
||||
params.put(QName.createQName("", "NodeRef"), new NodeRef("workspace://1/1001"));
|
||||
|
||||
params.put(ContentModel.PROP_OWNER, "Owner"); // task assignment
|
||||
|
||||
deployTestDefinition();
|
||||
WorkflowPath path = engine.startWorkflow(workflowDef.id, params);
|
||||
checkPath(path);
|
||||
List<WorkflowTask> tasks1 = engine.getTasksForWorkflowPath(path.id);
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
|
||||
WorkflowTask task = tasks1.get(0);
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_TASK_ID));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_DUE_DATE));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PRIORITY));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
assertTrue(task.properties.containsKey(ContentModel.PROP_OWNER));
|
||||
|
||||
// NodeRef initiator = path.instance.initiator;
|
||||
// String initiatorUsername = (String)
|
||||
// nodeService.getProperty(initiator,
|
||||
// ContentModel.PROP_USERNAME);
|
||||
// assertEquals(AuthenticationUtil.getAdminUserName(),
|
||||
// initiatorUsername);
|
||||
}
|
||||
|
||||
public void testUpdateTask() throws Exception
|
||||
{
|
||||
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
|
||||
// protected - shouldn't be written
|
||||
params.put(WorkflowModel.PROP_TASK_ID, 3);
|
||||
|
||||
// task instance field
|
||||
params.put(WorkflowModel.PROP_DUE_DATE, new Date());
|
||||
|
||||
params.put(WorkflowModel.PROP_PRIORITY, 1); // task instance field
|
||||
params.put(WorkflowModel.PROP_PERCENT_COMPLETE, 10); // context variable
|
||||
|
||||
// context variable outside of task definition
|
||||
params.put(QName.createQName("", "Message"), "Hello World");
|
||||
|
||||
// context variable outside of task definition
|
||||
params.put(QName.createQName("", "Array"), new String[] { "one", "two" });
|
||||
|
||||
// context task assignment
|
||||
params.put(QName.createQName("", "NodeRef"), new NodeRef("workspace://1/1001"));
|
||||
|
||||
params.put(ContentModel.PROP_OWNER, USER_NAME);
|
||||
|
||||
deployTestDefinition();
|
||||
WorkflowPath path = engine.startWorkflow(workflowDef.id, params);
|
||||
checkPath(path);
|
||||
List<WorkflowTask> tasks1 = engine.getTasksForWorkflowPath(path.id);
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
|
||||
WorkflowTask task = tasks1.get(0);
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_TASK_ID));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_DUE_DATE));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PRIORITY));
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
assertTrue(task.properties.containsKey(ContentModel.PROP_OWNER));
|
||||
|
||||
// update with null parameters
|
||||
try
|
||||
{
|
||||
WorkflowTask taskU1 = engine.updateTask(task.id, null, null, null);
|
||||
assertNotNull(taskU1);
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
fail("Task update failed with null parameters");
|
||||
}
|
||||
|
||||
// update property value
|
||||
Map<QName, Serializable> updateProperties2 = new HashMap<QName, Serializable>();
|
||||
updateProperties2.put(WorkflowModel.PROP_PERCENT_COMPLETE, 100);
|
||||
WorkflowTask taskU2 = engine.updateTask(task.id, updateProperties2, null, null);
|
||||
assertEquals(100, taskU2.properties.get(WorkflowModel.PROP_PERCENT_COMPLETE));
|
||||
|
||||
// add to assocation
|
||||
QName assocName = QName.createQName("", "TestAssoc");
|
||||
List<NodeRef> toAdd = new ArrayList<NodeRef>();
|
||||
toAdd.add(new NodeRef("workspace://1/1001"));
|
||||
toAdd.add(new NodeRef("workspace://1/1002"));
|
||||
toAdd.add(new NodeRef("workspace://1/1003"));
|
||||
Map<QName, List<NodeRef>> addAssocs = new HashMap<QName, List<NodeRef>>();
|
||||
addAssocs.put(assocName, toAdd);
|
||||
WorkflowTask taskU3 = engine.updateTask(task.id, null, addAssocs, null);
|
||||
assertNotNull(taskU3.properties.get(assocName));
|
||||
Object assoc = taskU3.properties.get(assocName);
|
||||
assertNotNull(assoc);
|
||||
assertEquals(3, ((List<?>) assoc).size());
|
||||
|
||||
// add to assocation again
|
||||
List<NodeRef> toAddAgain = new ArrayList<NodeRef>();
|
||||
toAddAgain.add(new NodeRef("workspace://1/1004"));
|
||||
toAddAgain.add(new NodeRef("workspace://1/1005"));
|
||||
Map<QName, List<NodeRef>> addAssocsAgain = new HashMap<QName, List<NodeRef>>();
|
||||
addAssocsAgain.put(assocName, toAddAgain);
|
||||
WorkflowTask taskU4 = engine.updateTask(task.id, null, addAssocsAgain, null);
|
||||
assertNotNull(taskU4.properties.get(assocName));
|
||||
assoc = taskU4.properties.get(assocName);
|
||||
assertEquals(5, ((List<?>) assoc).size());
|
||||
|
||||
// remove assocation
|
||||
List<NodeRef> toRemove = new ArrayList<NodeRef>();
|
||||
toRemove.add(new NodeRef("workspace://1/1002"));
|
||||
toRemove.add(new NodeRef("workspace://1/1003"));
|
||||
Map<QName, List<NodeRef>> removeAssocs = new HashMap<QName, List<NodeRef>>();
|
||||
removeAssocs.put(assocName, toRemove);
|
||||
WorkflowTask taskU5 = engine.updateTask(task.id, null, null, removeAssocs);
|
||||
assertNotNull(taskU5.properties.get(assocName));
|
||||
assoc = taskU5.properties.get(assocName);
|
||||
assertEquals(3, ((List<?>) assoc).size());
|
||||
}
|
||||
|
||||
public void testGetWorkflowInstances() throws Exception
|
||||
{
|
||||
deployTestDefinition();
|
||||
WorkflowPath path1 = engine.startWorkflow(workflowDef.id, null);
|
||||
WorkflowPath path2 = engine.startWorkflow(workflowDef.id, null);
|
||||
List<WorkflowInstance> instances = engine.getActiveWorkflows(workflowDef.id);
|
||||
assertNotNull(instances);
|
||||
assertEquals(2, instances.size());
|
||||
|
||||
HashSet<String> ids = new HashSet<String>(2);
|
||||
ids.add(path1.instance.id);
|
||||
ids.add(path2.instance.id);
|
||||
|
||||
for (WorkflowInstance instance : instances)
|
||||
{
|
||||
assertEquals(workflowDef.id, instance.definition.id);
|
||||
assertTrue(ids.contains(instance.id));
|
||||
}
|
||||
}
|
||||
|
||||
public void testGetPositions() throws Exception
|
||||
{
|
||||
deployTestDefinition();
|
||||
engine.startWorkflow(workflowDef.id, null);
|
||||
List<WorkflowInstance> instances = engine.getActiveWorkflows(workflowDef.id);
|
||||
assertNotNull(instances);
|
||||
assertEquals(1, instances.size());
|
||||
List<WorkflowPath> paths = engine.getWorkflowPaths(instances.get(0).id);
|
||||
assertNotNull(paths);
|
||||
assertEquals(1, paths.size());
|
||||
assertEquals(instances.get(0).id, paths.get(0).instance.id);
|
||||
assertTrue(paths.get(0).id.endsWith("-@"));
|
||||
}
|
||||
|
||||
private void checkPath(WorkflowPath path)
|
||||
{
|
||||
assertNotNull(path);
|
||||
assertTrue(path.id.endsWith("-@"));
|
||||
assertNotNull(path.node);
|
||||
assertNotNull(path.instance);
|
||||
assertEquals(workflowDef.id, path.instance.definition.id);
|
||||
}
|
||||
|
||||
/*
|
||||
* @seeorg.springframework.test.AbstractTransactionalSpringContextTests#
|
||||
* onSetUpBeforeTransaction()
|
||||
*/
|
||||
@Override
|
||||
protected void onSetUpBeforeTransaction() throws Exception
|
||||
{
|
||||
super.onSetUpBeforeTransaction();
|
||||
// Mock up various services.
|
||||
NodeService nodeService = mock(NodeService.class);
|
||||
TenantService tenantService = makeTenantService();
|
||||
NamespaceService namespaceService = makeNamespaceService();
|
||||
DictionaryService dictionaryService = makeDictionaryService();
|
||||
|
||||
// Add services to ServiceRegistry
|
||||
ServiceRegistry serviceRegistry = mock(ServiceRegistry.class);
|
||||
when(serviceRegistry.getNodeService()).thenReturn(nodeService);
|
||||
when(serviceRegistry.getNamespaceService()).thenReturn(namespaceService);
|
||||
when(serviceRegistry.getDictionaryService()).thenReturn(dictionaryService);
|
||||
BPMEngineRegistry engineRegistry = (BPMEngineRegistry) getApplicationContext().getBean(
|
||||
"test_bpm_engineRegistry");
|
||||
|
||||
ConfigurableApplicationContext ctx = getApplicationContext();
|
||||
JbpmTemplate jbpmTemplate = (JbpmTemplate) ctx.getBean("test_jbpm_template");
|
||||
// Set up the JBPMEngine.
|
||||
engine.setJBPMTemplate(jbpmTemplate);
|
||||
engine.setTenantService(tenantService);
|
||||
engine.setNodeService(nodeService);
|
||||
engine.setServiceRegistry(serviceRegistry);
|
||||
engine.setNamespaceService(namespaceService);
|
||||
engine.setMessageService(mock(MessageService.class));
|
||||
engine.setDictionaryService(dictionaryService);
|
||||
engine.setEngineId(TEST_JBPM_ENGINE);
|
||||
engine.setBPMEngineRegistry(engineRegistry);
|
||||
|
||||
// Need to register JBPMEngine with bean factory so WorflowTaskInstance
|
||||
// can load it.
|
||||
ConfigurableApplicationContext appContext = getApplicationContext();
|
||||
if (!appContext.containsBean(TEST_JBPM_ENGINE))
|
||||
appContext.getBeanFactory().registerSingleton(TEST_JBPM_ENGINE, engine);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private DictionaryService makeDictionaryService()
|
||||
{
|
||||
DictionaryService service = mock(DictionaryService.class);
|
||||
|
||||
// DictionaryService.getType(QName) always returns a mock
|
||||
// TypeDefinition.
|
||||
TypeDefinition typeDef = mock(TypeDefinition.class);
|
||||
when(service.getType((QName) any())).thenReturn(typeDef);
|
||||
|
||||
// DictionaryService.getAnonymousType(QName, Collection<QName>)
|
||||
// always returns a mock TypeDefinition
|
||||
when(service.getAnonymousType((QName) any(),//
|
||||
(Collection<QName>) any()))//
|
||||
.thenReturn(typeDef);
|
||||
return service;
|
||||
}
|
||||
|
||||
// deploy test process definition
|
||||
private void deployTestDefinition() throws IOException
|
||||
{
|
||||
ClassPathResource processDef = new ClassPathResource("jbpmresources/test_processdefinition.xml");
|
||||
WorkflowDeployment deployment = engine.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
|
||||
workflowDef = deployment.definition;
|
||||
assertNotNull(workflowDef);
|
||||
assertEquals(TEST_JBPM_ENGINE + "$test", workflowDef.name);
|
||||
}
|
||||
|
||||
private NamespaceService makeNamespaceService()
|
||||
{
|
||||
NamespaceServiceMemoryImpl namespace = new NamespaceServiceMemoryImpl();
|
||||
namespace.registerNamespace(NamespaceService.DEFAULT_PREFIX, NamespaceService.DEFAULT_URI);
|
||||
|
||||
namespace.registerNamespace("wf", "http://www.alfresco.org/model/bpm/1.0");
|
||||
namespace.registerNamespace("cm", "http://www.alfresco.org/model/content/1.0");
|
||||
namespace.registerNamespace("wcmwf", "http://www.alfresco.org/model/wcmworkflow/1.0");
|
||||
namespace.registerNamespace("imwf", "http://www.alfresco.org/model/workflow/invite/moderated/1.0");
|
||||
namespace.registerNamespace("inwf", "http://www.alfresco.org/model/workflow/invite/nominated/1.0");
|
||||
|
||||
return namespace;
|
||||
}
|
||||
|
||||
private TenantService makeTenantService()
|
||||
{
|
||||
TenantService tenantService = mock(TenantService.class);
|
||||
|
||||
// Tenant Service.isEnabled() returns true.
|
||||
when(tenantService.isEnabled()).thenReturn(true);
|
||||
|
||||
// TenantService.getRootNode always returns companyHome.
|
||||
when(tenantService.getRootNode((NodeService) any(),//
|
||||
(SearchService) any(),//
|
||||
(NamespaceService) any(),//
|
||||
anyString(),//
|
||||
(NodeRef) any()))//
|
||||
.thenReturn(companyHome);
|
||||
// Tenant Service.getName(String) will return the input param.
|
||||
when(tenantService.getName(anyString())).thenAnswer(new Answer<String>()
|
||||
{
|
||||
public String answer(InvocationOnMock invocation) throws Throwable
|
||||
{
|
||||
return (String) invocation.getArguments()[0];
|
||||
}
|
||||
});
|
||||
when(tenantService.getBaseName(anyString())).thenAnswer(new Answer<String>()
|
||||
{
|
||||
public String answer(InvocationOnMock invocation) throws Throwable
|
||||
{
|
||||
return (String) invocation.getArguments()[0];
|
||||
}
|
||||
});
|
||||
return tenantService;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see
|
||||
* org.springframework.test.AbstractSingleSpringContextTests#getConfigLocations
|
||||
* ()
|
||||
*/
|
||||
@Override
|
||||
protected String[] getConfigLocations()
|
||||
{
|
||||
String[] locations = new String[] {
|
||||
"classpath:jbpm-test/test-workflow-context.xml", };
|
||||
return locations;
|
||||
}
|
||||
}
|
@@ -21,6 +21,7 @@ package org.alfresco.repo.workflow.jbpm;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import org.alfresco.repo.jscript.ScriptNode;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
@@ -36,7 +37,7 @@ import org.mozilla.javascript.Scriptable;
|
||||
*
|
||||
* @author davidc
|
||||
*/
|
||||
public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
|
||||
public class JBPMNode extends ScriptNode
|
||||
{
|
||||
private static final long serialVersionUID = -826970280203254365L;
|
||||
|
||||
@@ -51,8 +52,8 @@ public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
|
||||
super(nodeRef, services, null);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.alfresco.repo.jscript.Node#createValueConverter()
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected NodeValueConverter createValueConverter()
|
||||
@@ -63,7 +64,7 @@ public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
|
||||
/**
|
||||
* Value converter for beanshell.
|
||||
*/
|
||||
private class JBPMNodeConverter extends org.alfresco.repo.jscript.ScriptNode.NodeValueConverter
|
||||
private class JBPMNodeConverter extends NodeValueConverter
|
||||
{
|
||||
@Override
|
||||
public Serializable convertValueForRepo(Serializable value)
|
||||
@@ -79,11 +80,11 @@ public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
|
||||
}
|
||||
|
||||
@Override
|
||||
public Serializable convertValueForScript(ServiceRegistry services, Scriptable scope, QName qname, Serializable value)
|
||||
public Serializable convertValueForScript(ServiceRegistry serviceRegistry, Scriptable theScope, QName qname, Serializable value)
|
||||
{
|
||||
if (value instanceof NodeRef)
|
||||
{
|
||||
return new JBPMNode(((NodeRef)value), services);
|
||||
return new JBPMNode(((NodeRef)value), serviceRegistry);
|
||||
}
|
||||
else if (value instanceof Date)
|
||||
{
|
||||
@@ -91,7 +92,7 @@ public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
|
||||
}
|
||||
else
|
||||
{
|
||||
return super.convertValueForScript(services, scope, qname, value);
|
||||
return super.convertValueForScript(serviceRegistry, theScope, qname, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2010 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.repo.workflow.jbpm;
|
||||
|
||||
import org.alfresco.repo.workflow.AbstractWorkflowServiceIntegrationTest;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Workflow Service Implementation Tests
|
||||
*
|
||||
* @author davidc
|
||||
*/
|
||||
public class JbpmWorkflowServiceIntegrationTest extends AbstractWorkflowServiceIntegrationTest
|
||||
{
|
||||
|
||||
@Override
|
||||
protected String getEngine()
|
||||
{
|
||||
return "jbpm";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestDefinitionPath()
|
||||
{
|
||||
return "jbpmresources/test_simple_processdefinition.xml";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getAdhocDefinitionPath()
|
||||
{
|
||||
return "alfresco/workflow/adhoc_processdefinition.xml";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPooledReviewDefinitionPath()
|
||||
{
|
||||
return "alfresco/workflow/review_pooled_processdefinition.xml";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestTimerDefinitionPath()
|
||||
{
|
||||
return "jbpmresources/test_timer.xml";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected QName getAdhocProcessName() {
|
||||
return QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "adhoc");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user