diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java index 2c7be9ac7..b1887a95f 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java @@ -35,7 +35,7 @@ public interface QueryMapper { + "AND t.STATE IN(#{item}) " + "AND t.WORKBASKET_KEY IN(#{item}) " + "AND t.CLASSIFICATION_KEY IN(#{item}) " - + "AND t.DOMAIN IN(#{item}) " + + "AND t.DOMAIN IN(#{item}) " + "AND t.OWNER IN(#{item}) " + "AND t.IS_READ = #{isRead} " + "AND t.IS_TRANSFERRED = #{isTransferred} " 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 6aa08b9dd..3a9def068 100644 --- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksByWorkbasketAccTest.java @@ -1,14 +1,19 @@ package acceptance.task; +import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.Assert.assertThat; + import java.sql.SQLException; +import java.util.List; 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.TaskService; +import pro.taskana.TaskSummary; import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.security.JAASRunner; @@ -24,30 +29,55 @@ public class QueryTasksByWorkbasketAccTest extends AbstractAccTest { super(); } - @Ignore @WithAccessId( userName = "user_1_1", groupNames = { "group_1" }) @Test(expected = NotAuthorizedException.class) public void testThrowsExceptionIfNoOpenerPermissionOnQueriedWorkbasket() throws SQLException, NotAuthorizedException, InvalidArgumentException { - // TaskService taskService = taskanaEngine.getTaskService(); - // List results = taskService.createTaskQuery() - // .workbasketKeyIn("USER_2_1") - // .list(); + TaskService taskService = taskanaEngine.getTaskService(); + List results = taskService.createTaskQuery() + .workbasketKeyIn("USER_2_1") + .list(); } - @Ignore @WithAccessId( userName = "user_1_1", groupNames = { "group_1" }) - @Test + @Test(expected = NotAuthorizedException.class) public void testThrowsExceptionIfNoOpenerPermissionOnAtLeastOneQueriedWorkbasket() throws SQLException, NotAuthorizedException, InvalidArgumentException { - // TaskService taskService = taskanaEngine.getTaskService(); - // List results = taskService.createTaskQuery() - // .workbasketKeyIn("USER_1_1", "USER_2_1") - // .list(); + TaskService taskService = taskanaEngine.getTaskService(); + List results = taskService.createTaskQuery() + .workbasketKeyIn("USER_1_1", "USER_2_1") + .list(); + } + + @WithAccessId(userName = "user_1_1") + @Test + public void testQueryAllTasksForDomains() throws NotAuthorizedException { + TaskService taskService = taskanaEngine.getTaskService(); + List results = taskService.createTaskQuery() + .domainIn("DOMAIN_B", "", "DOMAIN_A") + .list(); + assertThat(results.size(), equalTo(17)); + + results = taskService.createTaskQuery() + .domainIn("DOMAIN_A") + .workbasketKeyIn("USER_1_1") + .list(); + assertThat(results.size(), equalTo(2)); + } + + @WithAccessId(userName = "user_1_1") + @Test + public void testQueryTasksForWorkbasket() throws NotAuthorizedException { + TaskService taskService = taskanaEngine.getTaskService(); + List results = taskService.createTaskQuery() + .domainIn("DOMAIN_A") + .workbasketKeyIn("USER_1_1") + .list(); + assertThat(results.size(), equalTo(2)); } @AfterClass diff --git a/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAccTest.java index 8f3b666c8..a720fc66e 100644 --- a/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/task/UpdateTaskAccTest.java @@ -1,17 +1,23 @@ package acceptance.task; +import static org.hamcrest.core.IsEqual.equalTo; +import static org.hamcrest.core.IsNot.not; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; import java.sql.SQLException; import org.h2.store.fs.FileUtils; import org.junit.AfterClass; import org.junit.Assert; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import acceptance.AbstractAccTest; +import pro.taskana.ClassificationSummary; import pro.taskana.Task; import pro.taskana.TaskService; import pro.taskana.exceptions.ClassificationNotFoundException; @@ -37,7 +43,7 @@ public class UpdateTaskAccTest extends AbstractAccTest { @WithAccessId( userName = "user_1_1", - groupNames = {"group_1"}) + groupNames = { "group_1" }) @Test public void testUpdatePrimaryObjectReferenceOfTask() throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, @@ -48,6 +54,7 @@ public class UpdateTaskAccTest extends AbstractAccTest { Task task = taskService.getTask("TKI:000000000000000000000000000000000000"); task.setPrimaryObjRef(createObjectReference("COMPANY_A", "SYSTEM_A", "INSTANCE_A", "VNR", "7654321")); Task updatedTask = taskService.updateTask(task); + updatedTask = taskService.getTask(updatedTask.getId()); Assert.assertNotNull(updatedTask); Assert.assertEquals("7654321", updatedTask.getPrimaryObjRef().getValue()); @@ -60,7 +67,7 @@ public class UpdateTaskAccTest extends AbstractAccTest { @WithAccessId( userName = "user_1_1", - groupNames = {"group_1"}) + groupNames = { "group_1" }) @Test public void testThrowsExceptionIfMandatoryPrimaryObjectReferenceIsNotSetOrIncomplete() throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, @@ -73,6 +80,7 @@ public class UpdateTaskAccTest extends AbstractAccTest { Task updatedTask = null; try { updatedTask = taskService.updateTask(task); + fail("update() should have thrown InvalidArgumentException."); } catch (InvalidArgumentException ex) { // nothing to do } @@ -80,6 +88,7 @@ public class UpdateTaskAccTest extends AbstractAccTest { task.setPrimaryObjRef(createObjectReference("COMPANY_A", "SYSTEM_A", "INSTANCE_A", "VNR", null)); try { updatedTask = taskService.updateTask(task); + fail("update() should have thrown InvalidArgumentException."); } catch (InvalidArgumentException ex) { // nothing to do } @@ -87,24 +96,28 @@ public class UpdateTaskAccTest extends AbstractAccTest { task.setPrimaryObjRef(createObjectReference("COMPANY_A", "SYSTEM_A", "INSTANCE_A", null, "1234567")); try { updatedTask = taskService.updateTask(task); + fail("update() should have thrown InvalidArgumentException."); } catch (InvalidArgumentException ex) { // nothing to do } task.setPrimaryObjRef(createObjectReference("COMPANY_A", "SYSTEM_A", null, "VNR", "1234567")); try { updatedTask = taskService.updateTask(task); + fail("update() should have thrown InvalidArgumentException."); } catch (InvalidArgumentException ex) { // nothing to do } task.setPrimaryObjRef(createObjectReference("COMPANY_A", null, "INSTANCE_A", "VNR", "1234567")); try { updatedTask = taskService.updateTask(task); + fail("update() should have thrown InvalidArgumentException."); } catch (InvalidArgumentException ex) { // nothing to do } task.setPrimaryObjRef(createObjectReference(null, "SYSTEM_A", "INSTANCE_A", "VNR", "1234567")); try { updatedTask = taskService.updateTask(task); + fail("update() should have thrown InvalidArgumentException."); } catch (InvalidArgumentException ex) { // nothing to do } @@ -112,7 +125,7 @@ public class UpdateTaskAccTest extends AbstractAccTest { @WithAccessId( userName = "user_1_1", - groupNames = {"group_1"}) + groupNames = { "group_1" }) @Test public void testThrowsExceptionIfTaskHasAlreadyBeenUpdated() throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, @@ -126,6 +139,7 @@ public class UpdateTaskAccTest extends AbstractAccTest { task.setCustom1("willi"); Task updatedTask = null; updatedTask = taskService.updateTask(task); + updatedTask = taskService.getTask(updatedTask.getId()); task2.setCustom2("Walter"); try { @@ -136,64 +150,59 @@ public class UpdateTaskAccTest extends AbstractAccTest { } - @Ignore @WithAccessId( userName = "user_1_1", - groupNames = {"group_1"}) + groupNames = { "group_1" }) @Test public void testUpdateClassificationOfTask() - throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, - WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException { - - // TaskService taskService = taskanaEngine.getTaskService(); - // Task with classification T2000 - // Task task = taskService.getTask("TKI:000000000000000000000000000000000000"); - // task.setClassificationKey("T2100")); - // Task updatedTask = taskService.updateTask(task); - // - // assertNotNull(updatedTask); - // assertEquals("T2100", updatedTask.getClassification().getKey()); - // assertNotEquals(updatedTask.getCreated(), updatedTask.getModified()); - // assertEquals(22, updatedTask.getPriority()); - // assertEquals(task.getPlanned(), updatedTask.getPlanned()); - // assertEquals(???, updatedTask.getDue()); // should be one day later - // assertEquals("T-Vertragstermin VERA", updatedTask.getName()); - // assertEquals("T-Vertragstermin VERA", updatedTask.getDescription()); - } - - @Ignore - @WithAccessId( - userName = "user_1_1", - groupNames = {"group_1"}) - @Test - public void testCustomPropertiesOfTask() - throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, - WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException { - - // TaskService taskService = taskanaEngine.getTaskService(); - // Task with classification T2000 - // Task task = taskService.getTask("TKI:000000000000000000000000000000000000"); - // task.setCustomProperty1("T2100")); - // ... - // Task updatedTask = taskService.updateTask(task); - // - // assertNotNull(updatedTask); - // meaningful assertions - } - - @Ignore - @WithAccessId( - userName = "user_1_1", - groupNames = {"group_1"}) - // @Test(expected = InvalidOperationException.class) - public void testUpdateOfWorkbasketKeyNotAllowed() - throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, - WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException { + throws TaskNotFoundException, WorkbasketNotFoundException, ClassificationNotFoundException, + InvalidArgumentException, ConcurrencyException, InvalidWorkbasketException, NotAuthorizedException { TaskService taskService = taskanaEngine.getTaskService(); - // Task task = taskService.getTask("TKI:000000000000000000000000000000000000"); - // task.setWorkbasketKey("USER_2_2"); - // Task updatedTask = taskService.updateTask(task); + Task task = taskService.getTask("TKI:000000000000000000000000000000000000"); + ClassificationSummary classificationSummary = task.getClassificationSummary(); + task.setClassificationKey("T2100"); + Task updatedTask = taskService.updateTask(task); + updatedTask = taskService.getTask(updatedTask.getId()); + + assertNotNull(updatedTask); + assertEquals("T2100", updatedTask.getClassificationSummary().getKey()); + assertThat(updatedTask.getClassificationSummary(), not(equalTo(classificationSummary))); + assertNotEquals(updatedTask.getCreated(), updatedTask.getModified()); + assertEquals(task.getPlanned(), updatedTask.getPlanned()); + assertEquals(task.getName(), updatedTask.getName()); + assertEquals(task.getDescription(), updatedTask.getDescription()); + } + + @WithAccessId( + userName = "user_1_1", + groupNames = { "group_1" }) + @Test + public void testCustomPropertiesOfTask() + throws TaskNotFoundException, WorkbasketNotFoundException, ClassificationNotFoundException, + InvalidArgumentException, ConcurrencyException, InvalidWorkbasketException, NotAuthorizedException { + TaskService taskService = taskanaEngine.getTaskService(); + Task task = taskService.getTask("TKI:000000000000000000000000000000000000"); + task.setCustom1("T2100"); + Task updatedTask = taskService.updateTask(task); + updatedTask = taskService.getTask(updatedTask.getId()); + + assertNotNull(updatedTask); + } + + @WithAccessId( + userName = "user_1_1", + groupNames = { "group_1" }) + @Test(expected = InvalidArgumentException.class) + public void testUpdateOfWorkbasketKeyWhatIsNotAllowed() + throws SQLException, NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, + WorkbasketNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException, TaskNotFoundException, + ConcurrencyException { + + TaskService taskService = taskanaEngine.getTaskService(); + Task task = taskService.getTask("TKI:000000000000000000000000000000000000"); + task.setWorkbasketKey("USER_2_2"); + Task updatedTask = taskService.updateTask(task); } @AfterClass diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/GetWorkbasketAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/GetWorkbasketAccTest.java index 47d9997f0..611ac74e8 100644 --- a/lib/taskana-core/src/test/java/acceptance/workbasket/GetWorkbasketAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/workbasket/GetWorkbasketAccTest.java @@ -5,7 +5,6 @@ import java.sql.SQLException; import org.h2.store.fs.FileUtils; import org.junit.AfterClass; import org.junit.Assert; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -55,7 +54,6 @@ public class GetWorkbasketAccTest extends AbstractAccTest { Workbasket workbasket = workbasketService.getWorkbasket("INVALID_ID"); } - @Ignore @Test(expected = NotAuthorizedException.class) public void testThrowsExceptionIfNotAuthorized() throws SQLException, NotAuthorizedException, InvalidArgumentException, WorkbasketNotFoundException, diff --git a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketByPermissionAccTest.java b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketByPermissionAccTest.java index a98705c0b..9b40b6730 100644 --- a/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketByPermissionAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/workbasket/QueryWorkbasketByPermissionAccTest.java @@ -36,8 +36,8 @@ public class QueryWorkbasketByPermissionAccTest extends AbstractAccTest { List results = workbasketService.createWorkbasketQuery() .accessIdsHavePersmission(WorkbasketAuthorization.APPEND, "user_1_1") .list(); - Assert.assertEquals(1L, results.size()); - Assert.assertEquals("USER_1_1", results.get(0).getKey()); + Assert.assertEquals(2, results.size()); + Assert.assertEquals("USER_1_1", results.get(1).getKey()); } @Test @@ -47,12 +47,12 @@ public class QueryWorkbasketByPermissionAccTest extends AbstractAccTest { List results = workbasketService.createWorkbasketQuery() .accessIdsHavePersmission(WorkbasketAuthorization.APPEND, "user_1_1", "group_1") .list(); - Assert.assertEquals(8L, results.size()); + Assert.assertEquals(9, results.size()); } @WithAccessId( userName = "user_1_1", - groupNames = {"group_1"}) + groupNames = { "group_1" }) @Test public void testQueryAllTransferTargetsForUserAndGroupFromSubject() throws SQLException, NotAuthorizedException, InvalidArgumentException, SystemException { @@ -60,11 +60,10 @@ public class QueryWorkbasketByPermissionAccTest extends AbstractAccTest { List results = workbasketService.createWorkbasketQuery() .callerHasPermission(WorkbasketAuthorization.APPEND) .list(); - Assert.assertEquals(8L, results.size()); + Assert.assertEquals(9, results.size()); } - @WithAccessId( - userName = "user_1_1") + @WithAccessId(userName = "user_1_1") @Test public void testQueryAllAvailableWorkbasketForOpeningForUserAndGroupFromSubject() throws SQLException, NotAuthorizedException, InvalidArgumentException { @@ -72,7 +71,7 @@ public class QueryWorkbasketByPermissionAccTest extends AbstractAccTest { List results = workbasketService.createWorkbasketQuery() .callerHasPermission(WorkbasketAuthorization.READ) .list(); - Assert.assertEquals(1L, results.size()); + Assert.assertEquals(2, results.size()); } @AfterClass diff --git a/lib/taskana-core/src/test/resources/sql/workbasket-access-list.sql b/lib/taskana-core/src/test/resources/sql/workbasket-access-list.sql index d27734e13..ae8b2d51b 100644 --- a/lib/taskana-core/src/test/resources/sql/workbasket-access-list.sql +++ b/lib/taskana-core/src/test/resources/sql/workbasket-access-list.sql @@ -1,6 +1,7 @@ INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('1', 'key1', 'Elena', true, true, true, true, true, false, false, false, false, false, false, false, false); INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('2', 'key2', 'Max', true, true, true, true, true, true, true, true, true, false, false, false, false); INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('3', 'key3', 'Simone', true, true, true, true, true, true, true, true, true, true, true, true, true); +INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('4', 'key4', 'user_1_1', true, true, true, true, true, true, true, true, true, true, true, true, true); -- KSC authorizations (ID, WB_KEY, ACCESS_ID, READ, OPEN, APPEND, TRANSFER, DISTRIBUTE, C1, .., C8) -- PPKs @@ -32,7 +33,6 @@ INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('WAI:10000000000000000000000000000000 INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('WAI:100000000000000000000000000000000021', 'GPK_KSC', 'teamlead_1', true, true, true, true, true, true, true, true, true, true, true, true, true); INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('WAI:100000000000000000000000000000000022', 'GPK_KSC', 'teamlead_2', true, true, true, true, true, true, true, true, true, true, true, true, true); - -- Access to other domains INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('WAI:100000000000000000000000000000000023', 'GPK_B_KSC_1', 'group_1', true, false, true, true, false, false, false, false, false, false, false, false, false); INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('WAI:100000000000000000000000000000000024', 'GPK_B_KSC_2', 'group_2', true, false, true, true, false, false, false, false, false, false, false, false, false);