DATACMNS-699 - PagedResourcesAssembler now allows to create empty Page with type information.

This commit is contained in:
Oliver Gierke
2015-05-18 16:19:14 +02:00
parent 65104a4a3a
commit c5aaebd0e4
2 changed files with 73 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2013-2014 the original author or authors.
* Copyright 2013-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,6 +35,7 @@ import org.springframework.hateoas.PagedResources;
import org.springframework.hateoas.Resource;
import org.springframework.hateoas.ResourceAssembler;
import org.springframework.hateoas.ResourceSupport;
import org.springframework.hateoas.core.EmbeddedWrapper;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
@@ -46,7 +47,10 @@ import org.springframework.web.util.UriComponentsBuilder;
*/
public class PagedResourcesAssemblerUnitTests {
static final Page<Object> EMPTY_PAGE = new PageImpl<Object>(Collections.emptyList());
HateoasPageableHandlerMethodArgumentResolver resolver = new HateoasPageableHandlerMethodArgumentResolver();
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
@Before
public void setUp() {
@@ -56,7 +60,6 @@ public class PagedResourcesAssemblerUnitTests {
@Test
public void addsNextLinkForFirstPage() {
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(0));
assertThat(resources.getLink(Link.REL_PREVIOUS), is(nullValue()));
@@ -67,7 +70,6 @@ public class PagedResourcesAssemblerUnitTests {
@Test
public void addsPreviousAndNextLinksForMiddlePage() {
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(1));
assertThat(resources.getLink(Link.REL_PREVIOUS), is(notNullValue()));
@@ -78,7 +80,6 @@ public class PagedResourcesAssemblerUnitTests {
@Test
public void addsPreviousLinkForLastPage() {
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(2));
assertThat(resources.getLink(Link.REL_PREVIOUS), is(notNullValue()));
@@ -104,7 +105,6 @@ public class PagedResourcesAssemblerUnitTests {
Link link = new Link("http://foo:9090", "rel");
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(1), link);
assertThat(resources.getLink(Link.REL_PREVIOUS).getHref(), startsWith(link.getHref()));
@@ -119,7 +119,6 @@ public class PagedResourcesAssemblerUnitTests {
public void createsPagedResourcesForOneIndexedArgumentResolver() {
resolver.setOneIndexedParameters(true);
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
AbstractPageRequest request = new PageRequest(0, 1);
Page<Person> page = new PageImpl<Person>(Collections.<Person> emptyList(), request, 0);
@@ -134,7 +133,6 @@ public class PagedResourcesAssemblerUnitTests {
@Test
public void createsACanonicalLinkWithoutTemplateParameters() {
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(1));
Link selfLink = resources.getLink(Link.REL_SELF);
@@ -147,7 +145,6 @@ public class PagedResourcesAssemblerUnitTests {
@Test
public void invokesCustomElementResourceAssembler() {
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
PersonResourceAssembler personAssembler = new PersonResourceAssembler();
PagedResources<PersonResource> resources = assembler.toResource(createPage(0), personAssembler);
@@ -184,7 +181,6 @@ public class PagedResourcesAssemblerUnitTests {
@Test
public void generatedLinksShouldNotBeTemplated() {
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(1));
assertThat(resources.getLink(Link.REL_SELF).getHref(), endsWith("localhost"));
@@ -192,6 +188,38 @@ public class PagedResourcesAssemblerUnitTests {
assertThat(resources.getLink(Link.REL_PREVIOUS).getHref(), endsWith("?page=0&size=1"));
}
/**
* @see DATACMNS-699
*/
@Test
public void generatesEmptyPagedResourceWithEmbeddedWrapper() {
PagedResources<?> result = assembler.toEmptyResource(EMPTY_PAGE, Person.class, null);
Collection<?> content = result.getContent();
assertThat(content, hasSize(1));
Object element = content.iterator().next();
assertThat(element, is(instanceOf(EmbeddedWrapper.class)));
assertThat(((EmbeddedWrapper) element).getRelTargetType(), is(typeCompatibleWith(Person.class)));
}
/**
* @see DATACMNS-699
*/
@Test(expected = IllegalArgumentException.class)
public void emptyPageCreatorRejectsPageWithContent() {
assembler.toEmptyResource(createPage(1), Person.class, null);
}
/**
* @see DATACMNS-699
*/
@Test(expected = IllegalArgumentException.class)
public void emptyPageCreatorRejectsNullType() {
assembler.toEmptyResource(EMPTY_PAGE, null, null);
}
private static Page<Person> createPage(int index) {
AbstractPageRequest request = new PageRequest(index, 1);