Add pagination container
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / utils / PaginationTest.kt
1 package net.pterodactylus.sone.utils
2
3 import org.hamcrest.MatcherAssert.assertThat
4 import org.hamcrest.Matchers.contains
5 import org.hamcrest.Matchers.equalTo
6 import org.junit.Test
7
8 /**
9  * Unit test for [Pagination].
10  */
11 class PaginationTest {
12
13         private val items = listOf(1, 2, 3, 4, 5)
14         private val pagination = Pagination<Int>(items, 2)
15
16         @Test
17         fun `new pagination is at page 0`() {
18                 assertThat(pagination.page, equalTo(0))
19         }
20
21         @Test
22         fun `new pagination is at page number 1`() {
23             assertThat(pagination.pageNumber, equalTo(1))
24         }
25
26         @Test
27         fun `setting a page to less than 0 sets page to 0`() {
28                 pagination.page = -1
29                 assertThat(pagination.page, equalTo(0))
30         }
31
32         @Test
33         fun `setting page to a valid page sets page`() {
34                 pagination.page = 1
35                 assertThat(pagination.page, equalTo(1))
36         }
37
38         @Test
39         fun `setting a too large page will cap the page`() {
40                 pagination.page = 100
41                 assertThat(pagination.page, equalTo(2))
42         }
43
44         @Test
45         fun `the page count is returned correctly`() {
46             assertThat(pagination.pageCount, equalTo(3))
47         }
48
49         @Test
50         fun `page size is returned correctly`() {
51             assertThat(pagination.pageSize, equalTo(2))
52         }
53
54         @Test
55         fun `a page size of less than 1 is set to 1`() {
56             pagination.pageSize = 0
57                 assertThat(pagination.pageSize, equalTo(1))
58         }
59
60         @Test
61         fun `changing page size sets new page correctly`() {
62                 pagination.page = 1
63             pagination.pageSize = 1
64                 assertThat(pagination.page, equalTo(2))
65         }
66
67         @Test
68         fun `changing page size to very large returns to page 0`() {
69             pagination.page = 1
70                 pagination.pageSize = 20
71                 assertThat(pagination.page, equalTo(0))
72         }
73
74         @Test
75         fun `item count for current page is page size of first page`() {
76             assertThat(pagination.itemCount, equalTo(2))
77         }
78
79         @Test
80         fun `item count for last page is 1`() {
81             pagination.page = 2
82                 assertThat(pagination.itemCount, equalTo(1))
83         }
84
85         @Test
86         fun `items on first page are returned correctly`() {
87             assertThat(pagination.items, contains(1, 2))
88         }
89
90         @Test
91         fun `items on last page are returned correctly`() {
92             pagination.page = 2
93                 assertThat(pagination.items, contains(5))
94         }
95
96         @Test
97         fun `pagination is first on first page`() {
98             assertThat(pagination.isFirst, equalTo(true))
99         }
100
101         @Test
102         fun `pagination is not first on second page`() {
103                 pagination.page = 1
104             assertThat(pagination.isFirst, equalTo(false))
105         }
106
107         @Test
108         fun `pagination is not first on last page`() {
109                 pagination.page = 2
110             assertThat(pagination.isFirst, equalTo(false))
111         }
112
113         @Test
114         fun `pagination is not last  on first page`() {
115             assertThat(pagination.isLast, equalTo(false))
116         }
117
118         @Test
119         fun `pagination is not last on second page`() {
120                 pagination.page = 1
121             assertThat(pagination.isLast, equalTo(false))
122         }
123
124         @Test
125         fun `pagination is last on last page`() {
126                 pagination.page = 2
127             assertThat(pagination.isLast, equalTo(true))
128         }
129
130         @Test
131         fun `pagination is necessary for three pages`() {
132             assertThat(pagination.isNecessary, equalTo(true))
133         }
134
135         @Test
136         fun `pagination is necessary for two pages`() {
137             pagination.pageSize = 4
138                 assertThat(pagination.isNecessary, equalTo(true))
139         }
140
141         @Test
142         fun `pagination is not necessary for one page`() {
143                 pagination.pageSize = 20
144                 assertThat(pagination.isNecessary, equalTo(false))
145         }
146
147         @Test
148         fun `previous page is returned correctly for second page`() {
149                 pagination.page = 1
150             assertThat(pagination.previousPage, equalTo(0))
151         }
152
153         @Test
154         fun `previous page is returned correctly for last page`() {
155                 pagination.page = 2
156                 assertThat(pagination.previousPage, equalTo(1))
157         }
158
159         @Test
160         fun `next page is returned correctly for first page`() {
161             assertThat(pagination.nextPage, equalTo(1))
162         }
163
164         @Test
165         fun `next page is returned correctly for second page`() {
166                 pagination.page = 1
167             assertThat(pagination.nextPage, equalTo(2))
168         }
169
170         @Test
171         fun `last page is returned correctly`() {
172             assertThat(pagination.lastPage, equalTo(2))
173         }
174
175         @Test
176         fun `iterator returns items on the current page`() {
177             assertThat(pagination.iterator().asSequence().toList(), contains(1, 2))
178         }
179
180 }