1 package org.oxerr.commons.ws.rs.data;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.junit.jupiter.api.Assertions.assertFalse;
5 import static org.junit.jupiter.api.Assertions.assertThrows;
6 import static org.junit.jupiter.api.Assertions.assertTrue;
7
8 import java.util.Arrays;
9 import java.util.Collections;
10 import java.util.Optional;
11
12 import org.junit.jupiter.api.Test;
13 import org.springframework.data.domain.PageRequest;
14 import org.springframework.data.domain.Pageable;
15 import org.springframework.data.domain.Sort;
16 import org.springframework.data.domain.Sort.Direction;
17 import org.springframework.data.domain.Sort.Order;
18
19 class OffsetPageRequestTest {
20
21 @Test
22 void testOffsetPageRequestIntLongSort() {
23 assertThrows(IllegalArgumentException.class, () -> new OffsetPageRequest(1, 0, null));
24 }
25
26 @Test
27 void testOf() {
28 OffsetPageRequest p = new OffsetPageRequest();
29
30 assertEquals(p, OffsetPageRequest.of());
31 assertEquals(p, OffsetPageRequest.of(10, 0));
32 assertEquals(p, OffsetPageRequest.of(10, 0, Sort.unsorted()));
33 }
34
35 @Test
36 void testDefaultSort() {
37 OffsetPageRequest p = new OffsetPageRequest();
38 OffsetPageRequest p0 = p.defaultSort(Direction.DESC, "f1");
39
40 assertEquals(Sort.by(Direction.DESC, "f1"), p0.getSort());
41 assertEquals(Sort.by(Direction.DESC, "f1"), p0.defaultSort(Direction.ASC, "f2").getSort());
42 }
43
44 @Test
45 void testSetLimit() {
46 OffsetPageRequest p = new OffsetPageRequest();
47 p.setLimit(p.getMaxLimit());
48 assertEquals(p.getMaxLimit(), p.getPageSize());
49
50 int exceededLimit = p.getMaxLimit() + 1;
51 assertThrows(IllegalArgumentException.class, () -> p.setLimit(exceededLimit));
52 }
53
54 @Test
55 void testSetOffset() {
56 OffsetPageRequest p = new OffsetPageRequest();
57 p.setOffset(1);
58 assertEquals(1, p.getOffset());
59 }
60
61 @Test
62 void testSetSort() {
63 OffsetPageRequest p = new OffsetPageRequest();
64 assertThrows(IllegalArgumentException.class, () -> p.setSort(null));
65
66 p.setSort(Collections.emptyList());
67 assertEquals(Sort.unsorted(), p.getSort());
68
69 p.setSort(Arrays.asList(""));
70 assertEquals(Sort.unsorted(), p.getSort());
71
72 p.setSort(Arrays.asList("f1"));
73 assertEquals(Sort.by(Direction.ASC, "f1"), p.getSort());
74
75 p.setSort(Arrays.asList("f1,desc"));
76 assertEquals(Sort.by(Direction.DESC, "f1"), p.getSort());
77 }
78
79 @Test
80 void testGetPageNumber() {
81 OffsetPageRequest p = new OffsetPageRequest();
82 assertEquals(10, p.getPageSize());
83 assertEquals(0, p.getPageNumber());
84
85 p.setOffset(9);
86 assertEquals(0, p.getPageNumber());
87
88 p.setOffset(10);
89 assertEquals(1, p.getPageNumber());
90
91 p.setOffset(11);
92 assertEquals(1, p.getPageNumber());
93
94 p.setOffset(19);
95 assertEquals(1, p.getPageNumber());
96
97 p.setOffset(20);
98 assertEquals(2, p.getPageNumber());
99
100 p.setOffset(21);
101 assertEquals(2, p.getPageNumber());
102
103 p.setLimit(0);
104 assertEquals(0, p.getPageNumber());
105
106 p.setLimit(-1);
107 assertEquals(0, p.getPageNumber());
108 }
109
110 @Test
111 void testGetSort() {
112 PageRequest pr = PageRequest.of(0, 10);
113 assertEquals(Sort.unsorted(), pr.getSort());
114
115 OffsetPageRequest opr = new OffsetPageRequest();
116 assertEquals(Sort.unsorted(), opr.getSort());
117 }
118
119 @Test
120 void testNext() {
121 Pageable p = new OffsetPageRequest();
122 assertEquals(0, p.getPageNumber());
123 assertEquals(10, p.getPageSize());
124 assertEquals(0, p.getOffset());
125
126 Pageable next = p.next();
127 assertEquals(1, next.getPageNumber());
128 assertEquals(10, next.getPageSize());
129 assertEquals(10, next.getOffset());
130 }
131
132 @Test
133 void testPrevious() {
134 OffsetPageRequest p = new OffsetPageRequest();
135 assertEquals(p, p.previous());
136
137 assertEquals(p, p.next().previous());
138
139 p.setOffset(10);
140 assertEquals(p, p.next().previous());
141 }
142
143 @Test
144 void testPreviousOrFirst() {
145 OffsetPageRequest p = new OffsetPageRequest();
146 assertEquals(p, p.previousOrFirst());
147
148 assertEquals(p, p.next().previousOrFirst());
149
150 p.setOffset(10);
151 assertEquals(p, p.next().previousOrFirst());
152 }
153
154 @Test
155 void testFirst() {
156 Pageable p = new OffsetPageRequest();
157 assertEquals(p, p.first());
158 }
159
160 @Test
161 void testWithPage() {
162 Pageable p = new OffsetPageRequest();
163 assertEquals(0, p.getPageNumber());
164 assertEquals(10, p.getPageSize());
165 assertEquals(0, p.getOffset());
166
167 Pageable p0 = p.withPage(0);
168 assertEquals(0, p0.getPageNumber());
169 assertEquals(10, p0.getPageSize());
170 assertEquals(0, p0.getOffset());
171
172 Pageable p1 = p0.withPage(1);
173
174 assertEquals(p.withPage(1), p1);
175
176 assertEquals(1, p1.getPageNumber());
177 assertEquals(10, p1.getPageSize());
178 assertEquals(10, p1.getOffset());
179
180 Pageable p2 = p1.withPage(2);
181
182 assertEquals(p.withPage(2), p2);
183
184 assertEquals(2, p2.getPageNumber());
185 assertEquals(10, p2.getPageSize());
186 assertEquals(20, p2.getOffset());
187 }
188
189 @Test
190 void defaultSort() {
191 OffsetPageRequest opr = new OffsetPageRequest(5, 1, Sort.unsorted());
192 assertEquals(1L, opr.getOffset());
193 Pageable p = opr.defaultSort(Direction.DESC, "createdDate");
194 assertEquals(1L, p.getOffset());
195 }
196
197 @Test
198 void testUnsort() {
199 OffsetPageRequest opr = new OffsetPageRequest();
200 assertEquals(Sort.unsorted(), opr.getSort());
201 }
202
203 @Test
204 void testFilterProperty() {
205 OffsetPageRequest r = new OffsetPageRequest();
206 r.setSort(Arrays.asList("the'field"));
207 assertEquals(Sort.by(Order.asc("the''field")), r.getSort());
208 }
209
210 @Test
211 void testParseDirection() {
212 OffsetPageRequest r = new OffsetPageRequest();
213 assertEquals(Optional.empty(), r.parseDirection(null));
214 assertEquals(Optional.of(Direction.ASC), r.parseDirection("asc"));
215 assertEquals(Optional.of(Direction.DESC), r.parseDirection("desc"));
216 assertEquals(Optional.empty(), r.parseDirection("unknown"));
217 }
218
219 @Test
220 void testParseSort() {
221 OffsetPageRequest r = new OffsetPageRequest();
222
223 r.setSort(Arrays.asList((String) null));
224 assertEquals(Sort.unsorted(), r.getSort());
225
226 r.setSort(Arrays.asList(""));
227 assertEquals(Sort.unsorted(), r.getSort());
228
229 r.setSort(Arrays.asList(","));
230 assertEquals(Sort.unsorted(), r.getSort());
231
232 r.setSort(Arrays.asList(", "));
233 assertEquals(Sort.unsorted(), r.getSort());
234
235 r.setSort(Arrays.asList(" ,"));
236 assertEquals(Sort.unsorted(), r.getSort());
237
238 r.setSort(Arrays.asList(" , "));
239 assertEquals(Sort.unsorted(), r.getSort());
240
241 r.setSort(Arrays.asList("field1"));
242 assertEquals(Sort.by(Order.asc("field1")), r.getSort());
243
244 r.setSort(Arrays.asList("field1,"));
245 assertEquals(Sort.by(Order.asc("field1")), r.getSort());
246
247 r.setSort(Arrays.asList("field1, "));
248 assertEquals(Sort.by(Order.asc("field1")), r.getSort());
249
250 r.setSort(Arrays.asList("field1,desc"));
251 assertEquals(Sort.by(Order.desc("field1")), r.getSort());
252
253 r.setSort(Arrays.asList("field1,field2"));
254 assertEquals(Sort.by(Order.asc("field1"), Order.asc("field2")), r.getSort());
255
256 r.setSort(Arrays.asList("field1,field2,desc"));
257 assertEquals(Sort.by(Order.desc("field1"), Order.desc("field2")), r.getSort());
258
259 r.setSort(Arrays.asList("asc"));
260 assertEquals(Sort.unsorted(), r.getSort());
261
262 r.setSort(Arrays.asList("desc"));
263 assertEquals(Sort.unsorted(), r.getSort());
264
265 r.setSort(Arrays.asList("asc,desc"));
266 assertEquals(Sort.by(Order.desc("asc")), r.getSort());
267 }
268
269 @Test
270 void testHashCode() {
271 OffsetPageRequest p = new OffsetPageRequest();
272 assertEquals(p.hashCode(), OffsetPageRequest.of().hashCode());
273 }
274
275 @Test
276 void testEquals() {
277 OffsetPageRequest p = new OffsetPageRequest();
278 assertTrue(() -> p.equals(p));
279 assertFalse(() -> p.equals(null));
280 assertFalse(() -> p.equals(new Object()));
281 assertFalse(() -> p.equals(new OffsetPageRequest(11, 0)));
282 assertFalse(() -> p.equals(new OffsetPageRequest(10, 1)));
283 assertFalse(() -> p.equals(new OffsetPageRequest().defaultSort(Direction.DESC, "f1")));
284 assertTrue(() -> p.equals(new OffsetPageRequest()));
285 }
286
287 @Test
288 void testToString() {
289 OffsetPageRequest p = new OffsetPageRequest();
290 assertEquals("Page request [number: 0, size 10, sort: UNSORTED]", p.toString());
291 }
292
293 }