diff --git a/config/test/alfresco/test-context.xml b/config/test/alfresco/test-context.xml index cc21e19743..68e5910710 100644 --- a/config/test/alfresco/test-context.xml +++ b/config/test/alfresco/test-context.xml @@ -3,18 +3,19 @@ - - + class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> + + ${db.name}_test ${db.url}_test + + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineUnitTest.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineUnitTest.java index ec10929929..f9c0e6dec0 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineUnitTest.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineUnitTest.java @@ -31,9 +31,11 @@ import static org.springframework.transaction.TransactionDefinition.*; 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; @@ -77,6 +79,8 @@ import org.springmodules.workflow.jbpm31.JbpmTemplate; */ public class JBPMEngineUnitTest extends TestCase { + 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"); @@ -87,7 +91,7 @@ public class JBPMEngineUnitTest extends TestCase private JBPMEngine engine = new JBPMEngine(); - private WorkflowDefinition testWorkflowDef; + private WorkflowDefinition workflowDef; private SpringAwareUserTransaction transaction; @@ -108,25 +112,21 @@ public class JBPMEngineUnitTest extends TestCase assertNotNull(workflowDefs); assertTrue(workflowDefs.size() == 1); - assertNotNull(testWorkflowDef); - assertEquals("jbpm_test$test", testWorkflowDef.name); - assertEquals("1", testWorkflowDef.version); + assertNotNull(workflowDef); + assertEquals("jbpm_test$test", workflowDef.name); + assertEquals("1", workflowDef.version); deployTestDefinition(); assertTrue(engine.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML)); - assertEquals("2", testWorkflowDef.version); + assertEquals("2", workflowDef.version); } public void testGetWorkflowInstance() throws Exception { deployTestDefinition(); - WorkflowPath path = engine.startWorkflow(testWorkflowDef.getId(), null); - assertNotNull(path); - assertTrue(path.id.endsWith("-@")); - assertNotNull(path.node); - assertNotNull(path.instance); - assertEquals(testWorkflowDef.id, path.instance.definition.id); + WorkflowPath path = engine.startWorkflow(workflowDef.getId(), null); + checkPath(path); WorkflowInstance instance = engine.getWorkflowById(path.instance.id); assertNotNull(instance); assertEquals(path.instance.id, instance.id); @@ -144,12 +144,12 @@ public class JBPMEngineUnitTest extends TestCase } deployTestDefinition(); - WorkflowPath path = engine.startWorkflow(testWorkflowDef.getId(), null); + WorkflowPath path = engine.startWorkflow(workflowDef.getId(), null); assertNotNull(path); assertTrue(path.id.endsWith("-@")); assertNotNull(path.node); assertNotNull(path.instance); - assertEquals(testWorkflowDef.getId(), path.instance.definition.id); + assertEquals(workflowDef.getId(), path.instance.definition.id); } public void testStartWorkflowParameters() throws Exception @@ -177,12 +177,8 @@ public class JBPMEngineUnitTest extends TestCase params.put(ContentModel.PROP_OWNER, "Owner"); // task assignment deployTestDefinition(); - WorkflowPath path = engine.startWorkflow(testWorkflowDef.id, params); - assertNotNull(path); - assertTrue(path.id.endsWith("-@")); - assertNotNull(path.node); - assertNotNull(path.instance); - assertEquals(testWorkflowDef.id, path.instance.definition.id); + WorkflowPath path = engine.startWorkflow(workflowDef.id, params); + checkPath(path); List tasks1 = engine.getTasksForWorkflowPath(path.id); assertNotNull(tasks1); assertEquals(1, tasks1.size()); @@ -202,6 +198,170 @@ public class JBPMEngineUnitTest extends TestCase // initiatorUsername); } + public void testUpdateTask() throws Exception + { + Map params = new HashMap(); + // 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 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 updateProperties2 = new HashMap(); + 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 toAdd = new ArrayList(); + toAdd.add(new NodeRef("workspace://1/1001")); + toAdd.add(new NodeRef("workspace://1/1002")); + toAdd.add(new NodeRef("workspace://1/1003")); + Map> addAssocs = new HashMap>(); + 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 toAddAgain = new ArrayList(); + toAddAgain.add(new NodeRef("workspace://1/1004")); + toAddAgain.add(new NodeRef("workspace://1/1005")); + Map> addAssocsAgain = new HashMap>(); + 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 toRemove = new ArrayList(); + toRemove.add(new NodeRef("workspace://1/1002")); + toRemove.add(new NodeRef("workspace://1/1003")); + Map> removeAssocs = new HashMap>(); + 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 instances = engine.getActiveWorkflows(workflowDef.id); + assertNotNull(instances); + assertEquals(2, instances.size()); + + HashSet ids = new HashSet(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 instances = engine.getActiveWorkflows(workflowDef.id); + assertNotNull(instances); + assertEquals(1, instances.size()); + List 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("-@")); + } + + // TODO: Need to strip AuthenticationUtil out of JBPMEngine to get this + // test passing. Also need to stop the hard-wired bean look-up for the + // TransactionService in AlfrescoJobExecutor. + // public void testCancelWorkflowInstance() throws Exception + // { + // deployTestDefinition(); + // engine.startWorkflow(workflowDef.id, null); + // List instances1 = + // engine.getActiveWorkflows(workflowDef.id); + // assertNotNull(instances1); + // assertEquals(1, instances1.size()); + // List tasks = engine + // .getAssignedTasks(USER_NAME, WorkflowTaskState.IN_PROGRESS); + // assertNotNull(tasks); + // + // assertEquals(1, tasks.size()); + // WorkflowInstance cancelledInstance = + // engine.cancelWorkflow(instances1.get(0).id); + // assertNotNull(cancelledInstance); + // assertFalse(cancelledInstance.active); + // List instances2 = + // engine.getActiveWorkflows(workflowDef.id); + // assertNotNull(instances2); + // assertEquals(0, instances2.size()); + // List tasks1 = engine.getAssignedTasks(USER_NAME, + // WorkflowTaskState.IN_PROGRESS); + // assertNotNull(tasks1); + // assertEquals(0, tasks1.size()); + // } + + private void checkPath(WorkflowPath path) + { + assertNotNull(path); + assertTrue(path.id.endsWith("-@")); + assertNotNull(path.node); + assertNotNull(path.instance); + assertEquals(workflowDef.id, path.instance.definition.id); + } + @Override protected void setUp() throws Exception { @@ -272,9 +432,9 @@ public class JBPMEngineUnitTest extends TestCase "jbpmresources/test_processdefinition.xml"); WorkflowDeployment deployment = engine.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML); - testWorkflowDef = deployment.definition; - assertNotNull(testWorkflowDef); - assertEquals("jbpm_test$test", testWorkflowDef.name); + workflowDef = deployment.definition; + assertNotNull(workflowDef); + assertEquals("jbpm_test$test", workflowDef.name); } private NamespaceService makeNamespaceService()