Skip to content

Commit 08e129f

Browse files
authored
Improve the integration test coverage for online vs offline comparisons. (#14707)
1 parent 0aa20f4 commit 08e129f

File tree

6 files changed

+214
-159
lines changed

6 files changed

+214
-159
lines changed

Firestore/Example/Tests/Integration/API/FIRCompositeIndexQueryTests.mm

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,16 @@ - (NSString *)toHashedId:(NSString *)docId {
122122
// Asserts that the result of running the query while online (against the backend/emulator) is
123123
// the same as running it while offline. The expected document Ids are hashed to match the
124124
// actual document IDs created by the test helper.
125-
- (void)assertOnlineAndOfflineResultsMatch:(FIRQuery *)query
125+
- (void)assertOnlineAndOfflineResultsMatch:(FIRCollectionReference *)collection
126+
withQuery:(FIRQuery *)query
126127
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]];
128135
}
129136

130137
// Asserts that the IDs in the query snapshot matches the expected Ids. The expected document
@@ -219,7 +226,8 @@ - (void)testOrQueriesWithCompositeIndexes {
219226
[FIRFilter filterWhereField:@"a" isGreaterThan:@2], [FIRFilter filterWhereField:@"b"
220227
isEqualTo:@1]
221228
]]];
222-
[self assertOnlineAndOfflineResultsMatch:[self compositeIndexQuery:query1]
229+
[self assertOnlineAndOfflineResultsMatch:collRef
230+
withQuery:[self compositeIndexQuery:query1]
223231
expectedDocs:@[ @"doc5", @"doc2", @"doc3" ]];
224232

225233
// Test with limits (implicit order by ASC): (a==1) || (b > 0) LIMIT 2
@@ -228,7 +236,8 @@ - (void)testOrQueriesWithCompositeIndexes {
228236
[FIRFilter filterWhereField:@"a" isEqualTo:@1], [FIRFilter filterWhereField:@"b"
229237
isGreaterThan:@0]
230238
]]];
231-
[self assertOnlineAndOfflineResultsMatch:[[self compositeIndexQuery:query2] queryLimitedTo:2]
239+
[self assertOnlineAndOfflineResultsMatch:collRef
240+
withQuery:[[self compositeIndexQuery:query2] queryLimitedTo:2]
232241
expectedDocs:@[ @"doc1", @"doc2" ]];
233242

234243
// Test with limits (explicit order by): (a==1) || (b > 0) LIMIT_TO_LAST 2
@@ -238,7 +247,8 @@ - (void)testOrQueriesWithCompositeIndexes {
238247
[FIRFilter filterWhereField:@"a" isEqualTo:@1], [FIRFilter filterWhereField:@"b"
239248
isGreaterThan:@0]
240249
]]];
241-
[self assertOnlineAndOfflineResultsMatch:[[[self compositeIndexQuery:query3] queryLimitedToLast:2]
250+
[self assertOnlineAndOfflineResultsMatch:collRef
251+
withQuery:[[[self compositeIndexQuery:query3] queryLimitedToLast:2]
242252
queryOrderedByField:@"b"]
243253
expectedDocs:@[ @"doc3", @"doc4" ]];
244254

@@ -248,7 +258,8 @@ - (void)testOrQueriesWithCompositeIndexes {
248258
[FIRFilter filterWhereField:@"a" isEqualTo:@2], [FIRFilter filterWhereField:@"b"
249259
isEqualTo:@1]
250260
]]];
251-
[self assertOnlineAndOfflineResultsMatch:[[[self compositeIndexQuery:query4] queryLimitedTo:1]
261+
[self assertOnlineAndOfflineResultsMatch:collRef
262+
withQuery:[[[self compositeIndexQuery:query4] queryLimitedTo:1]
252263
queryOrderedByField:@"a"]
253264
expectedDocs:@[ @"doc5" ]];
254265

@@ -258,7 +269,8 @@ - (void)testOrQueriesWithCompositeIndexes {
258269
[FIRFilter filterWhereField:@"a" isEqualTo:@2], [FIRFilter filterWhereField:@"b"
259270
isEqualTo:@1]
260271
]]];
261-
[self assertOnlineAndOfflineResultsMatch:[[[self compositeIndexQuery:query5] queryLimitedToLast:1]
272+
[self assertOnlineAndOfflineResultsMatch:collRef
273+
withQuery:[[[self compositeIndexQuery:query5] queryLimitedToLast:1]
262274
queryOrderedByField:@"a"]
263275
expectedDocs:@[ @"doc2" ]];
264276
}
@@ -886,7 +898,8 @@ - (void)testMultipleInequalityFromCacheAndFromServer {
886898
// implicit AND: a != 1 && b < 2
887899
FIRQuery *query = [[collRef queryWhereField:@"a" isNotEqualTo:@1] queryWhereField:@"b"
888900
isLessThan:@2];
889-
[self assertOnlineAndOfflineResultsMatch:[self compositeIndexQuery:query]
901+
[self assertOnlineAndOfflineResultsMatch:collRef
902+
withQuery:[self compositeIndexQuery:query]
890903
expectedDocs:@[ @"doc2" ]];
891904

892905
// explicit AND: a != 1 && b < 2
@@ -895,7 +908,8 @@ - (void)testMultipleInequalityFromCacheAndFromServer {
895908
[FIRFilter filterWhereField:@"a" isNotEqualTo:@1], [FIRFilter filterWhereField:@"b"
896909
isLessThan:@2]
897910
]]];
898-
[self assertOnlineAndOfflineResultsMatch:[self compositeIndexQuery:query]
911+
[self assertOnlineAndOfflineResultsMatch:collRef
912+
withQuery:[self compositeIndexQuery:query]
899913
expectedDocs:@[ @"doc2" ]];
900914

901915
// explicit AND: a < 3 && b not-in [2, 3]
@@ -905,14 +919,16 @@ - (void)testMultipleInequalityFromCacheAndFromServer {
905919
[FIRFilter filterWhereField:@"a" isLessThan:@3], [FIRFilter filterWhereField:@"b"
906920
notIn:@[ @2, @3 ]]
907921
]]];
908-
[self assertOnlineAndOfflineResultsMatch:[self compositeIndexQuery:query]
922+
[self assertOnlineAndOfflineResultsMatch:collRef
923+
withQuery:[self compositeIndexQuery:query]
909924
expectedDocs:@[ @"doc1", @"doc5", @"doc2" ]];
910925

911926
// a <3 && b != 0, ordered by: b desc, a desc, __name__ desc
912927
query = [[[[collRef queryWhereField:@"a" isLessThan:@3] queryWhereField:@"b" isNotEqualTo:@0]
913928
queryOrderedByField:@"b"
914929
descending:YES] queryLimitedTo:2];
915-
[self assertOnlineAndOfflineResultsMatch:[self compositeIndexQuery:query]
930+
[self assertOnlineAndOfflineResultsMatch:collRef
931+
withQuery:[self compositeIndexQuery:query]
916932
expectedDocs:@[ @"doc4", @"doc2" ]];
917933

918934
// explicit OR: a>2 || b<1.
@@ -921,7 +937,8 @@ - (void)testMultipleInequalityFromCacheAndFromServer {
921937
[FIRFilter filterWhereField:@"a" isGreaterThan:@2], [FIRFilter filterWhereField:@"b"
922938
isLessThan:@1]
923939
]]];
924-
[self assertOnlineAndOfflineResultsMatch:[self compositeIndexQuery:query]
940+
[self assertOnlineAndOfflineResultsMatch:collRef
941+
withQuery:[self compositeIndexQuery:query]
925942
expectedDocs:@[ @"doc1", @"doc3" ]];
926943
}
927944

0 commit comments

Comments
 (0)