Skip to content

Commit 0dd06bd

Browse files
committed
[#1706] Test org.hibernate.query.Page with filters
1 parent 556df4b commit 0dd06bd

File tree

1 file changed

+199
-1
lines changed

1 file changed

+199
-1
lines changed

hibernate-reactive-core/src/test/java/org/hibernate/reactive/FilterWithPaginationTest.java

Lines changed: 199 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@
3131

3232
import static java.util.concurrent.TimeUnit.MINUTES;
3333
import static org.assertj.core.api.Assertions.assertThat;
34+
import static org.hibernate.query.Page.first;
35+
import static org.hibernate.query.Page.page;
3436

3537
/**
36-
* Test the combination of filters, max results and first result.
38+
* Test the combination of filters, max results, first result, and {@link org.hibernate.query.Page}.
3739
*/
3840
@Timeout(value = 10, timeUnit = MINUTES)
3941

@@ -77,6 +79,23 @@ public void testMaxResultsAndOffsetWithStageWithBasicQuery(VertxTestContext cont
7779
);
7880
}
7981

82+
/**
83+
* Sql server run different queries based if order-by is missing and there are no filters
84+
*/
85+
@Test
86+
public void testMaxResultsAndOffsetWithStageWithBasicQueryAndPage(VertxTestContext context) {
87+
test( context, openSession()
88+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_BASIC_QUERY )
89+
.setPage( page( 2, 0 ) )
90+
.getResultList() )
91+
// I cannot use the order-by, so I'm not sure which result it will return
92+
.thenAccept( list -> {
93+
assertThat( list ).containsAnyOf( margaret, nellie, hedy, rebeccaActress, rebeccaSinger );
94+
assertThat( list ).hasSize( 2 );
95+
} )
96+
);
97+
}
98+
8099
@Test
81100
public void testOffsetWithStageWithBasicQuery(VertxTestContext context) {
82101
test( context, openSession()
@@ -91,6 +110,20 @@ public void testOffsetWithStageWithBasicQuery(VertxTestContext context) {
91110
);
92111
}
93112

113+
@Test
114+
public void testWithStageWithBasicQueryAndPage(VertxTestContext context) {
115+
test( context, openSession()
116+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_BASIC_QUERY )
117+
.setPage( first( 3 ) )
118+
.getResultList() )
119+
// I cannot use the order-by, so I'm not sure which results it will return
120+
.thenAccept( list -> {
121+
assertThat( list ).containsAnyOf( margaret, nellie, hedy, rebeccaActress, rebeccaSinger );
122+
assertThat( list ).hasSize( 3 );
123+
} )
124+
);
125+
}
126+
94127
@Test
95128
public void testMaxResultsWithStageWithBasicQuery(VertxTestContext context) {
96129
test( context, openSession()
@@ -105,6 +138,20 @@ public void testMaxResultsWithStageWithBasicQuery(VertxTestContext context) {
105138
);
106139
}
107140

141+
@Test
142+
public void testMaxResultsWithStageWithBasicQueryAndPage(VertxTestContext context) {
143+
test( context, openSession()
144+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_BASIC_QUERY )
145+
.setPage( first( 4 ) )
146+
.getResultList() )
147+
// I cannot use the order-by, so I'm not sure which result it will return
148+
.thenAccept( list -> {
149+
assertThat( list ).containsAnyOf( margaret, nellie, hedy, rebeccaActress, rebeccaSinger );
150+
assertThat( list ).hasSize( 4 );
151+
} )
152+
);
153+
}
154+
108155
@Test
109156
public void testMaxResultsWithStage(VertxTestContext context) {
110157
test( context, enableFilter( openSession(), FamousPerson.IS_ALIVE_FILTER )
@@ -115,6 +162,16 @@ public void testMaxResultsWithStage(VertxTestContext context) {
115162
);
116163
}
117164

165+
@Test
166+
public void testMaxResultsWithStageAndPage(VertxTestContext context) {
167+
test( context, enableFilter( openSession(), FamousPerson.IS_ALIVE_FILTER )
168+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
169+
.setPage( first( 2 ) )
170+
.getResultList() )
171+
.thenAccept( list -> assertThat( list ).containsExactly( margaret, rebeccaActress ) )
172+
);
173+
}
174+
118175
@Test
119176
public void testMaxResultsWithMutiny(VertxTestContext context) {
120177
test( context, enableFilter( openMutinySession(), FamousPerson.IS_ALIVE_FILTER )
@@ -125,6 +182,16 @@ public void testMaxResultsWithMutiny(VertxTestContext context) {
125182
);
126183
}
127184

185+
@Test
186+
public void testMaxResultsWithMutinyAndPage(VertxTestContext context) {
187+
test( context, enableFilter( openMutinySession(), FamousPerson.IS_ALIVE_FILTER )
188+
.chain( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
189+
.setPage( first( 2 ) )
190+
.getResultList() )
191+
.invoke( list -> assertThat( list ).containsExactly( margaret, rebeccaActress ) )
192+
);
193+
}
194+
128195
@Test
129196
public void testFirstResultWithStage(VertxTestContext context) {
130197
test( context, enableFilter( openSession(), FamousPerson.IS_ALIVE_FILTER )
@@ -135,6 +202,16 @@ public void testFirstResultWithStage(VertxTestContext context) {
135202
);
136203
}
137204

205+
@Test
206+
public void testFirstResultWithStageAndPage(VertxTestContext context) {
207+
test( context, enableFilter( openSession(), FamousPerson.IS_ALIVE_FILTER )
208+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
209+
.setPage( page( 2, 1 ) )
210+
.getResultList() )
211+
.thenAccept( list -> assertThat( list ).containsExactly( rebeccaSinger ) )
212+
);
213+
}
214+
138215
@Test
139216
public void testFirstResultWithMutiny(VertxTestContext context) {
140217
test( context, enableFilter( openMutinySession(), FamousPerson.IS_ALIVE_FILTER )
@@ -145,6 +222,16 @@ public void testFirstResultWithMutiny(VertxTestContext context) {
145222
);
146223
}
147224

225+
@Test
226+
public void testFirstResultWithMutinyAndPage(VertxTestContext context) {
227+
test( context, enableFilter( openMutinySession(), FamousPerson.IS_ALIVE_FILTER )
228+
.chain( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
229+
.setPage( page( 2, 1 ) )
230+
.getResultList() )
231+
.invoke( list -> assertThat( list ).containsExactly( rebeccaSinger ) )
232+
);
233+
}
234+
148235
@Test
149236
public void testMaxResultsAndOffsetWithStage(VertxTestContext context) {
150237
test( context, enableFilter( openSession(), FamousPerson.IS_ALIVE_FILTER )
@@ -156,6 +243,16 @@ public void testMaxResultsAndOffsetWithStage(VertxTestContext context) {
156243
);
157244
}
158245

246+
@Test
247+
public void testMaxResultsAndOffsetWithStageAndPage(VertxTestContext context) {
248+
test( context, enableFilter( openSession(), FamousPerson.IS_ALIVE_FILTER )
249+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
250+
.setPage( page( 2, 1 ) )
251+
.getResultList() )
252+
.thenAccept( list -> assertThat( list ).containsExactly( rebeccaSinger ) )
253+
);
254+
}
255+
159256
@Test
160257
public void testMaxResultsAndOffsetWithMutiny(VertxTestContext context) {
161258
test( context, enableFilter( openMutinySession(), FamousPerson.IS_ALIVE_FILTER )
@@ -167,6 +264,16 @@ public void testMaxResultsAndOffsetWithMutiny(VertxTestContext context) {
167264
);
168265
}
169266

267+
@Test
268+
public void testMaxResultsAndOffsetWithMutinyAndPage(VertxTestContext context) {
269+
test( context, enableFilter( openMutinySession(), FamousPerson.IS_ALIVE_FILTER )
270+
.chain( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
271+
.setPage( page( 2, 1 ) )
272+
.getResultList() )
273+
.invoke( list -> assertThat( list ).containsExactly( rebeccaSinger ) )
274+
);
275+
}
276+
170277
@Test
171278
public void testMaxResultsForParameterizedFilterWithStage(VertxTestContext context) {
172279
test( context, enableFilter( openSession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
@@ -177,6 +284,16 @@ public void testMaxResultsForParameterizedFilterWithStage(VertxTestContext conte
177284
);
178285
}
179286

287+
@Test
288+
public void testMaxResultsForParameterizedFilterWithStageAndPage(VertxTestContext context) {
289+
test( context, enableFilter( openSession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
290+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
291+
.setPage( first( 2 ) )
292+
.getResultList() )
293+
.thenAccept( list -> assertThat( list ).containsExactly( rebeccaActress, rebeccaSinger ) )
294+
);
295+
}
296+
180297
@Test
181298
public void testMaxResultsForParameterizedFilterWithMutiny(VertxTestContext context) {
182299
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
@@ -187,6 +304,16 @@ public void testMaxResultsForParameterizedFilterWithMutiny(VertxTestContext cont
187304
);
188305
}
189306

307+
@Test
308+
public void testMaxResultsForParameterizedFilterWithMutinyAndPage(VertxTestContext context) {
309+
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
310+
.chain( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
311+
.setPage( first( 2 ) )
312+
.getResultList() )
313+
.invoke( list -> assertThat( list ).containsExactly( rebeccaActress, rebeccaSinger ) )
314+
);
315+
}
316+
190317
@Test
191318
public void testSingleResultMaxResultsForParameterizedFilterWithStage(VertxTestContext context) {
192319
test( context, enableFilter( openSession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
@@ -197,6 +324,16 @@ public void testSingleResultMaxResultsForParameterizedFilterWithStage(VertxTestC
197324
);
198325
}
199326

327+
@Test
328+
public void testSingleResultMaxResultsForParameterizedFilterWithStageAndPage(VertxTestContext context) {
329+
test( context, enableFilter( openSession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
330+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
331+
.setPage( first( 1 ) )
332+
.getSingleResult() )
333+
.thenAccept( result -> assertThat( result ).isEqualTo( rebeccaActress ) )
334+
);
335+
}
336+
200337
@Test
201338
public void testSingleResultMaxResultsForParameterizedFilterWithMutiny(VertxTestContext context) {
202339
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
@@ -207,6 +344,16 @@ public void testSingleResultMaxResultsForParameterizedFilterWithMutiny(VertxTest
207344
);
208345
}
209346

347+
@Test
348+
public void testSingleResultMaxResultsForParameterizedFilterWithMutinyAndPage(VertxTestContext context) {
349+
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
350+
.chain( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
351+
.setPage( first( 1 ) )
352+
.getSingleResult() )
353+
.invoke( result -> assertThat( result ).isEqualTo( rebeccaActress ) )
354+
);
355+
}
356+
210357
@Test
211358
public void testFirstResultForParameterizedFilterWithStage(VertxTestContext context) {
212359
test( context, enableFilter( openSession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
@@ -217,6 +364,16 @@ public void testFirstResultForParameterizedFilterWithStage(VertxTestContext cont
217364
);
218365
}
219366

367+
@Test
368+
public void testFirstResultForParameterizedFilterWithStageAndPage(VertxTestContext context) {
369+
test( context, enableFilter( openSession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
370+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
371+
.setPage( page( 1, 1 ) )
372+
.getResultList()
373+
.thenAccept( list -> assertThat( list ).containsExactly( rebeccaSinger ) ) )
374+
);
375+
}
376+
220377
@Test
221378
public void testFirstResultForParameterizedFilterWithMutiny(VertxTestContext context) {
222379
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
@@ -227,6 +384,16 @@ public void testFirstResultForParameterizedFilterWithMutiny(VertxTestContext con
227384
);
228385
}
229386

387+
@Test
388+
public void testFirstResultForParameterizedFilterWithMutinyAndPage(VertxTestContext context) {
389+
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
390+
.chain( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
391+
.setPage( page( 1, 1 ) )
392+
.getResultList() )
393+
.invoke( list -> assertThat( list ).containsExactly( rebeccaSinger ) )
394+
);
395+
}
396+
230397
@Test
231398
public void testMaxResultsAndFirstResultForParameterizedFilterWithStage(VertxTestContext context) {
232399
test( context, enableFilter( openSession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
@@ -238,6 +405,16 @@ public void testMaxResultsAndFirstResultForParameterizedFilterWithStage(VertxTes
238405
);
239406
}
240407

408+
@Test
409+
public void testMaxResultsAndFirstResultForParameterizedFilterWithStageAndPage(VertxTestContext context) {
410+
test( context, enableFilter( openSession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
411+
.thenCompose( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
412+
.setPage( first( 2 ) )
413+
.getResultList() )
414+
.thenAccept( list -> assertThat( list ).containsExactly( rebeccaActress, rebeccaSinger ) )
415+
);
416+
}
417+
241418
@Test
242419
public void testMaxResultsAndFirstResultForParameterizedFilterWithMutiny(VertxTestContext context) {
243420
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
@@ -249,6 +426,27 @@ public void testMaxResultsAndFirstResultForParameterizedFilterWithMutiny(VertxTe
249426
);
250427
}
251428

429+
@Test
430+
public void testMaxResultsAndFirstResultForParameterizedFilterWithMutinyAndPage(VertxTestContext context) {
431+
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
432+
.chain( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
433+
.setPage( page( 1, 1 ) )
434+
.getResultList() )
435+
.invoke( list -> assertThat( list ).containsExactly( rebeccaSinger ) )
436+
);
437+
}
438+
439+
440+
@Test
441+
public void testMaxResultsAndFirstResultForParameterizedFilterWithMutinyAndPageFirst(VertxTestContext context) {
442+
test( context, enableFilter( openMutinySession(), FamousPerson.HAS_NAME_FILTER, "name", rebeccaActress.name )
443+
.chain( session -> session.createNamedQuery( FamousPerson.FIND_ALL_QUERY )
444+
.setPage( first( 2 ) )
445+
.getResultList() )
446+
.invoke( list -> assertThat( list ).containsExactly( rebeccaActress, rebeccaSinger ) )
447+
);
448+
}
449+
252450
private static CompletionStage<Stage.Session> enableFilter(
253451
CompletionStage<Stage.Session> stageSession,
254452
String filterName,

0 commit comments

Comments
 (0)