@@ -2,7 +2,6 @@ package query_test
2
2
3
3
import (
4
4
"fmt"
5
-
6
5
"github.com/cosmos/cosmos-sdk/codec"
7
6
"github.com/cosmos/cosmos-sdk/store/prefix"
8
7
sdk "github.com/cosmos/cosmos-sdk/types"
@@ -87,6 +86,87 @@ func (s *paginationTestSuite) TestFilteredPaginations() {
87
86
s .Require ().LessOrEqual (len (balances ), 2 )
88
87
}
89
88
89
+ func (s * paginationTestSuite ) TestReverseFilteredPaginations () {
90
+ app , ctx , appCodec := setupTest ()
91
+
92
+ var balances sdk.Coins
93
+ for i := 0 ; i < numBalances ; i ++ {
94
+ denom := fmt .Sprintf ("foo%ddenom" , i )
95
+ balances = append (balances , sdk .NewInt64Coin (denom , 100 ))
96
+ }
97
+
98
+ for i := 0 ; i < 10 ; i ++ {
99
+ denom := fmt .Sprintf ("test%ddenom" , i )
100
+ balances = append (balances , sdk .NewInt64Coin (denom , 250 ))
101
+ }
102
+
103
+ balances = balances .Sort ()
104
+ addr1 := sdk .AccAddress ([]byte ("addr1" ))
105
+ acc1 := app .AccountKeeper .NewAccountWithAddress (ctx , addr1 )
106
+ app .AccountKeeper .SetAccount (ctx , acc1 )
107
+ s .Require ().NoError (app .BankKeeper .SetBalances (ctx , addr1 , balances ))
108
+ store := ctx .KVStore (app .GetKey (authtypes .StoreKey ))
109
+
110
+ // verify pagination with limit > total values
111
+ pageReq := & query.PageRequest {Key : nil , Limit : 5 , CountTotal : true , Reverse : true }
112
+ balns , res , err := execFilterPaginate (store , pageReq , appCodec )
113
+ s .Require ().NoError (err )
114
+ s .Require ().NotNil (res )
115
+ s .Require ().Equal (5 , len (balns ))
116
+
117
+ s .T ().Log ("verify empty request" )
118
+ balns , res , err = execFilterPaginate (store , nil , appCodec )
119
+ s .Require ().NoError (err )
120
+ s .Require ().NotNil (res )
121
+ s .Require ().Equal (10 , len (balns ))
122
+ s .Require ().Equal (uint64 (10 ), res .Total )
123
+ s .Require ().Nil (res .NextKey )
124
+
125
+ s .T ().Log ("verify default limit" )
126
+ pageReq = & query.PageRequest {Reverse : true }
127
+ balns , res , err = execFilterPaginate (store , pageReq , appCodec )
128
+ s .Require ().NoError (err )
129
+ s .Require ().NotNil (res )
130
+ s .Require ().Equal (10 , len (balns ))
131
+ s .Require ().Equal (uint64 (10 ), res .Total )
132
+
133
+ s .T ().Log ("verify nextKey is returned if there are more results" )
134
+ pageReq = & query.PageRequest {Limit : 2 , CountTotal : true , Reverse : true }
135
+ balns , res , err = execFilterPaginate (store , pageReq , appCodec )
136
+ s .Require ().NoError (err )
137
+ s .Require ().NotNil (res )
138
+ s .Require ().Equal (2 , len (balns ))
139
+ s .Require ().NotNil (res .NextKey )
140
+ s .Require ().Equal (string (res .NextKey ), fmt .Sprintf ("test7denom" ))
141
+ s .Require ().Equal (uint64 (10 ), res .Total )
142
+
143
+ s .T ().Log ("verify both key and offset can't be given" )
144
+ pageReq = & query.PageRequest {Key : res .NextKey , Limit : 1 , Offset : 2 , Reverse : true }
145
+ _ , _ , err = execFilterPaginate (store , pageReq , appCodec )
146
+ s .Require ().Error (err )
147
+
148
+ s .T ().Log ("use nextKey for query and reverse true" )
149
+ pageReq = & query.PageRequest {Key : res .NextKey , Limit : 2 , Reverse : true }
150
+ balns , res , err = execFilterPaginate (store , pageReq , appCodec )
151
+ s .Require ().NoError (err )
152
+ s .Require ().NotNil (res )
153
+ s .Require ().Equal (2 , len (balns ))
154
+ s .Require ().NotNil (res .NextKey )
155
+ s .Require ().Equal (string (res .NextKey ), fmt .Sprintf ("test5denom" ))
156
+
157
+ s .T ().Log ("verify last page records, nextKey for query and reverse true" )
158
+ pageReq = & query.PageRequest {Key : res .NextKey , Reverse : true }
159
+ balns , res , err = execFilterPaginate (store , pageReq , appCodec )
160
+ s .Require ().NoError (err )
161
+ s .Require ().NotNil (res )
162
+ s .Require ().Equal (6 , len (balns ))
163
+ s .Require ().Nil (res .NextKey )
164
+
165
+ s .T ().Log ("verify Reverse pagination returns valid result" )
166
+ s .Require ().Equal (balances [235 :241 ].String (), balns .Sort ().String ())
167
+
168
+ }
169
+
90
170
func ExampleFilteredPaginate () {
91
171
app , ctx , appCodec := setupTest ()
92
172
0 commit comments