TSK-378: introduced REST integration tests on WorkbasketController.
This commit is contained in:
parent
2c62de91d7
commit
15dee0c269
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>pro.taskana</groupId>
|
||||
|
@ -15,7 +16,7 @@
|
|||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>1.5.6.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
<relativePath /> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
@ -30,6 +31,13 @@
|
|||
<artifactId>taskana-rest-spring</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Tests -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
package pro.taskana.rest;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.context.embedded.LocalServerPort;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.hateoas.Link;
|
||||
import org.springframework.hateoas.PagedResources;
|
||||
import org.springframework.hateoas.hal.Jackson2HalModule;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import pro.taskana.rest.resource.WorkbasketSummaryResource;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
|
||||
@Import(RestConfiguration.class)
|
||||
public class WorkbasketControllerIntTest {
|
||||
|
||||
@LocalServerPort
|
||||
int port;
|
||||
|
||||
@Test
|
||||
public void testGetAllWorkbaskets() {
|
||||
RestTemplate template = getRestTemplate();
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("Authorization", "Basic dGVhbWxlYWRfMTp0ZWFtbGVhZF8x");
|
||||
HttpEntity<String> request = new HttpEntity<String>(headers);
|
||||
ResponseEntity<PagedResources<WorkbasketSummaryResource>> response = template.exchange(
|
||||
"http://127.0.0.1:" + port + "/v1/workbaskets", HttpMethod.GET, request,
|
||||
new ParameterizedTypeReference<PagedResources<WorkbasketSummaryResource>>() {
|
||||
});
|
||||
assertNotNull(response.getBody().getLink(Link.REL_SELF));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllWorkbasketsKeepingFilters() {
|
||||
RestTemplate template = getRestTemplate();
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("Authorization", "Basic dGVhbWxlYWRfMTp0ZWFtbGVhZF8x");
|
||||
HttpEntity<String> request = new HttpEntity<String>(headers);
|
||||
ResponseEntity<PagedResources<WorkbasketSummaryResource>> response = template.exchange(
|
||||
"http://127.0.0.1:" + port + "/v1/workbaskets?type=PERSONAL&sortBy=key&order=desc", HttpMethod.GET, request,
|
||||
new ParameterizedTypeReference<PagedResources<WorkbasketSummaryResource>>() {
|
||||
});
|
||||
assertNotNull(response.getBody().getLink(Link.REL_SELF));
|
||||
assertTrue(response.getBody()
|
||||
.getLink(Link.REL_SELF)
|
||||
.getHref()
|
||||
.endsWith("/v1/workbaskets?type=PERSONAL&sortBy=key&order=desc"));
|
||||
assertNotNull(response.getBody().getLink("allWorkbaskets"));
|
||||
assertTrue(response.getBody()
|
||||
.getLink("allWorkbaskets")
|
||||
.getHref()
|
||||
.endsWith("/v1/workbaskets"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a REST template which is capable of dealing with responses in HAL format
|
||||
*
|
||||
* @return RestTemplate
|
||||
*/
|
||||
private RestTemplate getRestTemplate() {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
mapper.registerModule(new Jackson2HalModule());
|
||||
|
||||
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
|
||||
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
|
||||
converter.setObjectMapper(mapper);
|
||||
|
||||
RestTemplate template = new RestTemplate(Collections.<HttpMessageConverter<?>> singletonList(converter));
|
||||
return template;
|
||||
}
|
||||
|
||||
}
|
|
@ -11,7 +11,6 @@ import org.springframework.hateoas.Resources;
|
|||
import org.springframework.hateoas.config.EnableHypermediaSupport;
|
||||
import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
|
@ -46,14 +45,14 @@ import pro.taskana.rest.resource.mapper.DistributionTargetListMapper;
|
|||
import pro.taskana.rest.resource.mapper.WorkbasketAccessItemListMapper;
|
||||
import pro.taskana.rest.resource.mapper.WorkbasketAccessItemMapper;
|
||||
import pro.taskana.rest.resource.mapper.WorkbasketMapper;
|
||||
import pro.taskana.rest.resource.mapper.WorkbasketSummaryResourceAssembler;
|
||||
import pro.taskana.rest.resource.mapper.WorkbasketSummaryResourcesAssembler;
|
||||
|
||||
/**
|
||||
* Controller for all {@link Workbasket} related endpoints.
|
||||
*/
|
||||
@RestController
|
||||
@EnableHypermediaSupport(type = HypermediaType.HAL)
|
||||
@RequestMapping(path = "/v1/workbaskets", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@RequestMapping(path = "/v1/workbaskets", produces = "application/hal+json")
|
||||
public class WorkbasketController {
|
||||
|
||||
private static final String LIKE = "%";
|
||||
|
@ -92,22 +91,23 @@ public class WorkbasketController {
|
|||
@RequestParam(value = "owner", required = false) String owner,
|
||||
@RequestParam(value = "ownerLike", required = false) String ownerLike,
|
||||
@RequestParam(value = "type", required = false) String type,
|
||||
@RequestParam(value = "requiredPermission", required = false) String requiredPermission)
|
||||
throws WorkbasketNotFoundException, NotAuthorizedException, InvalidArgumentException {
|
||||
@RequestParam(value = "requiredPermission", required = false) String requiredPermission,
|
||||
@RequestParam(value = "page", required = false) String page,
|
||||
@RequestParam(value = "pagesize", required = false) String pagesize) {
|
||||
|
||||
WorkbasketQuery query = workbasketService.createWorkbasketQuery();
|
||||
addSortingToQuery(query, sortBy, order);
|
||||
addAttributeFilter(query, name, nameLike, key, keyLike, descLike, owner, ownerLike, type);
|
||||
addAuthorizationFilter(query, requiredPermission);
|
||||
List<WorkbasketSummary> workbasketSummaries = query.list();
|
||||
|
||||
// Iterable<? extends WorkbasketSummary> workbasketSummaries2 = query.list();
|
||||
// long totalElements = query.count();
|
||||
|
||||
WorkbasketSummaryResourceAssembler assembler = new WorkbasketSummaryResourceAssembler();
|
||||
List<WorkbasketSummaryResource> resources = assembler.toResources(workbasketSummaries);
|
||||
PageMetadata pageMetadata = new PageMetadata(5, 1, workbasketSummaries.size(), 4);
|
||||
PagedResources<WorkbasketSummaryResource> pagedResources = new PagedResources<WorkbasketSummaryResource>(
|
||||
resources,
|
||||
PageMetadata pageMetadata = new PageMetadata(Integer.MAX_VALUE, 0, 11, 4);
|
||||
List<WorkbasketSummary> workbasketSummaries = query.listPage((int) pageMetadata.getNumber(),
|
||||
(int) pageMetadata.getSize());
|
||||
|
||||
WorkbasketSummaryResourcesAssembler assembler = new WorkbasketSummaryResourcesAssembler();
|
||||
PagedResources<WorkbasketSummaryResource> pagedResources = assembler.toResources(workbasketSummaries,
|
||||
pageMetadata);
|
||||
|
||||
return new ResponseEntity<>(pagedResources, HttpStatus.OK);
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
package pro.taskana.rest.resource.mapper;
|
||||
|
||||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.hateoas.Link;
|
||||
import org.springframework.hateoas.PagedResources;
|
||||
import org.springframework.hateoas.PagedResources.PageMetadata;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import pro.taskana.WorkbasketSummary;
|
||||
import pro.taskana.rest.WorkbasketController;
|
||||
import pro.taskana.rest.resource.WorkbasketSummaryResource;
|
||||
|
||||
/**
|
||||
* @author HH
|
||||
*/
|
||||
public class WorkbasketSummaryResourcesAssembler {
|
||||
|
||||
public WorkbasketSummaryResourcesAssembler() {
|
||||
}
|
||||
|
||||
public PagedResources<WorkbasketSummaryResource> toResources(List<WorkbasketSummary> workbasketSummaries,
|
||||
PageMetadata pageMetadata) {
|
||||
|
||||
WorkbasketSummaryResourceAssembler assembler = new WorkbasketSummaryResourceAssembler();
|
||||
List<WorkbasketSummaryResource> resources = assembler.toResources(workbasketSummaries);
|
||||
PagedResources<WorkbasketSummaryResource> pagedResources = new PagedResources<WorkbasketSummaryResource>(
|
||||
resources,
|
||||
pageMetadata);
|
||||
|
||||
UriComponentsBuilder original = getBuilderForOriginalUri();
|
||||
pagedResources.add(new Link(original.toUriString()).withSelfRel());
|
||||
pagedResources.add(linkTo(WorkbasketController.class).withRel("allWorkbaskets"));
|
||||
|
||||
return pagedResources;
|
||||
}
|
||||
|
||||
private UriComponentsBuilder getBuilderForOriginalUri() {
|
||||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
|
||||
.getRequest();
|
||||
UriComponentsBuilder baseUri = ServletUriComponentsBuilder.fromServletMapping(request)
|
||||
.path(request.getRequestURI());
|
||||
for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
|
||||
for (String value : entry.getValue()) {
|
||||
baseUri.queryParam(entry.getKey(), value);
|
||||
}
|
||||
}
|
||||
UriComponentsBuilder original = baseUri;
|
||||
return original;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue