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