package org.openstack.atlas.api.helpers; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import org.openstack.atlas.cfg.PublicApiServiceConfigurationKeys; import org.openstack.atlas.cfg.RestApiConfiguration; import org.w3.atom.Link; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(Enclosed.class) public class PaginationHelperTest { public static class WhenDeterminingPageOffset { @Test public void shouldReturnDefaultOffsetWhenOffsetIsNull() { Integer offset = PaginationHelper.determinePageOffset(null); Assert.assertEquals(PaginationHelper.DEFAULT_PAGE_OFFSET, offset); } @Test public void shouldReturnMinOffsetWhenOffsetIsBelowMin() { Integer offset = PaginationHelper.determinePageOffset(PaginationHelper.MIN_PAGE_OFFSET - 1); Assert.assertEquals(PaginationHelper.MIN_PAGE_OFFSET, offset); } @Test public void shouldReturnSameOffsetWhenOffsetIsNormal() { Integer originalOffset = 500; Integer offset = PaginationHelper.determinePageOffset(originalOffset); Assert.assertEquals(originalOffset, offset); } } public static class WhenDeterminingPageLimit { @Test public void shouldReturnDefaultLimitWhenLimitIsNull() { Integer limit = PaginationHelper.determinePageLimit(null); Assert.assertEquals(PaginationHelper.DEFAULT_PAGE_LIMIT, limit); } @Test public void shouldReturnMinLimitWhenLimitIsBelowMin() { Integer limit = PaginationHelper.determinePageLimit(PaginationHelper.MIN_PAGE_LIMIT - 1); Assert.assertEquals(PaginationHelper.MIN_PAGE_LIMIT, limit); } @Test public void shouldReturnMaxLimitWhenLimitIsAboveMax() { Integer limit = PaginationHelper.determinePageLimit(PaginationHelper.MAX_PAGE_LIMIT + 1); Assert.assertEquals(PaginationHelper.MAX_PAGE_LIMIT, limit); } @Test public void shouldReturnSameLimitWhenLimitIsWithinBounds() { Integer originalLimit = PaginationHelper.DEFAULT_PAGE_LIMIT; Integer limit = PaginationHelper.determinePageLimit(originalLimit); Assert.assertEquals(originalLimit, limit); } } public static class WhenCalculatingNextOffset { @Test public void shouldReturnSecondPageWhenOffsetAndLimitAreNull() { Integer offset = PaginationHelper.calculateNextOffset(null, null); final Integer expectedOffset = PaginationHelper.DEFAULT_PAGE_LIMIT + PaginationHelper.DEFAULT_PAGE_OFFSET; Assert.assertEquals(expectedOffset, offset); } @Test public void shouldReturnProperOffsetWhenParametersAreNormal() { Integer originalOffset = 10; Integer originalLimit = 100; Integer newOffset = PaginationHelper.calculateNextOffset(originalOffset, originalLimit); final Integer expectedOffset = originalOffset + originalLimit; Assert.assertEquals(expectedOffset, newOffset); } } public static class WhenCalculatingPreviousOffset { @Test public void shouldReturnDefaultOffsetWhenOffsetAndLimitAreNull() { Integer offset = PaginationHelper.calculatePreviousOffset(null, null); Assert.assertEquals(PaginationHelper.DEFAULT_PAGE_OFFSET, offset); } @Test public void shouldReturnZeroWhenOffsetLessThanLimit() { Integer originalOffset = 10; Integer originalLimit = 100; Integer newOffset = PaginationHelper.calculatePreviousOffset(originalOffset, originalLimit); Assert.assertEquals(new Integer(0), newOffset); } @Test public void shouldReturnZeroWhenOffsetEqualsLimit() { Integer originalOffset = 100; Integer originalLimit = 100; Integer newOffset = PaginationHelper.calculatePreviousOffset(originalOffset, originalLimit); Assert.assertEquals(new Integer(0), newOffset); } @Test public void shouldReturnProperOffsetWhenOffsetGreaterThanLimit() { Integer originalOffset = 101; Integer originalLimit = 100; Integer newOffset = PaginationHelper.calculatePreviousOffset(originalOffset, originalLimit); Assert.assertEquals(new Integer(1), newOffset); } } public static class WhenCreatingLink { private RestApiConfiguration configuration; private PaginationHelper paginationHelper; private String mockedBaseUri = "http://mocked.api.endpoint/v1.0"; @Before public void setup() { configuration = mock(RestApiConfiguration.class); doReturn(true).when(configuration).hasKeys(PublicApiServiceConfigurationKeys.base_uri); when(configuration.getString(PublicApiServiceConfigurationKeys.base_uri)).thenReturn(mockedBaseUri); paginationHelper = new PaginationHelper(); paginationHelper.setRestApiConfiguration(configuration); } @Test public void shouldCreateProperHref() { final String ref = "next"; final String relativeUri = "/foo/bar/baz"; Link link = PaginationHelper.createLink(ref, relativeUri); Assert.assertEquals(mockedBaseUri + relativeUri, link.getHref()); } } }