@@ -143,144 +143,65 @@ apiDescribe('Queries', (persistence: boolean) => {
143
143
// Since limitToLast() queries are sent to the backend with a modified
144
144
// orderBy() clause, they can map to the same target representation as
145
145
// limit() query, even if both queries appear separate to the user.
146
- it ( 'can listen to mirror queries' , ( ) => {
146
+ it ( 'can listen/unlisten/relisten to mirror queries' , ( ) => {
147
147
const testDocs = {
148
148
a : { k : 'a' , sort : 0 } ,
149
149
b : { k : 'b' , sort : 1 } ,
150
150
c : { k : 'c' , sort : 1 } ,
151
151
d : { k : 'd' , sort : 2 }
152
152
} ;
153
153
return withTestCollection ( persistence , testDocs , async collection => {
154
+ // Setup `limit` query
154
155
const storeLimitEvent = new EventsAccumulator < firestore . QuerySnapshot > ( ) ;
155
- collection
156
+ let limitUnlisten = collection
156
157
. orderBy ( 'sort' , 'asc' )
157
158
. limit ( 2 )
158
159
. onSnapshot ( storeLimitEvent . storeEvent ) ;
159
160
161
+ // Setup mirroring `limitToLast` query
160
162
const storeLimitToLastEvent = new EventsAccumulator <
161
163
firestore . QuerySnapshot
162
164
> ( ) ;
163
- collection
165
+ let limitToLastUnlisten = collection
164
166
. orderBy ( 'sort' , 'desc' )
165
167
. limitToLast ( 2 )
166
168
. onSnapshot ( storeLimitToLastEvent . storeEvent ) ;
167
169
170
+ // Verify both queries get expected results.
168
171
let snapshot = await storeLimitEvent . awaitEvent ( ) ;
169
172
expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
170
173
{ k : 'a' , sort : 0 } ,
171
174
{ k : 'b' , sort : 1 }
172
175
] ) ;
173
-
174
176
snapshot = await storeLimitToLastEvent . awaitEvent ( ) ;
175
177
expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
176
178
{ k : 'b' , sort : 1 } ,
177
179
{ k : 'a' , sort : 0 }
178
180
] ) ;
179
181
180
- await collection . add ( { k : 'e' , sort : - 1 } ) ;
181
- snapshot = await storeLimitEvent . awaitEvent ( ) ;
182
- expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
183
- { k : 'e' , sort : - 1 } ,
184
- { k : 'a' , sort : 0 }
185
- ] ) ;
186
-
187
- snapshot = await storeLimitToLastEvent . awaitEvent ( ) ;
188
- expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
189
- { k : 'a' , sort : 0 } ,
190
- { k : 'e' , sort : - 1 }
191
- ] ) ;
192
- } ) ;
193
- } ) ;
194
-
195
- it ( 'can unlisten from mirror queries' , ( ) => {
196
- const testDocs = {
197
- a : { k : 'a' , sort : 0 } ,
198
- b : { k : 'b' , sort : 1 } ,
199
- c : { k : 'c' , sort : 1 } ,
200
- d : { k : 'd' , sort : 2 }
201
- } ;
202
- return withTestCollection ( persistence , testDocs , async collection => {
203
- const storeLimitEvent = new EventsAccumulator < firestore . QuerySnapshot > ( ) ;
204
- const limitUnlisten = collection
205
- . orderBy ( 'sort' , 'asc' )
206
- . limit ( 2 )
207
- . onSnapshot ( storeLimitEvent . storeEvent ) ;
208
-
209
- const storeLimitToLastEvent = new EventsAccumulator <
210
- firestore . QuerySnapshot
211
- > ( ) ;
212
- const limitToLastUnlisten = collection
213
- . orderBy ( 'sort' , 'desc' )
214
- . limitToLast ( 2 )
215
- . onSnapshot ( storeLimitToLastEvent . storeEvent ) ;
216
-
217
- await storeLimitEvent . awaitEvent ( ) ;
218
- await storeLimitToLastEvent . awaitEvent ( ) ;
219
-
220
- limitUnlisten ( ) ;
221
-
222
- await collection . add ( { k : 'e' , sort : - 1 } ) ;
223
- await storeLimitEvent . assertNoAdditionalEvents ( ) ;
224
- const snapshot = await storeLimitToLastEvent . awaitEvent ( ) ;
225
- // Check the limitToLast query still functions after the mirroring
226
- // limit query is un-listened.
227
- expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
228
- { k : 'a' , sort : 0 } ,
229
- { k : 'e' , sort : - 1 }
230
- ] ) ;
231
-
232
- limitToLastUnlisten ( ) ;
233
-
234
- await collection . add ( { k : 'f' , sort : - 1 } ) ;
235
- await storeLimitToLastEvent . assertNoAdditionalEvents ( ) ;
236
- } ) ;
237
- } ) ;
238
-
239
- it ( 'can relisten to mirror queries' , ( ) => {
240
- const testDocs = {
241
- a : { k : 'a' , sort : 0 } ,
242
- b : { k : 'b' , sort : 1 } ,
243
- c : { k : 'c' , sort : 1 } ,
244
- d : { k : 'd' , sort : 2 }
245
- } ;
246
- return withTestCollection ( persistence , testDocs , async collection => {
247
- const storeLimitEvent = new EventsAccumulator < firestore . QuerySnapshot > ( ) ;
248
- let limitUnlisten = collection
249
- . orderBy ( 'sort' , 'asc' )
250
- . limit ( 2 )
251
- . onSnapshot ( storeLimitEvent . storeEvent ) ;
252
-
253
- const storeLimitToLastEvent = new EventsAccumulator <
254
- firestore . QuerySnapshot
255
- > ( ) ;
256
- let limitToLastUnlisten = collection
257
- . orderBy ( 'sort' , 'desc' )
258
- . limitToLast ( 2 )
259
- . onSnapshot ( storeLimitToLastEvent . storeEvent ) ;
260
-
261
- await storeLimitEvent . awaitEvent ( ) ;
262
- await storeLimitToLastEvent . awaitEvent ( ) ;
263
-
264
182
// Unlisten then relisten limit query.
265
183
limitUnlisten ( ) ;
266
184
limitUnlisten = collection
267
185
. orderBy ( 'sort' , 'asc' )
268
186
. limit ( 2 )
269
187
. onSnapshot ( storeLimitEvent . storeEvent ) ;
270
- let snapshot = await storeLimitEvent . awaitEvent ( ) ;
188
+
189
+ // Verify `limit` query still works.
190
+ snapshot = await storeLimitEvent . awaitEvent ( ) ;
271
191
expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
272
192
{ k : 'a' , sort : 0 } ,
273
193
{ k : 'b' , sort : 1 }
274
194
] ) ;
275
195
196
+ // Add a document that would change the result set.
276
197
await collection . add ( { k : 'e' , sort : - 1 } ) ;
277
- // Verify limit query results.
198
+
199
+ // Verify both queries get expected results.
278
200
snapshot = await storeLimitEvent . awaitEvent ( ) ;
279
201
expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
280
202
{ k : 'e' , sort : - 1 } ,
281
203
{ k : 'a' , sort : 0 }
282
204
] ) ;
283
- // Verify limitToLast query results.
284
205
snapshot = await storeLimitToLastEvent . awaitEvent ( ) ;
285
206
expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
286
207
{ k : 'a' , sort : 0 } ,
@@ -295,14 +216,12 @@ apiDescribe('Queries', (persistence: boolean) => {
295
216
. limitToLast ( 2 )
296
217
. onSnapshot ( storeLimitToLastEvent . storeEvent ) ;
297
218
219
+ // Verify both queries get expected results.
298
220
snapshot = await storeLimitEvent . awaitEvent ( ) ;
299
- // Checking limit query is still functioning when the mirroring
300
- // limitToLast query is un-listened.
301
221
expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
302
222
{ k : 'a' , sort : - 2 } ,
303
223
{ k : 'e' , sort : - 1 }
304
224
] ) ;
305
-
306
225
snapshot = await storeLimitToLastEvent . awaitEvent ( ) ;
307
226
expect ( toDataArray ( snapshot ) ) . to . deep . equal ( [
308
227
{ k : 'e' , sort : - 1 } ,
0 commit comments