From 656a792d06fa3eb787cd80a172e5a391470da192 Mon Sep 17 00:00:00 2001 From: N Smith Date: Tue, 22 Nov 2011 16:59:07 +0000 Subject: [PATCH] WorkflowServiceImpl.isReassignable() method now gives an up-to-date result, avoiding stale data issues. Added tests to check isReassignable works on a task that has been completed by JBPM timer. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@32196 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/workflow/WorkflowServiceImpl.java | 8 +++ ...rExceptionTest.java => JbpmTimerTest.java} | 57 +++++++++++++------ .../jbpmresources/test_simpleTimer.xml | 34 +++++++++++ 3 files changed, 83 insertions(+), 16 deletions(-) rename source/java/org/alfresco/repo/workflow/jbpm/{JbpmTimerExceptionTest.java => JbpmTimerTest.java} (64%) create mode 100644 source/test-resources/jbpmresources/test_simpleTimer.xml diff --git a/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java b/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java index bd81c29786..6cc4177523 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowServiceImpl.java @@ -825,6 +825,8 @@ public class WorkflowServiceImpl implements WorkflowService */ public boolean isTaskEditable(WorkflowTask task, String username) { + task = getTaskById(task.getId()); // Refresh the task. + // if the task is complete it is not editable if (task.getState() == WorkflowTaskState.COMPLETED) { @@ -856,6 +858,8 @@ public class WorkflowServiceImpl implements WorkflowService */ public boolean isTaskReassignable(WorkflowTask task, String username) { + task = getTaskById(task.getId()); // Refresh the task. + // if the task is complete it is not reassignable if (task.getState() == WorkflowTaskState.COMPLETED) { @@ -898,6 +902,8 @@ public class WorkflowServiceImpl implements WorkflowService */ public boolean isTaskClaimable(WorkflowTask task, String username) { + task = getTaskById(task.getId()); // Refresh the task. + // if the task is complete it is not claimable if (task.getState() == WorkflowTaskState.COMPLETED) { @@ -920,6 +926,8 @@ public class WorkflowServiceImpl implements WorkflowService */ public boolean isTaskReleasable(WorkflowTask task, String username) { + task = getTaskById(task.getId()); // Refresh the task. + // if the task is complete it is not releasable if (task.getState() == WorkflowTaskState.COMPLETED) { diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JbpmTimerExceptionTest.java b/source/java/org/alfresco/repo/workflow/jbpm/JbpmTimerTest.java similarity index 64% rename from source/java/org/alfresco/repo/workflow/jbpm/JbpmTimerExceptionTest.java rename to source/java/org/alfresco/repo/workflow/jbpm/JbpmTimerTest.java index 0e6553f385..4cf43f138b 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JbpmTimerExceptionTest.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JbpmTimerTest.java @@ -22,6 +22,7 @@ package org.alfresco.repo.workflow.jbpm; import java.io.InputStream; import java.io.Serializable; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.alfresco.repo.content.MimetypeMap; @@ -47,10 +48,10 @@ import junit.framework.TestCase; * @since 4.0 * */ -public class JbpmTimerExceptionTest extends TestCase +public class JbpmTimerTest extends TestCase { - private static final String defLocation = "jbpmresources/test_timerException.xml"; - private static final String defName = "jbpm$wf:testTimerException"; + private static final String simpleDefLocation = "jbpmresources/test_simpleTimer.xml"; + private static final String exceptionDefLocation = "jbpmresources/test_timerException.xml"; private WorkflowService workflowService; private WorkflowTestHelper testHelper; @@ -58,6 +59,8 @@ public class JbpmTimerExceptionTest extends TestCase public void testTimerException() throws Exception { + defId = deployDefinition(exceptionDefLocation); + NodeRef pckg = workflowService.createPackage(null); Map params = new HashMap(); params.put(WorkflowModel.ASSOC_PACKAGE, pckg); @@ -70,6 +73,29 @@ public class JbpmTimerExceptionTest extends TestCase Thread.sleep(30000); System.out.println("Done!"); } + + public void testTimerIsReassignable() throws Exception + { + defId = deployDefinition(simpleDefLocation); + + NodeRef pckg = workflowService.createPackage(null); + Map params = new HashMap(); + params.put(WorkflowModel.ASSOC_PACKAGE, pckg); + params.put(WorkflowModel.ASSOC_ASSIGNEE, AuthenticationUtil.getAdminUserName()); + + WorkflowPath path = workflowService.startWorkflow(defId, params); + String instanceId = path.getInstance().getId(); + WorkflowTask start = workflowService.getStartTask(instanceId); + workflowService.endTask(start.getId(), null); + + List tasks = workflowService.getTasksForWorkflowPath(path.getId()); + WorkflowTask task = tasks.get(0); + assertTrue(workflowService.isTaskReassignable(task, AuthenticationUtil.getAdminUserName())); + + // Wait for timer to end task + Thread.sleep(30000); + assertFalse(workflowService.isTaskReassignable(task, AuthenticationUtil.getAdminUserName())); + } @Override protected void setUp() throws Exception @@ -82,20 +108,19 @@ public class JbpmTimerExceptionTest extends TestCase AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); testHelper = new WorkflowTestHelper(adminService, JBPMEngine.ENGINE_ID, false); testHelper.setVisible(true); - + } + + /** + * @return + */ + private String deployDefinition(String location) + { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - InputStream input = classLoader.getResourceAsStream(defLocation); - if(workflowService.isDefinitionDeployed(JBPMEngine.ENGINE_ID, input, MimetypeMap.MIMETYPE_XML) == false) - { - input = classLoader.getResourceAsStream(defLocation); - WorkflowDeployment deployment= workflowService.deployDefinition(JBPMEngine.ENGINE_ID, input, MimetypeMap.MIMETYPE_XML); - defId = deployment.getDefinition().getId(); - - } - else - { - defId = workflowService.getDefinitionByName(defName).getId(); - } + InputStream input = classLoader.getResourceAsStream(exceptionDefLocation); + input = classLoader.getResourceAsStream(location); + WorkflowDeployment deployment + = workflowService.deployDefinition(JBPMEngine.ENGINE_ID, input, MimetypeMap.MIMETYPE_XML); + return deployment.getDefinition().getId(); } @Override diff --git a/source/test-resources/jbpmresources/test_simpleTimer.xml b/source/test-resources/jbpmresources/test_simpleTimer.xml new file mode 100644 index 0000000000..9407d7afeb --- /dev/null +++ b/source/test-resources/jbpmresources/test_simpleTimer.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + #{bpm_assignee} + + + + + + + + + + + + + + + + + + + + \ No newline at end of file