diff --git a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/TaskControllerIntTest.java b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/TaskControllerIntTest.java index ef446be49..fca416a2a 100644 --- a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/TaskControllerIntTest.java +++ b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/TaskControllerIntTest.java @@ -64,6 +64,54 @@ public class TaskControllerIntTest { assertEquals(23, response.getBody().getContent().size()); } + @Test + public void testGetAllTasksByWorkbasketId() { + RestTemplate template = getRestTemplate(); + HttpHeaders headers = new HttpHeaders(); + headers.add("Authorization", "Basic dXNlcl8xXzI6dXNlcl8xXzI="); // user_1_2 + HttpEntity request = new HttpEntity(headers); + ResponseEntity> response = template.exchange( + "http://127.0.0.1:" + port + "/v1/tasks?workbasket-id=WBI:100000000000000000000000000000000007", + HttpMethod.GET, request, + new ParameterizedTypeReference>() { + }); + assertNotNull(response.getBody().getLink(Link.REL_SELF)); + assertEquals(20, response.getBody().getContent().size()); + } + + @Test + public void testGetAllTasksByWorkbasketKeyAndDomain() { + RestTemplate template = getRestTemplate(); + HttpHeaders headers = new HttpHeaders(); + headers.add("Authorization", "Basic dXNlcl8xXzI6dXNlcl8xXzI="); // user_1_2 + HttpEntity request = new HttpEntity(headers); + ResponseEntity> response = template.exchange( + "http://127.0.0.1:" + port + "/v1/tasks?workbasket-key=USER_1_2&domain=DOMAIN_A", + HttpMethod.GET, request, + new ParameterizedTypeReference>() { + }); + assertNotNull(response.getBody().getLink(Link.REL_SELF)); + assertEquals(20, response.getBody().getContent().size()); + } + + @Test + public void testExceptionIfKeyIsSetButDomainIsMissing() { + RestTemplate template = getRestTemplate(); + HttpHeaders headers = new HttpHeaders(); + headers.add("Authorization", "Basic dXNlcl8xXzI6dXNlcl8xXzI="); // user_1_2 + HttpEntity request = new HttpEntity(headers); + try { + ResponseEntity> response = template.exchange( + "http://127.0.0.1:" + port + "/v1/tasks?workbasket-key=USER_1_2", + HttpMethod.GET, request, + new ParameterizedTypeReference>() { + }); + fail(); + } catch (HttpClientErrorException e) { + assertEquals(HttpStatus.BAD_REQUEST, e.getStatusCode()); + } + } + @Test public void testGetAllTasksWithAdminRole() { RestTemplate template = getRestTemplate(); diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java index 31c142c27..034c3f7b0 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java @@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import pro.taskana.BaseQuery.SortDirection; +import pro.taskana.KeyDomain; import pro.taskana.Task; import pro.taskana.TaskQuery; import pro.taskana.TaskService; @@ -63,7 +64,9 @@ public class TaskController extends AbstractPagingController { private static final String PRIORITY = "priority"; private static final String NAME = "name"; private static final String OWNER = "owner"; - private static final String WORKBASKET_ID = "workbasketId"; + private static final String DOMAIN = "domain"; + private static final String WORKBASKET_ID = "workbasket-id"; + private static final String WORKBASKET_KEY = "workbasket-key"; private static final String CLASSIFICATION_KEY = "classification.key"; private static final String POR_VALUE = "por.value"; private static final String POR_TYPE = "por.type"; @@ -238,6 +241,23 @@ public class TaskController extends AbstractPagingController { taskQuery.workbasketIdIn(workbaskets); params.remove(WORKBASKET_ID); } + if (params.containsKey(WORKBASKET_KEY)) { + String[] domains = null; + if (params.get(DOMAIN) != null) { + domains = extractCommaSeparatedFields(params.get(DOMAIN)); + } + if (domains == null || domains.length != 1) { + throw new InvalidArgumentException("workbasket-key requires excactly one domain as second parameter."); + } + String[] workbasketKeys = extractCommaSeparatedFields(params.get(WORKBASKET_KEY)); + KeyDomain[] keyDomains = new KeyDomain[workbasketKeys.length]; + for (int i = 0; i < workbasketKeys.length; i++) { + keyDomains[i] = new KeyDomain(workbasketKeys[i], domains[0]); + } + taskQuery.workbasketKeyDomainIn(keyDomains); + params.remove(WORKBASKET_KEY); + params.remove(DOMAIN); + } if (params.containsKey(OWNER)) { String[] owners = extractCommaSeparatedFields(params.get(OWNER)); taskQuery.ownerIn(owners);