diff --git a/src/main/java/org/springframework/hateoas/PagedResources.java b/src/main/java/org/springframework/hateoas/PagedResources.java index f22e5ff2..cc32ac58 100644 --- a/src/main/java/org/springframework/hateoas/PagedResources.java +++ b/src/main/java/org/springframework/hateoas/PagedResources.java @@ -204,8 +204,10 @@ public class PagedResources extends Resources { */ public PageMetadata(long size, long number, long totalElements, long totalPages) { - Assert.isTrue(number < totalPages, - "The current page number cannot be greater or equal to the total number of pages!"); + Assert.isTrue(size > -1, "Size must not be negative!"); + Assert.isTrue(number > -1, "Number must not be negative!"); + Assert.isTrue(totalElements > -1, "Total elements must not be negative!"); + Assert.isTrue(totalPages > -1, "Total pages must not be negative!"); this.size = size; this.number = number; @@ -221,7 +223,7 @@ public class PagedResources extends Resources { * @param totalElements the total number of elements available */ public PageMetadata(long size, long number, long totalElements) { - this(size, number, totalElements, totalElements / size); + this(size, number, totalElements, size == 0 ? 0 : totalElements / size); } /** diff --git a/src/test/java/org/springframework/hateoas/PagedResourcesUnitTest.java b/src/test/java/org/springframework/hateoas/PagedResourcesUnitTest.java index 512b806f..c0ba9bae 100644 --- a/src/test/java/org/springframework/hateoas/PagedResourcesUnitTest.java +++ b/src/test/java/org/springframework/hateoas/PagedResourcesUnitTest.java @@ -55,4 +55,44 @@ public class PagedResourcesUnitTest { assertThat(resources.getPreviousLink(), is(notNullValue())); } + + /** + * @see #89 + */ + @Test(expected = IllegalArgumentException.class) + public void preventsNegativePageSize() { + new PageMetadata(-1, 0, 0); + } + + /** + * @see #89 + */ + @Test(expected = IllegalArgumentException.class) + public void preventsNegativePageNumber() { + new PageMetadata(0, -1, 0); + } + + /** + * @see #89 + */ + @Test(expected = IllegalArgumentException.class) + public void preventsNegativeTotalElements() { + new PageMetadata(0, 0, -1); + } + + /** + * @see #89 + */ + @Test(expected = IllegalArgumentException.class) + public void preventsNegativeTotalPages() { + new PageMetadata(0, 0, 0, -1); + } + + /** + * @see #89 + */ + @Test + public void allowsOneIndexedPages() { + new PageMetadata(10, 1, 0); + } }