From 64d25543254b5359e6422cb15c0dc3e6b0920a90 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 26 Aug 2013 18:08:46 +0200 Subject: [PATCH] #89 - Tweaked assertions in PageMetadata. PageMetadata doesn't reject empty pages anymore if they're used with 1-indexed Pageables. Also tweaked the assertions to only reject negative values for now. --- .../hateoas/PagedResources.java | 8 ++-- .../hateoas/PagedResourcesUnitTest.java | 40 +++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) 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); + } }