aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Example/Tests/Integration/API/FIRQueryTests.m
diff options
context:
space:
mode:
Diffstat (limited to 'Firestore/Example/Tests/Integration/API/FIRQueryTests.m')
-rw-r--r--Firestore/Example/Tests/Integration/API/FIRQueryTests.m197
1 files changed, 197 insertions, 0 deletions
diff --git a/Firestore/Example/Tests/Integration/API/FIRQueryTests.m b/Firestore/Example/Tests/Integration/API/FIRQueryTests.m
new file mode 100644
index 0000000..f08df33
--- /dev/null
+++ b/Firestore/Example/Tests/Integration/API/FIRQueryTests.m
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@import Firestore;
+
+#import <XCTest/XCTest.h>
+
+#import "Core/FSTFirestoreClient.h"
+
+#import "FSTIntegrationTestCase.h"
+
+@interface FIRQueryTests : FSTIntegrationTestCase
+@end
+
+@implementation FIRQueryTests
+
+- (void)testLimitQueries {
+ FIRCollectionReference *collRef = [self collectionRefWithDocuments:@{
+ @"a" : @{@"k" : @"a"},
+ @"b" : @{@"k" : @"b"},
+ @"c" : @{@"k" : @"c"}
+
+ }];
+ FIRQuerySnapshot *snapshot = [self readDocumentSetForRef:[collRef queryLimitedTo:2]];
+
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(snapshot), (@[ @{@"k" : @"a"}, @{@"k" : @"b"} ]));
+}
+
+- (void)testLimitQueriesWithDescendingSortOrder {
+ FIRCollectionReference *collRef = [self collectionRefWithDocuments:@{
+ @"a" : @{@"k" : @"a", @"sort" : @0},
+ @"b" : @{@"k" : @"b", @"sort" : @1},
+ @"c" : @{@"k" : @"c", @"sort" : @1},
+ @"d" : @{@"k" : @"d", @"sort" : @2},
+
+ }];
+ FIRQuerySnapshot *snapshot =
+ [self readDocumentSetForRef:[[collRef queryOrderedByField:@"sort" descending:YES]
+ queryLimitedTo:2]];
+
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(snapshot), (@[
+ @{ @"k" : @"d",
+ @"sort" : @2 },
+ @{ @"k" : @"c",
+ @"sort" : @1 }
+ ]));
+}
+
+- (void)testKeyOrderIsDescendingForDescendingInequality {
+ FIRCollectionReference *collRef = [self collectionRefWithDocuments:@{
+ @"a" : @{@"foo" : @42},
+ @"b" : @{@"foo" : @42.0},
+ @"c" : @{@"foo" : @42},
+ @"d" : @{@"foo" : @21},
+ @"e" : @{@"foo" : @21.0},
+ @"f" : @{@"foo" : @66},
+ @"g" : @{@"foo" : @66.0},
+ }];
+ FIRQuerySnapshot *snapshot =
+ [self readDocumentSetForRef:[[collRef queryWhereField:@"foo" isGreaterThan:@21]
+ queryOrderedByField:@"foo"
+ descending:YES]];
+ XCTAssertEqualObjects(FIRQuerySnapshotGetIDs(snapshot), (@[ @"g", @"f", @"c", @"b", @"a" ]));
+}
+
+- (void)testUnaryFilterQueries {
+ FIRCollectionReference *collRef = [self collectionRefWithDocuments:@{
+ @"a" : @{@"null" : [NSNull null], @"nan" : @(NAN)},
+ @"b" : @{@"null" : [NSNull null], @"nan" : @0},
+ @"c" : @{@"null" : @NO, @"nan" : @(NAN)}
+ }];
+
+ FIRQuerySnapshot *results =
+ [self readDocumentSetForRef:[[collRef queryWhereField:@"null" isEqualTo:[NSNull null]]
+ queryWhereField:@"nan"
+ isEqualTo:@(NAN)]];
+
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(results), (@[
+ @{ @"null" : [NSNull null],
+ @"nan" : @(NAN) }
+ ]));
+}
+
+- (void)testQueryWithFieldPaths {
+ FIRCollectionReference *collRef = [self collectionRefWithDocuments:@{
+ @"a" : @{@"a" : @1},
+ @"b" : @{@"a" : @2},
+ @"c" : @{@"a" : @3}
+ }];
+
+ FIRQuery *query =
+ [collRef queryWhereFieldPath:[[FIRFieldPath alloc] initWithFields:@[ @"a" ]] isLessThan:@3];
+ query = [query queryOrderedByFieldPath:[[FIRFieldPath alloc] initWithFields:@[ @"a" ]]
+ descending:YES];
+
+ FIRQuerySnapshot *snapshot = [self readDocumentSetForRef:query];
+
+ XCTAssertEqualObjects(FIRQuerySnapshotGetIDs(snapshot), (@[ @"b", @"a" ]));
+}
+
+- (void)testFilterOnInfinity {
+ FIRCollectionReference *collRef = [self collectionRefWithDocuments:@{
+ @"a" : @{@"inf" : @(INFINITY)},
+ @"b" : @{@"inf" : @(-INFINITY)}
+ }];
+
+ FIRQuerySnapshot *results =
+ [self readDocumentSetForRef:[collRef queryWhereField:@"inf" isEqualTo:@(INFINITY)]];
+
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(results), (@[ @{ @"inf" : @(INFINITY) } ]));
+}
+
+- (void)testCanExplicitlySortByDocumentID {
+ NSDictionary *testDocs = @{
+ @"a" : @{@"key" : @"a"},
+ @"b" : @{@"key" : @"b"},
+ @"c" : @{@"key" : @"c"},
+ };
+ FIRCollectionReference *collection = [self collectionRefWithDocuments:testDocs];
+
+ // Ideally this would be descending to validate it's different than
+ // the default, but that requires an extra index
+ FIRQuerySnapshot *docs =
+ [self readDocumentSetForRef:[collection queryOrderedByFieldPath:[FIRFieldPath documentID]]];
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(docs),
+ (@[ testDocs[@"a"], testDocs[@"b"], testDocs[@"c"] ]));
+}
+
+- (void)testCanQueryByDocumentID {
+ NSDictionary *testDocs = @{
+ @"aa" : @{@"key" : @"aa"},
+ @"ab" : @{@"key" : @"ab"},
+ @"ba" : @{@"key" : @"ba"},
+ @"bb" : @{@"key" : @"bb"},
+ };
+ FIRCollectionReference *collection = [self collectionRefWithDocuments:testDocs];
+ FIRQuerySnapshot *docs =
+ [self readDocumentSetForRef:[collection queryWhereFieldPath:[FIRFieldPath documentID]
+ isEqualTo:@"ab"]];
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(docs), (@[ testDocs[@"ab"] ]));
+}
+
+- (void)testCanQueryByDocumentIDs {
+ NSDictionary *testDocs = @{
+ @"aa" : @{@"key" : @"aa"},
+ @"ab" : @{@"key" : @"ab"},
+ @"ba" : @{@"key" : @"ba"},
+ @"bb" : @{@"key" : @"bb"},
+ };
+ FIRCollectionReference *collection = [self collectionRefWithDocuments:testDocs];
+ FIRQuerySnapshot *docs =
+ [self readDocumentSetForRef:[collection queryWhereFieldPath:[FIRFieldPath documentID]
+ isEqualTo:@"ab"]];
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(docs), (@[ testDocs[@"ab"] ]));
+
+ docs = [self readDocumentSetForRef:[[collection queryWhereFieldPath:[FIRFieldPath documentID]
+ isGreaterThan:@"aa"]
+ queryWhereFieldPath:[FIRFieldPath documentID]
+ isLessThanOrEqualTo:@"ba"]];
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(docs), (@[ testDocs[@"ab"], testDocs[@"ba"] ]));
+}
+
+- (void)testCanQueryByDocumentIDsUsingRefs {
+ NSDictionary *testDocs = @{
+ @"aa" : @{@"key" : @"aa"},
+ @"ab" : @{@"key" : @"ab"},
+ @"ba" : @{@"key" : @"ba"},
+ @"bb" : @{@"key" : @"bb"},
+ };
+ FIRCollectionReference *collection = [self collectionRefWithDocuments:testDocs];
+ FIRQuerySnapshot *docs = [self
+ readDocumentSetForRef:[collection queryWhereFieldPath:[FIRFieldPath documentID]
+ isEqualTo:[collection documentWithPath:@"ab"]]];
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(docs), (@[ testDocs[@"ab"] ]));
+
+ docs = [self
+ readDocumentSetForRef:[[collection queryWhereFieldPath:[FIRFieldPath documentID]
+ isGreaterThan:[collection documentWithPath:@"aa"]]
+ queryWhereFieldPath:[FIRFieldPath documentID]
+ isLessThanOrEqualTo:[collection documentWithPath:@"ba"]]];
+ XCTAssertEqualObjects(FIRQuerySnapshotGetData(docs), (@[ testDocs[@"ab"], testDocs[@"ba"] ]));
+}
+
+@end