View Javadoc
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 }