From 10e888acd4eafc1bd1ac8e68787f2df7eff429b3 Mon Sep 17 00:00:00 2001 From: Benjamin Eckstein <13351939+benjamineckstein@users.noreply.github.com> Date: Tue, 28 Jan 2020 15:29:38 +0100 Subject: [PATCH] TSK-1060: Add sort by taskId to TaskQuery --- .../src/main/java/pro/taskana/TaskQuery.java | 9 +++ .../java/pro/taskana/impl/TaskQueryImpl.java | 5 ++ .../task/QueryTasksWithSortingAccTest.java | 55 +++++++++++++++++++ 3 files changed, 69 insertions(+) diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskQuery.java b/lib/taskana-core/src/main/java/pro/taskana/TaskQuery.java index ad7cb8348..d74e11bce 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/TaskQuery.java +++ b/lib/taskana-core/src/main/java/pro/taskana/TaskQuery.java @@ -643,6 +643,15 @@ public interface TaskQuery extends BaseQuery { */ TaskQuery orderByDue(SortDirection sortDirection); + /** + * This method sorts the query result according to the primary task id. + * + * @param sortDirection Determines whether the result is sorted in ascending or descending order. + * If sortDirection is null, the result is sorted in ascending order + * @return the query + */ + TaskQuery orderByTaskId(SortDirection sortDirection); + /** * This method sorts the query result according to the modified timestamp. * diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java index aa6b75a7d..02e8e855f 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskQueryImpl.java @@ -753,6 +753,11 @@ public class TaskQueryImpl implements TaskQuery { return addOrderCriteria("DUE", sortDirection); } + @Override + public TaskQuery orderByTaskId(SortDirection sortDirection) { + return addOrderCriteria("ID", sortDirection); + } + @Override public TaskQuery orderByModified(SortDirection sortDirection) { return addOrderCriteria("MODIFIED", sortDirection); diff --git a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithSortingAccTest.java b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithSortingAccTest.java index 1cd855d73..521641269 100644 --- a/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithSortingAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/task/QueryTasksWithSortingAccTest.java @@ -2,11 +2,15 @@ package acceptance.task; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import acceptance.AbstractAccTest; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -53,6 +57,57 @@ class QueryTasksWithSortingAccTest extends AbstractAccTest { } } + @WithAccessId( + userName = "teamlead_1", + groupNames = {"group_1", "group_2"}) + @Test + void testSortByTaskIdDesc() { + TaskService taskService = taskanaEngine.getTaskService(); + List results = + taskService + .createTaskQuery() + .workbasketKeyDomainIn(new KeyDomain("USER_3_2", "DOMAIN_B")) + .orderByTaskId(desc) + .list(); + + // test is only valid with at least 2 results + Assertions.assertTrue(results.size() > 2); + + List idsDesc = + results.stream() + .map(TaskSummary::getTaskId) + .sorted(Comparator.reverseOrder()) + .collect(Collectors.toList()); + + for (int i = 0; i < results.size(); i++) { + assertEquals(idsDesc.get(i), results.get(i).getTaskId()); + } + } + + @WithAccessId( + userName = "teamlead_1", + groupNames = {"group_1", "group_2"}) + @Test + void testSortByTaskIdAsc() { + TaskService taskService = taskanaEngine.getTaskService(); + List results = + taskService + .createTaskQuery() + .workbasketKeyDomainIn(new KeyDomain("USER_3_2", "DOMAIN_B")) + .orderByTaskId(null) + .list(); + + // test is only valid with at least 2 results + Assertions.assertTrue(results.size() > 2); + + List idsAsc = + results.stream().map(TaskSummary::getTaskId).sorted().collect(Collectors.toList()); + + for (int i = 0; i < results.size(); i++) { + assertEquals(idsAsc.get(i), results.get(i).getTaskId()); + } + } + @WithAccessId( userName = "teamlead_1", groupNames = {"group_1", "group_2"})