@@ -10,17 +10,61 @@ import scala.jdk.CollectionConverters._
10
10
11
11
class PrefetchingResultSetIteratorSpec extends FlatSpec with Matchers with MockitoSugar {
12
12
13
- " PrefetchingResultSetIterator" should " handle empty pages that are not the last with AsyncResultSet " in {
13
+ " PrefetchingResultSetIterator" should " handle empty pages that are not the last" in {
14
14
val row1 = mock[Row ]
15
15
val row2 = mock[Row ]
16
16
val row3 = mock[Row ]
17
17
18
18
val asyncResultSet1 = mock[AsyncResultSet ]
19
19
val asyncResultSet2 = mock[AsyncResultSet ]
20
20
val asyncResultSet3 = mock[AsyncResultSet ]
21
+ val asyncResultSet4 = mock[AsyncResultSet ]
22
+ val asyncResultSet5 = mock[AsyncResultSet ]
21
23
22
- // First page has data
23
- when(asyncResultSet1.currentPage()).thenReturn(Seq (row1).asJava)
24
+ // First page is empty
25
+ when(asyncResultSet1.currentPage()).thenReturn(Seq .empty[Row ].asJava)
26
+ when(asyncResultSet1.hasMorePages()).thenReturn(true )
27
+ when(asyncResultSet1.fetchNextPage()).thenReturn(CompletableFuture .completedFuture(asyncResultSet2))
28
+
29
+ // Second page has data
30
+ when(asyncResultSet2.currentPage()).thenReturn(Seq (row1).asJava)
31
+ when(asyncResultSet2.hasMorePages()).thenReturn(true )
32
+ when(asyncResultSet2.fetchNextPage()).thenReturn(CompletableFuture .completedFuture(asyncResultSet3))
33
+
34
+ // Third page is empty
35
+ when(asyncResultSet3.currentPage()).thenReturn(Seq .empty[Row ].asJava)
36
+ when(asyncResultSet3.hasMorePages()).thenReturn(true )
37
+ when(asyncResultSet3.fetchNextPage()).thenReturn(CompletableFuture .completedFuture(asyncResultSet4))
38
+
39
+ // Fourth page has data
40
+ when(asyncResultSet4.currentPage()).thenReturn(Seq (row2, row3).asJava)
41
+ when(asyncResultSet4.hasMorePages()).thenReturn(true )
42
+ when(asyncResultSet4.fetchNextPage()).thenReturn(CompletableFuture .completedFuture(asyncResultSet5))
43
+
44
+ // Last page is empty
45
+ when(asyncResultSet5.currentPage()).thenReturn(Seq .empty[Row ].asJava)
46
+ when(asyncResultSet5.hasMorePages()).thenReturn(false )
47
+
48
+ val iterator = new PrefetchingResultSetIterator (asyncResultSet1)
49
+
50
+ val rows = iterator.toList
51
+
52
+ rows should contain theSameElementsInOrderAs Seq (row1, row2, row3)
53
+
54
+ verify(asyncResultSet1).fetchNextPage()
55
+ verify(asyncResultSet2).fetchNextPage()
56
+ verify(asyncResultSet3).fetchNextPage()
57
+ verify(asyncResultSet4).fetchNextPage()
58
+ verify(asyncResultSet5, never()).fetchNextPage()
59
+ }
60
+
61
+ it should " handle a result made of empty pages only" in {
62
+ val asyncResultSet1 = mock[AsyncResultSet ]
63
+ val asyncResultSet2 = mock[AsyncResultSet ]
64
+ val asyncResultSet3 = mock[AsyncResultSet ]
65
+
66
+ // First page is empty
67
+ when(asyncResultSet1.currentPage()).thenReturn(Seq .empty[Row ].asJava)
24
68
when(asyncResultSet1.hasMorePages()).thenReturn(true )
25
69
when(asyncResultSet1.fetchNextPage()).thenReturn(CompletableFuture .completedFuture(asyncResultSet2))
26
70
@@ -29,15 +73,15 @@ class PrefetchingResultSetIteratorSpec extends FlatSpec with Matchers with Mocki
29
73
when(asyncResultSet2.hasMorePages()).thenReturn(true )
30
74
when(asyncResultSet2.fetchNextPage()).thenReturn(CompletableFuture .completedFuture(asyncResultSet3))
31
75
32
- // Third page has data
33
- when(asyncResultSet3.currentPage()).thenReturn(Seq (row2, row3) .asJava)
76
+ // Last page is empty
77
+ when(asyncResultSet3.currentPage()).thenReturn(Seq .empty[ Row ] .asJava)
34
78
when(asyncResultSet3.hasMorePages()).thenReturn(false )
35
79
36
80
val iterator = new PrefetchingResultSetIterator (asyncResultSet1)
37
81
38
82
val rows = iterator.toList
39
83
40
- rows should contain theSameElementsInOrderAs Seq (row1, row2, row3)
84
+ rows should contain theSameElementsInOrderAs Seq .empty[ Row ]
41
85
42
86
verify(asyncResultSet1).fetchNextPage()
43
87
verify(asyncResultSet2).fetchNextPage()
0 commit comments