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 }