@@ -122,9 +122,16 @@ - (NSString *)toHashedId:(NSString *)docId {
122
122
// Asserts that the result of running the query while online (against the backend/emulator) is
123
123
// the same as running it while offline. The expected document Ids are hashed to match the
124
124
// actual document IDs created by the test helper.
125
- - (void )assertOnlineAndOfflineResultsMatch : (FIRQuery *)query
125
+ - (void )assertOnlineAndOfflineResultsMatch : (FIRCollectionReference *)collection
126
+ withQuery : (FIRQuery *)query
126
127
expectedDocs : (NSArray <NSString *> *)expectedDocs {
127
- [self checkOnlineAndOfflineQuery: query matchesResult: [self toHashedIds: expectedDocs]];
128
+ // `checkOnlineAndOfflineCollection` first makes sure all documents needed for
129
+ // `query` are in the cache. It does so making a `get` on the first argument.
130
+ // Since *all* composite index tests use the same collection, this is very inefficient to do.
131
+ // Therefore, we should only do so for tests where `TEST_ID_FIELD` matches the current test.
132
+ [self checkOnlineAndOfflineCollection: [self compositeIndexQuery: collection]
133
+ query: query
134
+ matchesResult: [self toHashedIds: expectedDocs]];
128
135
}
129
136
130
137
// Asserts that the IDs in the query snapshot matches the expected Ids. The expected document
@@ -219,7 +226,8 @@ - (void)testOrQueriesWithCompositeIndexes {
219
226
[FIRFilter filterWhereField: @" a" isGreaterThan: @2 ], [FIRFilter filterWhereField: @" b"
220
227
isEqualTo: @1 ]
221
228
]]];
222
- [self assertOnlineAndOfflineResultsMatch: [self compositeIndexQuery: query1]
229
+ [self assertOnlineAndOfflineResultsMatch: collRef
230
+ withQuery: [self compositeIndexQuery: query1]
223
231
expectedDocs: @[ @" doc5" , @" doc2" , @" doc3" ]];
224
232
225
233
// Test with limits (implicit order by ASC): (a==1) || (b > 0) LIMIT 2
@@ -228,7 +236,8 @@ - (void)testOrQueriesWithCompositeIndexes {
228
236
[FIRFilter filterWhereField: @" a" isEqualTo: @1 ], [FIRFilter filterWhereField: @" b"
229
237
isGreaterThan: @0 ]
230
238
]]];
231
- [self assertOnlineAndOfflineResultsMatch: [[self compositeIndexQuery: query2] queryLimitedTo: 2 ]
239
+ [self assertOnlineAndOfflineResultsMatch: collRef
240
+ withQuery: [[self compositeIndexQuery: query2] queryLimitedTo: 2 ]
232
241
expectedDocs: @[ @" doc1" , @" doc2" ]];
233
242
234
243
// Test with limits (explicit order by): (a==1) || (b > 0) LIMIT_TO_LAST 2
@@ -238,7 +247,8 @@ - (void)testOrQueriesWithCompositeIndexes {
238
247
[FIRFilter filterWhereField: @" a" isEqualTo: @1 ], [FIRFilter filterWhereField: @" b"
239
248
isGreaterThan: @0 ]
240
249
]]];
241
- [self assertOnlineAndOfflineResultsMatch: [[[self compositeIndexQuery: query3] queryLimitedToLast: 2 ]
250
+ [self assertOnlineAndOfflineResultsMatch: collRef
251
+ withQuery: [[[self compositeIndexQuery: query3] queryLimitedToLast: 2 ]
242
252
queryOrderedByField: @" b" ]
243
253
expectedDocs: @[ @" doc3" , @" doc4" ]];
244
254
@@ -248,7 +258,8 @@ - (void)testOrQueriesWithCompositeIndexes {
248
258
[FIRFilter filterWhereField: @" a" isEqualTo: @2 ], [FIRFilter filterWhereField: @" b"
249
259
isEqualTo: @1 ]
250
260
]]];
251
- [self assertOnlineAndOfflineResultsMatch: [[[self compositeIndexQuery: query4] queryLimitedTo: 1 ]
261
+ [self assertOnlineAndOfflineResultsMatch: collRef
262
+ withQuery: [[[self compositeIndexQuery: query4] queryLimitedTo: 1 ]
252
263
queryOrderedByField: @" a" ]
253
264
expectedDocs: @[ @" doc5" ]];
254
265
@@ -258,7 +269,8 @@ - (void)testOrQueriesWithCompositeIndexes {
258
269
[FIRFilter filterWhereField: @" a" isEqualTo: @2 ], [FIRFilter filterWhereField: @" b"
259
270
isEqualTo: @1 ]
260
271
]]];
261
- [self assertOnlineAndOfflineResultsMatch: [[[self compositeIndexQuery: query5] queryLimitedToLast: 1 ]
272
+ [self assertOnlineAndOfflineResultsMatch: collRef
273
+ withQuery: [[[self compositeIndexQuery: query5] queryLimitedToLast: 1 ]
262
274
queryOrderedByField: @" a" ]
263
275
expectedDocs: @[ @" doc2" ]];
264
276
}
@@ -886,7 +898,8 @@ - (void)testMultipleInequalityFromCacheAndFromServer {
886
898
// implicit AND: a != 1 && b < 2
887
899
FIRQuery *query = [[collRef queryWhereField: @" a" isNotEqualTo: @1 ] queryWhereField: @" b"
888
900
isLessThan: @2 ];
889
- [self assertOnlineAndOfflineResultsMatch: [self compositeIndexQuery: query]
901
+ [self assertOnlineAndOfflineResultsMatch: collRef
902
+ withQuery: [self compositeIndexQuery: query]
890
903
expectedDocs: @[ @" doc2" ]];
891
904
892
905
// explicit AND: a != 1 && b < 2
@@ -895,7 +908,8 @@ - (void)testMultipleInequalityFromCacheAndFromServer {
895
908
[FIRFilter filterWhereField: @" a" isNotEqualTo: @1 ], [FIRFilter filterWhereField: @" b"
896
909
isLessThan: @2 ]
897
910
]]];
898
- [self assertOnlineAndOfflineResultsMatch: [self compositeIndexQuery: query]
911
+ [self assertOnlineAndOfflineResultsMatch: collRef
912
+ withQuery: [self compositeIndexQuery: query]
899
913
expectedDocs: @[ @" doc2" ]];
900
914
901
915
// explicit AND: a < 3 && b not-in [2, 3]
@@ -905,14 +919,16 @@ - (void)testMultipleInequalityFromCacheAndFromServer {
905
919
[FIRFilter filterWhereField: @" a" isLessThan: @3 ], [FIRFilter filterWhereField: @" b"
906
920
notIn: @[ @2 , @3 ]]
907
921
]]];
908
- [self assertOnlineAndOfflineResultsMatch: [self compositeIndexQuery: query]
922
+ [self assertOnlineAndOfflineResultsMatch: collRef
923
+ withQuery: [self compositeIndexQuery: query]
909
924
expectedDocs: @[ @" doc1" , @" doc5" , @" doc2" ]];
910
925
911
926
// a <3 && b != 0, ordered by: b desc, a desc, __name__ desc
912
927
query = [[[[collRef queryWhereField: @" a" isLessThan: @3 ] queryWhereField: @" b" isNotEqualTo: @0 ]
913
928
queryOrderedByField: @" b"
914
929
descending: YES ] queryLimitedTo: 2 ];
915
- [self assertOnlineAndOfflineResultsMatch: [self compositeIndexQuery: query]
930
+ [self assertOnlineAndOfflineResultsMatch: collRef
931
+ withQuery: [self compositeIndexQuery: query]
916
932
expectedDocs: @[ @" doc4" , @" doc2" ]];
917
933
918
934
// explicit OR: a>2 || b<1.
@@ -921,7 +937,8 @@ - (void)testMultipleInequalityFromCacheAndFromServer {
921
937
[FIRFilter filterWhereField: @" a" isGreaterThan: @2 ], [FIRFilter filterWhereField: @" b"
922
938
isLessThan: @1 ]
923
939
]]];
924
- [self assertOnlineAndOfflineResultsMatch: [self compositeIndexQuery: query]
940
+ [self assertOnlineAndOfflineResultsMatch: collRef
941
+ withQuery: [self compositeIndexQuery: query]
925
942
expectedDocs: @[ @" doc1" , @" doc3" ]];
926
943
}
927
944
0 commit comments