From e6883a05c248350ca28b4feeb3d4af49093049bc Mon Sep 17 00:00:00 2001 From: Holger Hagen <19706592+holgerhagen@users.noreply.github.com> Date: Mon, 5 Feb 2018 18:26:16 +0100 Subject: [PATCH] TSK-249: acceptance tests for all working on tasks. --- .../task/QueryTasksByWorkbasketAccTest.java | 2 +- .../acceptance/task/WorkOnTaskAccTest.java | 247 ++++++++++++++++++ .../src/test/resources/sql/task.sql | 12 + 3 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 lib/taskana-core/src/test/java/acceptance/task/WorkOnTaskAccTest.java diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java index baf23fd8f..9fa1d1760 100644 --- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java @@ -60,7 +60,7 @@ public class QueryTasksByWorkbasketAccTest extends AbstractAccTest { List results = taskService.createTaskQuery() .domainIn("DOMAIN_B", "", "DOMAIN_A") .list(); - assertThat(results.size(), equalTo(25)); + assertThat(results.size(), equalTo(36)); results = taskService.createTaskQuery() .domainIn("DOMAIN_A") diff --git a/lib/taskana-core/src/test/java/acceptance/task/WorkOnTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/WorkOnTaskAccTest.java new file mode 100644 index 000000000..063cb6f56 --- /dev/null +++ b/lib/taskana-core/src/test/java/acceptance/task/WorkOnTaskAccTest.java @@ -0,0 +1,247 @@ +package acceptance.task; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.sql.SQLException; + +import org.h2.store.fs.FileUtils; +import org.junit.AfterClass; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +import acceptance.AbstractAccTest; +import pro.taskana.Task; +import pro.taskana.TaskService; +import pro.taskana.exceptions.ClassificationNotFoundException; +import pro.taskana.exceptions.InvalidArgumentException; +import pro.taskana.exceptions.InvalidOwnerException; +import pro.taskana.exceptions.InvalidStateException; +import pro.taskana.exceptions.InvalidWorkbasketException; +import pro.taskana.exceptions.NotAuthorizedException; +import pro.taskana.exceptions.TaskAlreadyExistException; +import pro.taskana.exceptions.TaskNotFoundException; +import pro.taskana.exceptions.WorkbasketNotFoundException; +import pro.taskana.model.TaskState; +import pro.taskana.security.JAASRunner; +import pro.taskana.security.WithAccessId; + +/** + * Acceptance test for all "work on task" scenarios. This includes claim, complete... + */ +@RunWith(JAASRunner.class) +public class WorkOnTaskAccTest extends AbstractAccTest { + + public WorkOnTaskAccTest() { + super(); + } + + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test + public void testClaimTask() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task task = taskService.getTask("TKI:000000000000000000000000000000000025"); + + taskService.claim(task.getId()); + + Task claimedTask = taskService.getTask("TKI:000000000000000000000000000000000025"); + assertNotNull(claimedTask); + assertEquals(TaskState.CLAIMED, claimedTask.getState()); + assertNotNull(claimedTask.getClaimed()); + assertNotEquals(claimedTask.getCreated(), claimedTask.getModified()); + assertEquals(claimedTask.getClaimed(), claimedTask.getModified()); + assertTrue(claimedTask.isRead()); + assertEquals("user_1_2", claimedTask.getOwner()); + } + + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test(expected = InvalidOwnerException.class) + public void testThrowsExceptionIfTaskIsAlreadyClaimed() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task task = taskService.getTask("TKI:000000000000000000000000000000000026"); + + taskService.claim(task.getId()); + } + + @Ignore + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test + public void testClaimAlreadyClaimedByCallerTask() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task task = taskService.getTask("TKI:000000000000000000000000000000000027"); + + taskService.claim(task.getId()); + } + + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test(expected = InvalidOwnerException.class) + public void testForceClaimTaskWhichIsAlreadyClaimedByAnotherUser() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task task = taskService.getTask("TKI:000000000000000000000000000000000028"); + + taskService.claim(task.getId()); + } + + @Ignore + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test + public void testCancelClaimTask() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task claimedTask = taskService.getTask("TKI:000000000000000000000000000000000029"); + + // taskService.cancelClaim(claimedTask.getId()); + + Task unclaimedTask = taskService.getTask("TKI:000000000000000000000000000000000029"); + assertNotNull(unclaimedTask); + assertEquals(TaskState.READY, unclaimedTask.getState()); + assertNull(unclaimedTask.getClaimed()); + assertTrue(unclaimedTask.isRead()); + assertNull(unclaimedTask.getOwner()); + } + + @Ignore + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test(expected = InvalidOwnerException.class) + public void testThrowsExceptionIfCancelClaimOfTaskFromAnotherUser() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task claimedTask = taskService.getTask("TKI:000000000000000000000000000000000030"); + + // taskService.cancelClaim(claimedTask.getId()); + } + + @Ignore + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test + public void testForceCancelClaimOfTaskFromAnotherUser() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task claimedTask = taskService.getTask("TKI:000000000000000000000000000000000031"); + + // taskService.cancelClaim(claimedTask.getId(), true); + } + + @Ignore + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test + public void testCompleteTask() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task claimedTask = taskService.getTask("TKI:000000000000000000000000000000000032"); + + taskService.completeTask(claimedTask.getId()); + + Task completedTask = taskService.getTask("TKI:000000000000000000000000000000000032"); + assertNotNull(completedTask); + assertEquals(TaskState.COMPLETED, completedTask.getState()); + assertNotNull(completedTask.getCompleted()); + assertEquals(completedTask.getCompleted(), claimedTask.getModified()); + assertTrue(completedTask.isRead()); + assertEquals("user_1_2", completedTask.getOwner()); + } + + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test + public void testForceCompleteUnclaimedTask() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task claimedTask = taskService.getTask("TKI:000000000000000000000000000000000033"); + + taskService.completeTask(claimedTask.getId(), true); + + Task completedTask = taskService.getTask("TKI:000000000000000000000000000000000033"); + assertNotNull(completedTask); + assertEquals(TaskState.COMPLETED, completedTask.getState()); + assertNotNull(completedTask.getCompleted()); + assertEquals(completedTask.getCompleted(), completedTask.getModified()); + assertTrue(completedTask.isRead()); + assertEquals("user_1_2", completedTask.getOwner()); + } + + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test(expected = InvalidOwnerException.class) + public void testThrowsExceptionIfCompletingClaimedTaskOfAnotherUser() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task claimedTask = taskService.getTask("TKI:000000000000000000000000000000000034"); + + taskService.completeTask(claimedTask.getId()); + } + + @Ignore + @WithAccessId( + userName = "user_1_2", + groupNames = {"group_1"}) + @Test + public void testForceCompleteClaimedTaskOfAnotherUser() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + InvalidStateException, InvalidOwnerException { + TaskService taskService = taskanaEngine.getTaskService(); + Task claimedTask = taskService.getTask("TKI:000000000000000000000000000000000035"); + + taskService.completeTask(claimedTask.getId(), true); + + Task completedTask = taskService.getTask("TKI:000000000000000000000000000000000035"); + assertNotNull(completedTask); + assertEquals(TaskState.COMPLETED, completedTask.getState()); + assertNotNull(completedTask.getCompleted()); + assertEquals(completedTask.getCompleted(), completedTask.getModified()); + assertTrue(completedTask.isRead()); + assertEquals("user_1_2", completedTask.getOwner()); + } + + @AfterClass + public static void cleanUpClass() { + FileUtils.deleteRecursive("~/data", true); + } +} diff --git a/lib/taskana-core/src/test/resources/sql/task.sql b/lib/taskana-core/src/test/resources/sql/task.sql index 35e9bc4d7..29fc9b70a 100644 --- a/lib/taskana-core/src/test/resources/sql/task.sql +++ b/lib/taskana-core/src/test/resources/sql/task.sql @@ -24,3 +24,15 @@ INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000021', '2018-01-29 INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000022', '2018-01-29 15:55:22', null , null , '2018-01-29 15:55:22', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'READY' , 'L1050' , 'GPK_KSC' , 'DOMAIN_A', 'PI_0000000000022' , 'DOC_0000000000000000022' , null , '00' , 'PASystem' , '00' , 'SDNR' , '11223344' , false , false , null , null , null , null , null , null , null , null , null , null , null ); INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000023', '2018-01-29 15:55:23', null , null , '2018-01-29 15:55:23', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'READY' , 'L1050' , 'GPK_KSC' , 'DOMAIN_A', 'PI_0000000000023' , 'DOC_0000000000000000023' , null , '00' , 'PASystem' , '00' , 'SDNR' , '11223344' , false , false , null , null , null , null , null , null , null , null , null , null , null ); INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000024', '2018-01-29 15:55:24', null , null , '2018-01-29 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'READY' , 'L1050' , 'GPK_KSC' , 'DOMAIN_A', 'PI_0000000000024' , 'DOC_0000000000000000024' , null , '00' , 'PASystem' , '00' , 'SDNR' , '11223344' , false , false , null , null , null , null , null , null , null , null , null , null , null ); +-- Tasks for WorkOnTaskAccTest +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000025', '2018-01-29 15:55:24', null , null , '2018-01-29 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'READY' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000025' , 'DOC_0000000000000000025' , null , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , false , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000026', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000026' , 'DOC_0000000000000000026' , 'user_1_1' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000027', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000027' , 'DOC_0000000000000000027' , 'user_1_2' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000028', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000028' , 'DOC_0000000000000000028' , 'user_1_1' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000029', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000029' , 'DOC_0000000000000000029' , 'user_1_2' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000030', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000030' , 'DOC_0000000000000000030' , 'user_1_1' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000031', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000031' , 'DOC_0000000000000000031' , 'user_1_1' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000032', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000032' , 'DOC_0000000000000000032' , 'user_1_2' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000033', '2018-01-29 15:55:24', null , null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'READY' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000033' , 'DOC_0000000000000000033' , 'user_1_2' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000034', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000034' , 'DOC_0000000000000000034' , 'user_1_1' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null ); +INSERT INTO TASK VALUES('TKI:000000000000000000000000000000000035', '2018-01-29 15:55:24', '2018-01-30 15:55:24', null , '2018-01-30 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'Widerruf' , null , 2 , 'CLAIMED' , 'L1050' , 'USER_1_2' , 'DOMAIN_A', 'PI_0000000000035' , 'DOC_0000000000000000035' , 'user_1_1' , '00' , 'PASystem' , '00' , 'SDNR' , '98765432' , true , false , null , null , null , null , null , null , null , null , null , null , null );