Skip to content

Commit 395514d

Browse files
committed
PagingParameter test and fixes
1 parent d11de0d commit 395514d

File tree

2 files changed

+213
-3
lines changed

2 files changed

+213
-3
lines changed

sculptor-framework/sculptor-framework-main/src/main/java/org/sculptor/framework/domain/PagingParameter.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ public static PagingParameter pageAccess(int pageSize, int page, boolean countTo
5454
if (page < 1) {
5555
throw new IllegalArgumentException("Page numbers are 1 based");
5656
}
57+
if (additionalResultPages < 0) {
58+
throw new IllegalArgumentException("additionalResultPages min values is 0 (actual " + additionalResultPages + ")");
59+
}
5760
int startRow = (page - 1) * pageSize;
5861
// To ensure N additional pages we need only (N - 1) * pageSize + 1 rows
5962
int additionalRows=additionalResultPages > 0 ? (additionalResultPages - 1) * pageSize + 1 : UNKNOWN;
@@ -80,6 +83,10 @@ public static PagingParameter firstRow() {
8083
return new PagingParameter(0, 1, false, 0, UNKNOWN);
8184
}
8285

86+
public static PagingParameter firstRows(int numberOfRows) {
87+
return new PagingParameter(0, numberOfRows, false, 0, UNKNOWN);
88+
}
89+
8390
public static PagingParameter noLimits() {
8491
return new PagingParameter();
8592
}
@@ -122,7 +129,7 @@ public int getPage() {
122129
}
123130

124131
/**
125-
* Number of results (rows) per page, i.e. same as {@link #getMaxResults}.
132+
* Number of results (rows) per page
126133
*/
127134
public int getPageSize() {
128135
return pageSize;
@@ -173,8 +180,8 @@ public static PagingParameter getLastPage(PagedResult<?> result) {
173180
if (result.getTotalPages() == UNKNOWN) {
174181
throw new IllegalArgumentException("Unknown total pages - PagingParameter need countTotalPages=true");
175182
}
176-
int startRow=result.getTotalPages() * result.getPageSize();
177-
int endRow=result.getTotalPages() * result.getPageSize();
183+
int startRow=result.getTotalPages() * result.getPageSize() - result.getPageSize();
184+
int endRow=result.getTotalRows();
178185
return new PagingParameter(startRow, endRow, false, 0, result.getPageSize());
179186
}
180187

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
package org.sculptor.framework.domain;
2+
3+
import org.junit.jupiter.api.Assertions;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.util.ArrayList;
7+
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
10+
public class PagingParameterTest {
11+
12+
@Test
13+
void testRowAccess() {
14+
PagingParameter rowAccess = PagingParameter.rowAccess(12, 19);
15+
assertEquals(12, rowAccess.getStartRow());
16+
assertEquals(19, rowAccess.getEndRow());
17+
assertEquals(7, rowAccess.getRowCount());
18+
assertEquals(7, rowAccess.getRealFetchCount());
19+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getPage());
20+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getPageSize());
21+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getAdditionalResultPages());
22+
23+
rowAccess = PagingParameter.rowAccess(34, 88, true);
24+
assertEquals(34, rowAccess.getStartRow());
25+
assertEquals(88, rowAccess.getEndRow());
26+
assertEquals(54, rowAccess.getRowCount());
27+
assertEquals(54, rowAccess.getRealFetchCount());
28+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getPage());
29+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getPageSize());
30+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getAdditionalResultPages());
31+
32+
rowAccess = PagingParameter.rowAccess(23, 33, true, 8);
33+
assertEquals(23, rowAccess.getStartRow());
34+
assertEquals(33, rowAccess.getEndRow());
35+
assertEquals(10, rowAccess.getRowCount());
36+
assertEquals(18, rowAccess.getRealFetchCount());
37+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getPage());
38+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getPageSize());
39+
assertEquals(PagingParameter.UNKNOWN, rowAccess.getAdditionalResultPages());
40+
}
41+
42+
@Test
43+
void testPageAccess() {
44+
PagingParameter pageAccess = PagingParameter.pageAccess(9);
45+
assertEquals(0, pageAccess.getStartRow());
46+
assertEquals(9, pageAccess.getEndRow());
47+
assertEquals(9, pageAccess.getRowCount());
48+
assertEquals(9, pageAccess.getRealFetchCount());
49+
assertEquals(0, pageAccess.getPage());
50+
assertEquals(9, pageAccess.getPageSize());
51+
assertEquals(PagingParameter.UNKNOWN, pageAccess.getAdditionalResultPages());
52+
53+
pageAccess = PagingParameter.pageAccess(6, 3);
54+
assertEquals(12, pageAccess.getStartRow());
55+
assertEquals(18, pageAccess.getEndRow());
56+
assertEquals(6, pageAccess.getRowCount());
57+
assertEquals(6, pageAccess.getRealFetchCount());
58+
assertEquals(2, pageAccess.getPage());
59+
assertEquals(6, pageAccess.getPageSize());
60+
assertEquals(PagingParameter.UNKNOWN, pageAccess.getAdditionalResultPages());
61+
62+
pageAccess = PagingParameter.pageAccess(7, 9, 2);
63+
assertEquals(56, pageAccess.getStartRow());
64+
assertEquals(63, pageAccess.getEndRow());
65+
assertEquals(7, pageAccess.getRowCount());
66+
assertEquals(15, pageAccess.getRealFetchCount());
67+
assertEquals(8, pageAccess.getPage());
68+
assertEquals(7, pageAccess.getPageSize());
69+
assertEquals(2, pageAccess.getAdditionalResultPages());
70+
71+
pageAccess = PagingParameter.pageAccess(12, 4, true);
72+
assertEquals(36, pageAccess.getStartRow());
73+
assertEquals(48, pageAccess.getEndRow());
74+
assertEquals(12, pageAccess.getRowCount());
75+
assertEquals(12, pageAccess.getRealFetchCount());
76+
assertEquals(3, pageAccess.getPage());
77+
assertEquals(12, pageAccess.getPageSize());
78+
assertEquals(PagingParameter.UNKNOWN, pageAccess.getAdditionalResultPages());
79+
80+
pageAccess = PagingParameter.pageAccess(15, 2, true, 3);
81+
assertEquals(15, pageAccess.getStartRow());
82+
assertEquals(30, pageAccess.getEndRow());
83+
assertEquals(15, pageAccess.getRowCount());
84+
assertEquals(46, pageAccess.getRealFetchCount());
85+
assertEquals(1, pageAccess.getPage());
86+
assertEquals(15, pageAccess.getPageSize());
87+
assertEquals(3, pageAccess.getAdditionalResultPages());
88+
}
89+
90+
@Test
91+
void testFirstAccess() {
92+
PagingParameter firstRows = PagingParameter.firstRow();
93+
assertEquals(0, firstRows.getStartRow());
94+
assertEquals(1, firstRows.getEndRow());
95+
assertEquals(1, firstRows.getRowCount());
96+
assertEquals(1, firstRows.getRealFetchCount());
97+
assertEquals(PagingParameter.UNKNOWN, firstRows.getPage());
98+
assertEquals(PagingParameter.UNKNOWN, firstRows.getPageSize());
99+
assertEquals(PagingParameter.UNKNOWN, firstRows.getAdditionalResultPages());
100+
101+
firstRows = PagingParameter.firstRows(8);
102+
assertEquals(0, firstRows.getStartRow());
103+
assertEquals(8, firstRows.getEndRow());
104+
assertEquals(8, firstRows.getRowCount());
105+
assertEquals(8, firstRows.getRealFetchCount());
106+
assertEquals(PagingParameter.UNKNOWN, firstRows.getPage());
107+
assertEquals(PagingParameter.UNKNOWN, firstRows.getPageSize());
108+
assertEquals(PagingParameter.UNKNOWN, firstRows.getAdditionalResultPages());
109+
}
110+
111+
@Test
112+
void testNoLimits() {
113+
PagingParameter noLimits = PagingParameter.noLimits();
114+
assertEquals(PagingParameter.UNKNOWN, noLimits.getStartRow());
115+
assertEquals(-2, noLimits.getEndRow());
116+
assertEquals(PagingParameter.UNKNOWN, noLimits.getRowCount());
117+
assertEquals(PagingParameter.UNKNOWN, noLimits.getRealFetchCount());
118+
assertEquals(PagingParameter.UNKNOWN, noLimits.getPage());
119+
assertEquals(PagingParameter.UNKNOWN, noLimits.getPageSize());
120+
assertEquals(PagingParameter.UNKNOWN, noLimits.getAdditionalResultPages());
121+
}
122+
123+
@Test
124+
void testInternalLimits() {
125+
Assertions.assertThrows(IllegalArgumentException.class, () -> {
126+
PagingParameter.pageAccess(0);
127+
});
128+
129+
Assertions.assertThrows(IllegalArgumentException.class, () -> {
130+
PagingParameter.pageAccess(-1);
131+
});
132+
133+
Assertions.assertThrows(IllegalArgumentException.class, () -> {
134+
PagingParameter.pageAccess(4, 0);
135+
});
136+
137+
Assertions.assertThrows(IllegalArgumentException.class, () -> {
138+
PagingParameter.pageAccess(0, 3);
139+
});
140+
141+
Assertions.assertThrows(IllegalArgumentException.class, () -> {
142+
PagingParameter.pageAccess(5, 8, -1);
143+
});
144+
}
145+
146+
@Test
147+
void testPagedResult() {
148+
final PagedResult noPageResult = new PagedResult(new ArrayList(), 9, 12, PagingParameter.UNKNOWN);
149+
Assertions.assertThrows(IllegalArgumentException.class, () -> {
150+
PagingParameter.getPage(noPageResult, 3);
151+
});
152+
153+
PagedResult pagedResult = new PagedResult(new ArrayList(), 9, 12, 4);
154+
PagingParameter page = PagingParameter.getPage(pagedResult, 7);
155+
assertEquals(24, page.getStartRow());
156+
assertEquals(28, page.getEndRow());
157+
assertEquals(4, page.getRowCount());
158+
assertEquals(4, page.getRealFetchCount());
159+
assertEquals(6, page.getPage());
160+
assertEquals(4, page.getPageSize());
161+
assertEquals(PagingParameter.UNKNOWN, page.getAdditionalResultPages());
162+
163+
pagedResult = new PagedResult(new ArrayList(), 16, 14, 12);
164+
page = PagingParameter.getPreviousPage(pagedResult);
165+
assertEquals(4, page.getStartRow());
166+
assertEquals(16, page.getEndRow());
167+
assertEquals(12, page.getRowCount());
168+
assertEquals(12, page.getRealFetchCount());
169+
assertEquals(0, page.getPage());
170+
assertEquals(12, page.getPageSize());
171+
assertEquals(PagingParameter.UNKNOWN, page.getAdditionalResultPages());
172+
173+
pagedResult = new PagedResult(new ArrayList(), 23, 11, 9);
174+
page = PagingParameter.getNextPage(pagedResult);
175+
assertEquals(32, page.getStartRow());
176+
assertEquals(41, page.getEndRow());
177+
assertEquals(9, page.getRowCount());
178+
assertEquals(9, page.getRealFetchCount());
179+
assertEquals(3, page.getPage());
180+
assertEquals(9, page.getPageSize());
181+
assertEquals(PagingParameter.UNKNOWN, page.getAdditionalResultPages());
182+
183+
pagedResult = new PagedResult(new ArrayList(), 22, 3, 7);
184+
page = PagingParameter.getFirstPage(pagedResult);
185+
assertEquals(0, page.getStartRow());
186+
assertEquals(7, page.getEndRow());
187+
assertEquals(7, page.getRowCount());
188+
assertEquals(7, page.getRealFetchCount());
189+
assertEquals(0, page.getPage());
190+
assertEquals(7, page.getPageSize());
191+
assertEquals(PagingParameter.UNKNOWN, page.getAdditionalResultPages());
192+
193+
pagedResult = new PagedResult(new ArrayList(), 44, 12, 11, 137, 3);
194+
page = PagingParameter.getLastPage(pagedResult);
195+
assertEquals(132, page.getStartRow());
196+
assertEquals(137, page.getEndRow());
197+
assertEquals(5, page.getRowCount());
198+
assertEquals(5, page.getRealFetchCount());
199+
assertEquals(12, page.getPage());
200+
assertEquals(11, page.getPageSize());
201+
assertEquals(PagingParameter.UNKNOWN, page.getAdditionalResultPages());
202+
}
203+
}

0 commit comments

Comments
 (0)