aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/Database/Tests/Integration/FIRDatabaseQueryTests.m
diff options
context:
space:
mode:
Diffstat (limited to 'Example/Database/Tests/Integration/FIRDatabaseQueryTests.m')
-rw-r--r--Example/Database/Tests/Integration/FIRDatabaseQueryTests.m678
1 files changed, 339 insertions, 339 deletions
diff --git a/Example/Database/Tests/Integration/FIRDatabaseQueryTests.m b/Example/Database/Tests/Integration/FIRDatabaseQueryTests.m
index a5bff5a..ff4b5dc 100644
--- a/Example/Database/Tests/Integration/FIRDatabaseQueryTests.m
+++ b/Example/Database/Tests/Integration/FIRDatabaseQueryTests.m
@@ -23,7 +23,7 @@
- (void) testCanCreateBasicQueries {
// Just make sure none of these throw anything
-
+
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
[ref queryLimitedToFirst:10];
@@ -143,7 +143,7 @@
- (void) testInvalidKeys {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
NSArray* badKeys = @[ @".test", @"test.", @"fo$o", @"[what", @"ever]", @"ha#sh", @"/thing", @"th/ing", @"thing/"];
-
+
for (NSString* badKey in badKeys) {
XCTAssertThrows([[ref queryOrderedByPriority] queryStartingAtValue:nil childKey:badKey], @"Setting bad key");
XCTAssertThrows([[ref queryOrderedByPriority] queryEndingAtValue:nil childKey:badKey], @"Setting bad key");
@@ -152,7 +152,7 @@
- (void) testOffCanBeCalledOnDefault {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL called = NO;
FIRDatabaseQuery * query = [ref queryLimitedToLast:5];
[query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -162,32 +162,32 @@
called = YES;
}
}];
-
+
[ref setValue:@{@"a": @5, @"b": @6}];
-
+
[self waitUntil:^BOOL{
return called;
}];
-
+
called = NO;
-
+
[ref removeAllObservers];
-
+
__block BOOL complete = NO;
[ref setValue:@{@"a": @6, @"b": @7} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
complete = YES;
}];
-
+
[self waitUntil:^BOOL{
return complete;
}];
-
+
XCTAssertFalse(called, @"Should not have been called again");
}
- (void) testOffCanBeCalledOnHandle {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL called = NO;
FIRDatabaseQuery * query = [ref queryLimitedToLast:5];
FIRDatabaseHandle handle = [query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -197,32 +197,32 @@
called = YES;
}
}];
-
+
[ref setValue:@{@"a": @5, @"b": @6}];
-
+
[self waitUntil:^BOOL{
return called;
}];
-
+
called = NO;
-
+
[ref removeObserverWithHandle:handle];
-
+
__block BOOL complete = NO;
[ref setValue:@{@"a": @6, @"b": @7} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
complete = YES;
}];
-
+
[self waitUntil:^BOOL{
return complete;
}];
-
+
XCTAssertFalse(called, @"Should not have been called again");
}
- (void) testOffCanBeCalledOnSpecificQuery {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL called = NO;
FIRDatabaseQuery * query = [ref queryLimitedToLast:5];
FIRDatabaseHandle handle = [query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -232,26 +232,26 @@
called = YES;
}
}];
-
+
[ref setValue:@{@"a": @5, @"b": @6}];
-
+
[self waitUntil:^BOOL{
return called;
}];
-
+
called = NO;
-
+
[query removeObserverWithHandle:handle];
-
+
__block BOOL complete = NO;
[ref setValue:@{@"a": @6, @"b": @7} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
complete = YES;
}];
-
+
[self waitUntil:^BOOL{
return complete;
}];
-
+
XCTAssertFalse(called, @"Should not have been called again");
}
@@ -267,7 +267,7 @@
- (void) testOffCanBeCalledWithoutHandle {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL called1 = NO;
__block BOOL called2 = NO;
FIRDatabaseQuery * query = [ref queryLimitedToLast:5];
@@ -277,51 +277,51 @@
[query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
called2 = YES;
}];
-
+
[ref setValue:@{@"a": @5, @"b": @6}];
-
+
[self waitUntil:^BOOL{
return called1 && called2;
}];
-
+
called1 = NO;
called2 = NO;
-
+
[ref removeAllObservers];
-
+
__block BOOL complete = NO;
[ref setValue:@{@"a": @6, @"b": @7} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
complete = YES;
}];
-
+
[self waitUntil:^BOOL{
return complete;
}];
-
+
XCTAssertFalse(called1 || called2, @"Should not have called either callback");
}
- (void) testEnsureOnly5ItemsAreKept {
__block FIRDataSnapshot * snap = nil;
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
FIRDatabaseQuery * query = [ref queryLimitedToLast:5];
__block int count = 0;
[query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
snap = snapshot;
count++;
}];
-
+
[ref setValue:nil];
for (int i = 0; i < 10; ++i) {
[[ref childByAutoId] setValue:[NSNumber numberWithInt:i]];
}
-
+
[self waitUntil:^BOOL{
// The initial set triggers the callback, so we need to wait for 11 events
return count == 11;
}];
-
+
count = 5;
for (FIRDataSnapshot * snapshot in snap.children) {
NSNumber* num = [snapshot value];
@@ -329,26 +329,26 @@
XCTAssertTrue([num isEqualToNumber:current], @"Expect children in order");
count++;
}
-
+
XCTAssertTrue(count == 10, @"Expected 5 children");
}
- (void) testOnlyLast5SentFromServer {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
__block int count = 0;
-
+
[ref setValue:nil];
-
+
for (int i = 0; i < 10; ++i) {
[[ref childByAutoId] setValue:[NSNumber numberWithInt:i] withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
count++;
}];
}
-
+
[self waitUntil:^BOOL{
return count == 10;
}];
-
+
FIRDatabaseQuery * query = [ref queryLimitedToLast:5];
count = 5;
[query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -359,7 +359,7 @@
count++;
}
}];
-
+
[self waitUntil:^BOOL{
return count == 10;
}];
@@ -374,17 +374,17 @@
[expectations addQuery:[[[ref queryOrderedByPriority] queryEndingAtValue:nil] queryLimitedToLast:2] withExpectation:@{@"b": @2, @"c": @3}];
[expectations addQuery:[[[ref queryOrderedByPriority] queryEndingAtValue:nil] queryLimitedToLast:3] withExpectation:@{@"a": @1, @"b": @2, @"c": @3}];
[expectations addQuery:[[[ref queryOrderedByPriority] queryEndingAtValue:nil] queryLimitedToLast:4] withExpectation:@{@"a": @1, @"b": @2, @"c": @3}];
-
-
+
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[expectations validate];
}
@@ -397,51 +397,51 @@
[expectations addQuery:[[[ref queryOrderedByPriority] queryStartingAtValue:nil childKey:@"b"] queryLimitedToFirst:1] withExpectation:@{@"b": @2}];
[expectations addQuery:[[[ref queryOrderedByPriority] queryStartingAtValue:nil childKey:@"b"] queryLimitedToFirst:2] withExpectation:@{@"b": @2, @"c": @3}];
[expectations addQuery:[[[ref queryOrderedByPriority] queryStartingAtValue:nil childKey:@"b"] queryLimitedToFirst:3] withExpectation:@{@"b": @2, @"c": @3}];
-
-
+
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[expectations validate];
}
- (void) testLimitsAndStartAtWithServerData {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
FTestExpectations* expectations = [[FTestExpectations alloc] initFrom:self];
[expectations addQuery:[[[ref queryOrderedByPriority] queryStartingAtValue:nil] queryLimitedToFirst:1] withExpectation:@{@"a": @1}];
-
+
/*params = [[FQueryParams alloc] init];
params = [params setStartPriority:nil andName:@"c"];
params = [params limitTo:1];
[expectations addQuery:[ref queryWithParams:params] withExpectation:@{@"c": @3}];
-
+
params = [[FQueryParams alloc] init];
params = [params setStartPriority:nil andName:@"b"];
params = [params limitTo:1];
[expectations addQuery:[ref queryWithParams:params] withExpectation:@{@"b": @2}];
-
+
params = [[FQueryParams alloc] init];
params = [params setStartPriority:nil andName:@"b"];
params = [params limitTo:2];
[expectations addQuery:[ref queryWithParams:params] withExpectation:@{@"b": @2, @"c": @3}];
-
+
params = [[FQueryParams alloc] init];
params = [params setStartPriority:nil andName:@"b"];
params = [params limitTo:3];
@@ -456,7 +456,7 @@
- (void) testChildEventsAreFiredWhenLimitIsHit {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
NSMutableArray* added = [[NSMutableArray alloc] init];
NSMutableArray* removed = [[NSMutableArray alloc] init];
[[ref queryLimitedToLast:2] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
@@ -467,30 +467,30 @@
[removed addObject:[snapshot key]];
}];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"b", @"c"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have two items");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"d"] setValue:@4 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
expected = @[@"b"];
XCTAssertTrue([removed isEqualToArray:expected], @"Expected to remove b");
expected = @[@"d"];
@@ -500,16 +500,16 @@
- (void) testChildEventsAreFiredWhenLimitIsHitWithServerData {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSMutableArray* added = [[NSMutableArray alloc] init];
NSMutableArray* removed = [[NSMutableArray alloc] init];
FIRDatabaseQuery * query = [ref queryLimitedToLast:2];
@@ -521,25 +521,25 @@
[removed addObject:[snapshot key]];
}];
-
+
[self waitUntil:^BOOL{
return [added count] == 2;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"b", @"c"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have two items");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"d"] setValue:@4 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
expected = @[@"b"];
XCTAssertTrue([removed isEqualToArray:expected], @"Expected to remove b");
expected = @[@"d"];
@@ -562,30 +562,30 @@
[removed addObject:[snapshot key]];
}];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"a", @"b"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have two items");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"aa"] setValue:@4 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
expected = @[@"b"];
XCTAssertTrue([removed isEqualToArray:expected], @"Expected to remove b");
expected = @[@"aa"];
@@ -595,12 +595,12 @@
- (void) testChildEventsAreFiredWhenLimitIsHitWithStartAndServerData {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -616,25 +616,25 @@
[removed addObject:[snapshot key]];
}];
-
+
[self waitUntil:^BOOL{
return [added count] == 2;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"a", @"b"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have two items");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"aa"] setValue:@4 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
expected = @[@"b"];
XCTAssertTrue([removed isEqualToArray:expected], @"Expected to remove b");
expected = @[@"aa"];
@@ -655,30 +655,30 @@
[removed addObject:[snapshot key]];
}];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready && [added count] >= 1;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"c"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have one item");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"b"] setValue:@4 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Expected to remove nothing");
expected = @[@"b"];
XCTAssertTrue([added isEqualToArray:expected], @"Expected to add b");
@@ -687,12 +687,12 @@
- (void) testStartAndLimitWithIncompleteWindowAndServerData {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -709,25 +709,25 @@
[removed addObject:[snapshot key]];
}];
-
+
[self waitUntil:^BOOL{
return [added count] == 1;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"c"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have one item");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"b"] setValue:@4 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Expected to remove nothing");
expected = @[@"b"];
XCTAssertTrue([added isEqualToArray:expected], @"Expected to add b");
@@ -738,7 +738,7 @@
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
FIRDatabaseQuery * query = [ref queryLimitedToLast:2];
-
+
NSMutableArray* added = [[NSMutableArray alloc] init];
NSMutableArray* removed = [[NSMutableArray alloc] init];
[query observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
@@ -748,26 +748,26 @@
[removed addObject:[snapshot key]];
}];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready && [added count] >= 1;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"b", @"c"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have one item");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"b"] removeValueWithCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -781,18 +781,18 @@
-(void) testChildEventsAreFiredWhenItemDeletedAtServer {
FIRDatabaseReference * ref = [FTestHelpers getRandomNodeWithoutPersistence];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
FIRDatabaseQuery * query = [ref queryLimitedToLast:2];
-
+
NSMutableArray* added = [[NSMutableArray alloc] init];
NSMutableArray* removed = [[NSMutableArray alloc] init];
[query observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
@@ -803,21 +803,21 @@
[removed addObject:[snapshot key]];
}];
-
+
[self waitUntil:^BOOL{
return [added count] == 2;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"b", @"c"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have two items");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"b"] removeValueWithCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -840,26 +840,26 @@
[removed addObject:[snapshot key]];
}];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready && [added count] >= 1;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"b", @"c"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have one item");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"b"] removeValueWithCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -872,18 +872,18 @@
-(void) testRemoveFiredWhenItemDeletedAtServer {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"b": @2, @"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
FIRDatabaseQuery * query = [ref queryLimitedToLast:2];
-
+
NSMutableArray* added = [[NSMutableArray alloc] init];
NSMutableArray* removed = [[NSMutableArray alloc] init];
[query observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
@@ -894,21 +894,21 @@
[removed addObject:[snapshot key]];
}];
-
+
[self waitUntil:^BOOL{
return [added count] == 2;
}];
-
+
XCTAssertTrue([removed count] == 0, @"Nothing should be removed from our window");
NSArray* expected = @[@"b", @"c"];
XCTAssertTrue([added isEqualToArray:expected], @"Should have two items");
-
+
[added removeAllObjects];
ready = NO;
[[ref child:@"b"] removeValueWithCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -922,15 +922,15 @@
- (void) testStartAtPriorityAndEndAtPriorityWork {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
FTestExpectations* expectations = [[FTestExpectations alloc] initFrom:self];
-
+
[expectations addQuery:[[[ref queryOrderedByPriority] queryStartingAtValue:@"w"] queryEndingAtValue:@"y"] withExpectation:@{@"b": @2, @"c": @3, @"d": @4}];
[expectations addQuery:[[[ref queryOrderedByPriority] queryStartingAtValue:@"w"] queryEndingAtValue:@"w"] withExpectation:@{@"d": @4}];
-
+
__block id nullSnap = @"dummy";
[[[[ref queryOrderedByPriority] queryStartingAtValue:@"a"] queryEndingAtValue:@"c"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
nullSnap = [snapshot value];
}];
-
+
[ref setValue:@{
@"a": @{@".value": @1, @".priority": @"z"},
@"b": @{@".value": @2, @".priority": @"y"},
@@ -939,13 +939,13 @@
}];
WAIT_FOR(expectations.isReady && [nullSnap isEqual:[NSNull null]]);
-
+
[expectations validate];
}
- (void) testStartAtPriorityAndEndAtPriorityWorkWithServerData {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
[ref setValue:@{
@"a": @{@".value": @1, @".priority": @"z"},
@@ -957,19 +957,19 @@
}];
WAIT_FOR(ready);
-
+
FTestExpectations* expectations = [[FTestExpectations alloc] initFrom:self];
-
+
[expectations addQuery:[[[ref queryOrderedByPriority] queryStartingAtValue:@"w"] queryEndingAtValue:@"y"] withExpectation:@{@"b": @2, @"c": @3, @"d": @4}];
[expectations addQuery:[[[ref queryOrderedByPriority] queryStartingAtValue:@"w"] queryEndingAtValue:@"w"] withExpectation:@{@"d": @4}];
-
+
__block id nullSnap = @"dummy";
[[[[ref queryOrderedByPriority] queryStartingAtValue:@"a"] queryEndingAtValue:@"c"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
nullSnap = [snapshot value];
}];
-
+
WAIT_FOR(expectations.isReady && [nullSnap isEqual:[NSNull null]]);
-
+
[expectations validate];
}
@@ -985,16 +985,16 @@
query = [[[ref queryOrderedByPriority] queryStartingAtValue:@1 childKey:@"c"] queryEndingAtValue:@2];
[expectations addQuery:query withExpectation:@{@"c": @3, @"d": @4}];
-
+
[ref setValue:@{
@"a": @{@".value": @1, @".priority": @1},
@"b": @{@".value": @2, @".priority": @1},
@"c": @{@".value": @3, @".priority": @2},
@"d": @{@".value": @4, @".priority": @2}
}];
-
+
WAIT_FOR(expectations.isReady);
-
+
[expectations validate];
}
@@ -1009,9 +1009,9 @@
} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
WAIT_FOR(ready);
-
+
FTestExpectations* expectations = [[FTestExpectations alloc] initFrom:self];
FIRDatabaseQuery * query = [[[ref queryOrderedByPriority] queryStartingAtValue:@1 childKey:@"a"] queryEndingAtValue:@2 childKey:@"d"];
@@ -1022,9 +1022,9 @@
query = [[[ref queryOrderedByPriority] queryStartingAtValue:@1 childKey:@"c"] queryEndingAtValue:@2];
[expectations addQuery:query withExpectation:@{@"c": @3, @"d": @4}];
-
+
WAIT_FOR(expectations.isReady);
-
+
[expectations validate];
}
@@ -1040,16 +1040,16 @@
query = [[[ref queryOrderedByPriority] queryStartingAtValue:@1 childKey:@"e"] queryEndingAtValue:@2];
[expectations addQuery:query withExpectation:@{@"a": @1, @"b": @2}];
-
+
[ref setValue:@{
@"c": @{@".value": @3, @".priority": @1},
@"d": @{@".value": @4, @".priority": @1},
@"a": @{@".value": @1, @".priority": @2},
@"b": @{@".value": @2, @".priority": @2}
}];
-
+
WAIT_FOR(expectations.isReady);
-
+
[expectations validate];
}
@@ -1064,9 +1064,9 @@
} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
WAIT_FOR(ready);
-
+
FTestExpectations* expectations = [[FTestExpectations alloc] initFrom:self];
FIRDatabaseQuery * query = [[[ref queryOrderedByPriority] queryStartingAtValue:@1 childKey:@"c"] queryEndingAtValue:@2 childKey:@"b"];
@@ -1077,9 +1077,9 @@
query = [[[ref queryOrderedByPriority] queryStartingAtValue:@1 childKey:@"e"] queryEndingAtValue:@2];
[expectations addQuery:query withExpectation:@{@"a": @1, @"b": @2}];
-
+
WAIT_FOR(expectations.isReady);
-
+
[expectations validate];
}
@@ -1190,7 +1190,7 @@
- (void) testPrevNameWorks {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
NSMutableArray* added = [[NSMutableArray alloc] init];
[[ref queryLimitedToLast:2] observeEventType:FIRDataEventTypeChildAdded andPreviousSiblingKeyWithBlock:^(FIRDataSnapshot *snapshot, NSString *prevName) {
@@ -1202,31 +1202,31 @@
}
}];
-
+
[[ref child:@"a"] setValue:@1];
[self waitUntil:^BOOL{
NSArray* expected = @[@"a", @"null"];
return [added isEqualToArray:expected];
}];
-
+
[added removeAllObjects];
-
+
[[ref child:@"c"] setValue:@3];
[self waitUntil:^BOOL{
NSArray* expected = @[@"c", @"a"];
return [added isEqualToArray:expected];
}];
-
+
[added removeAllObjects];
-
+
[[ref child:@"b"] setValue:@2];
[self waitUntil:^BOOL{
NSArray* expected = @[@"b", @"null"];
return [added isEqualToArray:expected];
}];
-
+
[added removeAllObjects];
-
+
[[ref child:@"d"] setValue:@3];
[self waitUntil:^BOOL{
NSArray* expected = @[@"d", @"c"];
@@ -1238,7 +1238,7 @@
- (void) testPrevNameWorksWithMoves {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
NSMutableArray* moved = [[NSMutableArray alloc] init];
[[ref queryLimitedToLast:2] observeEventType:FIRDataEventTypeChildMoved andPreviousSiblingKeyWithBlock:^(FIRDataSnapshot *snapshot, NSString *prevName) {
@@ -1249,56 +1249,56 @@
[moved addObject:@"null"];
}
}];
-
+
[ref setValue:@{
@"a": @{@".value": @"a", @".priority": @10},
@"b": @{@".value": @"b", @".priority": @20},
@"c": @{@".value": @"c", @".priority": @30},
@"d": @{@".value": @"d", @".priority": @40}
}];
-
+
__block BOOL ready = NO;
[[ref child:@"c"] setPriority:@50 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSArray* expected = @[@"c", @"d"];
XCTAssertTrue([moved isEqualToArray:expected], @"Expected changed node and prevChild");
-
+
[moved removeAllObjects];
ready = NO;
[[ref child:@"c"] setPriority:@35 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
expected = @[@"c", @"null"];
XCTAssertTrue([moved isEqualToArray:expected], @"Expected changed node and prevChild");
-
+
[moved removeAllObjects];
ready = NO;
[[ref child:@"b"] setPriority:@33 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
expected = @[];
XCTAssertTrue([moved isEqualToArray:expected], @"Expected changed node and prevChild to be empty");
}
- (void) testLocalEvents {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
NSMutableArray* events = [[NSMutableArray alloc] init];
[[ref queryLimitedToLast:2] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
NSString *eventString = [NSString stringWithFormat:@"%@ added", [snapshot value]];
@@ -1309,7 +1309,7 @@
NSString *eventString = [NSString stringWithFormat:@"%@ removed", [snapshot value]];
[events addObject:eventString];
}];
-
+
__block BOOL ready = NO;
for (int i = 0; i < 5; ++i) {
[[ref childByAutoId] setValue:[NSNumber numberWithInt:i] withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
@@ -1318,11 +1318,11 @@
}
}];
}
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSArray* expected = @[@"0 added", @"1 added", @"0 removed", @"2 added", @"1 removed", @"3 added", @"2 removed", @"4 added"];
XCTAssertTrue([events isEqualToArray:expected], @"Expecting window to stay at two nodes");
}
@@ -1331,7 +1331,7 @@
FTupleFirebase* pair = [FTestHelpers getRandomNodePair];
FIRDatabaseReference * writer = pair.one;
FIRDatabaseReference * reader = pair.two;
-
+
NSMutableArray* events = [[NSMutableArray alloc] init];
[[reader queryLimitedToLast:2] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
@@ -1343,11 +1343,11 @@
NSString *oldEventString = [NSString stringWithFormat:@"%@ added", [snapshot value]];
[events removeObject:oldEventString];
}];
-
+
for (int i = 0; i < 5; ++i) {
[[writer childByAutoId] setValue:[NSNumber numberWithInt:i]];
}
-
+
NSArray* expected = @[@"3 added", @"4 added"];
[self waitUntil:^BOOL{
return [events isEqualToArray:expected];
@@ -1356,12 +1356,12 @@
- (void) testLimitOnEmptyNodeFiresValue {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
[[ref queryLimitedToLast:1] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1369,7 +1369,7 @@
- (void) testFilteringToNullPriorities {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
// Note: cannot set nil in a dictionary, just leave out priority
[ref setValue:@{
@"a": @0,
@@ -1378,7 +1378,7 @@
@"d": @{@".priority": @3, @".value": @3},
@"e": @{@".priority": @"hi", @".value": @4}
}];
-
+
__block BOOL ready = NO;
[[[[ref queryOrderedByPriority] queryStartingAtValue:nil] queryEndingAtValue:nil] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
NSDictionary *expected = @{@"a" : @0, @"b" : @1};
@@ -1386,7 +1386,7 @@
XCTAssertTrue([val isEqualToDictionary:expected], @"Expected only null priority keys");
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1394,7 +1394,7 @@
- (void) testNullPrioritiesIncludedInEndAt {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
// Note: cannot set nil in a dictionary, just leave out priority
[ref setValue:@{
@"a": @0,
@@ -1403,7 +1403,7 @@
@"d": @{@".priority": @3, @".value": @3},
@"e": @{@".priority": @"hi", @".value": @4}
}];
-
+
__block BOOL ready = NO;
[[[ref queryOrderedByPriority] queryEndingAtValue:@2] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
NSDictionary *expected = @{@"a" : @0, @"b" : @1, @"c" : @2};
@@ -1411,7 +1411,7 @@
XCTAssertTrue([val isEqualToDictionary:expected], @"Expected up to priority 2");
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1462,7 +1462,7 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Expected child listener");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1476,7 +1476,7 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Expected parent listener");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1489,11 +1489,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Child listener should be back");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[[ref child:@"a"] removeAllObservers];
ready = NO;
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
@@ -1501,10 +1501,10 @@
XCTAssertTrue(listens.count == 0, @"No more listeners");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
- }];
+ }];
}
- (void) testDedupeListensOnGrandchild {
@@ -1520,7 +1520,7 @@
[ref observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
}];
-
+
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
listens = [self dumpListensForRef:ref];
NSSet* expected = [self expectDefaultListenerAtPath:[FPath empty]];
@@ -1565,7 +1565,7 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Expected grandchild");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1582,7 +1582,7 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Expected two grandchildren");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1596,11 +1596,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Expected parent listener to override");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[ref removeAllObservers];
ready = NO;
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
@@ -1612,11 +1612,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Expected grandchild listeners to return");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[[ref child:@"a/aa"] removeAllObservers];
ready = NO;
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
@@ -1625,11 +1625,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Expected one listener");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[[ref child:@"a/bb"] removeAllObservers];
ready = NO;
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
@@ -1637,7 +1637,7 @@
XCTAssertTrue(listens.count == 0, @"No more listeners");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1647,7 +1647,7 @@
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
__block NSSet* listens = [self dumpListensForRef:ref];
XCTAssertTrue(listens.count == 0, @"No Listens yet");
-
+
__block BOOL ready = NO;
FIRDatabaseQuery * aLim1 = [[ref child:@"a"] queryLimitedToLast:1];
FIRDatabaseHandle handle1 = [aLim1 observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -1660,11 +1660,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Single query");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
FIRDatabaseQuery * rootLim1 = [ref queryLimitedToLast:1];
FIRDatabaseHandle handle2 = [rootLim1 observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -1680,11 +1680,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Two queries");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
FIRDatabaseQuery * aLim5 = [[ref child:@"a"] queryLimitedToLast:5];
FIRDatabaseHandle handle3 = [aLim5 observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -1694,7 +1694,7 @@
FQueryParams* expectedParams1 = [[FQueryParams alloc] init];
expectedParams1 = [expectedParams1 limitTo:1];
NSSet* rootExpected = [self expectParams:expectedParams1 atPath:[FPath empty]];
-
+
FQueryParams* expectedParams2 = [[FQueryParams alloc] init];
expectedParams2 = [expectedParams2 limitTo:5];
NSSet* childExpected = [self expectParamssetValue:[NSSet setWithObjects:expectedParams1, expectedParams2, nil] atPath:[FPath pathWithString:@"/a"]];
@@ -1703,11 +1703,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Three queries");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[ref removeObserverWithHandle:handle2];
ready = NO;
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
@@ -1720,11 +1720,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Two queries");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[aLim1 removeObserverWithHandle:handle1];
[aLim5 removeObserverWithHandle:handle3];
ready = NO;
@@ -1733,7 +1733,7 @@
XCTAssertTrue(listens.count == 0, @"No more listeners");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1743,7 +1743,7 @@
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
__block NSSet* listens = [self dumpListensForRef:ref];
XCTAssertTrue(listens.count == 0, @"No Listens yet");
-
+
__block BOOL ready = NO;
FIRDatabaseQuery * aLim1 = [[ref child:@"a"] queryLimitedToLast:1];
FIRDatabaseHandle handle1 = [aLim1 observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -1756,11 +1756,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Single query");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
FIRDatabaseQuery * bLim1 = [[ref child:@"b"] queryLimitedToLast:1];
FIRDatabaseHandle handle2 = [bLim1 observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -1776,11 +1776,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Two queries");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
FIRDatabaseHandle handle3 = [ref observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
}];
@@ -1790,11 +1790,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Parent should override");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
// remove in slightly random order
[aLim1 removeObserverWithHandle:handle1];
ready = NO;
@@ -1804,11 +1804,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Parent should override");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
[ref removeObserverWithHandle:handle3];
ready = NO;
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
@@ -1819,11 +1819,11 @@
XCTAssertTrue([expected isEqualToSet:listens], @"Single query");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
[bLim1 removeObserverWithHandle:handle2];
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
@@ -1831,7 +1831,7 @@
XCTAssertTrue(listens.count == 0, @"No more listeners");
ready = YES;
});
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -1839,13 +1839,13 @@
-(void) testLimitWithMixOfNullAndNonNullPriorities {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
NSMutableArray* children = [[NSMutableArray alloc] init];
[[ref queryLimitedToLast:5] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
[children addObject:[snapshot key]];
}];
-
+
__block BOOL ready = NO;
NSDictionary* toSet = @{
@"Vikrum": @{@".priority": @1000, @"score": @1000, @"name": @"Vikrum"},
@@ -1855,23 +1855,23 @@
@"Sally": @{@".priority": @-7, @"score": @-7, @"name": @"Sally"},
@"Fred": @{@"score": @0, @"name": @"Fred"}
};
-
+
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSArray* expected = @[@"Sally", @"James", @"Andrew", @"Mike", @"Vikrum"];
XCTAssertTrue([children isEqualToArray:expected], @"Null priority should be left out");
-
+
}
-(void) testLimitWithMixOfNullAndNonNullPrioritiesOnServerData {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
NSDictionary* toSet = @{
@"Vikrum": @{@".priority": @1000, @"score": @1000, @"name": @"Vikrum"},
@@ -1881,15 +1881,15 @@
@"Sally": @{@".priority": @-7, @"score": @-7, @"name": @"Sally"},
@"Fred": @{@"score": @0, @"name": @"Fred"}
};
-
+
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
__block int count = 0;
NSMutableArray* children = [[NSMutableArray alloc] init];
@@ -1897,15 +1897,15 @@
[children addObject:[snapshot key]];
count++;
}];
-
+
[self waitUntil:^BOOL{
return count == 5;
}];
-
-
+
+
NSArray* expected = @[@"Sally", @"James", @"Andrew", @"Mike", @"Vikrum"];
XCTAssertTrue([children isEqualToArray:expected], @"Null priority should be left out");
-
+
}
// Skipping context tests. Context is not implemented on iOS
@@ -1915,9 +1915,9 @@
just the modified children? Not sure.
- (void) testHandleUpdateThatDeletesEntireWindow {
Firebase* ref = [FTestHelpers getRandomNode];
-
+
NSMutableArray* snaps = [[NSMutableArray alloc] init];
-
+
[[ref queryLimitedToLast:2] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
id val = [snapshot value];
if (val == nil) {
@@ -1926,25 +1926,25 @@
[snaps addObject:val];
}
}];
-
+
NSDictionary* toSet = @{
@"a": @{@".priority": @1, @".value": @1},
@"b": @{@".priority": @2, @".value": @2},
@"c": @{@".priority": @3, @".value": @3}
};
-
+
[ref setValue:toSet];
-
+
__block BOOL ready = NO;
toSet = @{@"b": [NSNull null], @"c": [NSNull null]};
[ref updateChildValues:toSet withCompletionBlock:^(NSError* err, Firebase* ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSArray* expected = @[@{@"b": @2, @"c": @3}, [NSNull null], @{@"a": @1}];
STAssertTrue([snaps isEqualToArray:expected], @"Expected %@ to equal %@", snaps, expected);
}
@@ -1952,41 +1952,41 @@
- (void) testHandlesAnOutOfViewQueryOnAChild {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block NSDictionary* parent = nil;
[[ref queryLimitedToLast:1] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
parent = [snapshot value];
}];
-
+
__block NSNumber* child = nil;
[[ref child:@"a"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
child = [snapshot value];
}];
-
+
__block BOOL ready = NO;
NSDictionary* toSet = @{@"a": @1, @"b": @2};
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSDictionary* parentExpected = @{@"b": @2};
NSNumber* childExpected = [NSNumber numberWithInt:1];
XCTAssertTrue([parent isEqualToDictionary:parentExpected], @"Expected last element");
XCTAssertTrue([child isEqualToNumber:childExpected], @"Expected value of a");
-
+
ready = NO;
[ref updateChildValues:@{@"c": @3} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
parentExpected = @{@"c": @3};
XCTAssertTrue([parent isEqualToDictionary:parentExpected], @"Expected last element");
XCTAssertTrue([child isEqualToNumber:childExpected], @"Expected value of a");
@@ -1994,50 +1994,50 @@
- (void) testHandlesAChildQueryGoingOutOfViewOfTheParent {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block NSDictionary* parent = nil;
[[ref queryLimitedToLast:1] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
parent = [snapshot value];
}];
-
+
__block NSNumber* child = nil;
[[ref child:@"a"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
child = [snapshot value];
}];
-
+
__block BOOL ready = NO;
NSDictionary* toSet = @{@"a": @1};
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
WAIT_FOR(ready);
-
+
NSDictionary* parentExpected = @{@"a": @1};
NSNumber* childExpected = [NSNumber numberWithInt:1];
XCTAssertTrue([parent isEqualToDictionary:parentExpected], @"Expected last element");
XCTAssertTrue([child isEqualToNumber:childExpected], @"Expected value of a");
-
+
ready = NO;
[[ref child:@"b"] setValue:@2 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
WAIT_FOR(ready);
-
+
parentExpected = @{@"b": @2};
XCTAssertTrue([parent isEqualToDictionary:parentExpected], @"Expected last element");
XCTAssertTrue([child isEqualToNumber:childExpected], @"Expected value of a");
-
+
ready = NO;
[[ref child:@"b"] removeValueWithCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
parentExpected = @{@"a": @1};
XCTAssertTrue([parent isEqualToDictionary:parentExpected], @"Expected last element");
XCTAssertTrue([child isEqualToNumber:childExpected], @"Expected value of a");
@@ -2045,7 +2045,7 @@
- (void) testHandlesDivergingViews {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block NSDictionary* cVal = nil;
FIRDatabaseQuery * query = [[[ref queryOrderedByPriority] queryEndingAtValue:nil childKey:@"c"] queryLimitedToLast:1];
[query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -2063,24 +2063,24 @@
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSDictionary* expected = @{@"c": @3};
XCTAssertTrue([cVal isEqualToDictionary:expected], @"should be c");
XCTAssertTrue([dVal isEqualToDictionary:expected], @"should be c");
-
+
ready = NO;
[[ref child:@"d"] setValue:@4 withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([cVal isEqualToDictionary:expected], @"should be c");
expected = @{@"d": @4};
XCTAssertTrue([dVal isEqualToDictionary:expected], @"should be d");
@@ -2088,7 +2088,7 @@
- (void) testHandlesRemovingAQueriedElement {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block NSNumber* val = nil;
[[ref queryLimitedToLast:1] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
id newVal = [snapshot value];
@@ -2096,27 +2096,27 @@
val = [snapshot value];
}
}];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([val isEqualToNumber:@2], @"Expected last element in window");
-
+
ready = NO;
[[ref child:@"b"] removeValueWithCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([val isEqualToNumber:@1], @"Should now be the next element in the window");
}
@@ -2131,16 +2131,16 @@
val = [snapshot value];
}
}];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([val isEqualToNumber:@1], @"Expected first element in window");
}
@@ -2156,50 +2156,50 @@
val = [snapshot value];
}
}];
-
+
__block BOOL ready = NO;
[ref setValue:@{@"a": @1, @"b": @2} withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([val isEqualToNumber:@1], @"Expected first element in window");
-
+
ready = NO;
[[ref child:@"a"] removeValueWithCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([val isEqualToNumber:@2], @"Expected next element in window");
}
// See case 1169
- (void) testStartAtWithTwoArgumentsWorks {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
NSMutableArray* children = [[NSMutableArray alloc] init];
-
+
NSDictionary* toSet = @{
@"Walker": @{@"name": @"Walker", @"score": @20, @".priority": @20},
@"Michael": @{@"name": @"Michael", @"score": @100, @".priority": @100}
};
-
+
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
FIRDatabaseQuery * query = [[[ref queryOrderedByPriority] queryStartingAtValue:@20 childKey:@"Walker"] queryLimitedToFirst:2];
[query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -2209,32 +2209,32 @@
}
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSArray* expected = @[@"Walker", @"Michael"];
XCTAssertTrue([children isEqualToArray:expected], @"Expected both children");
}
- (void) testHandlesMultipleQueriesOnSameNode {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
-
+
NSDictionary* toSet = @{
@"a": @1, @"b": @2, @"c": @3, @"d": @4, @"e": @5, @"f": @6
};
-
+
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
__block BOOL called = NO;
[[ref queryLimitedToLast:2] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -2243,11 +2243,11 @@
called = YES;
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
__block NSDictionary* snap = nil;
// now do nested once calls
@@ -2258,95 +2258,95 @@
ready = YES;
}];
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSDictionary* expected = @{@"f": @6};
XCTAssertTrue([snap isEqualToDictionary:expected], @"Expected the correct data");
}
- (void) testHandlesOnceCalledOnNodeWithDefaultListener {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
-
+
NSDictionary* toSet = @{
@"a": @1, @"b": @2, @"c": @3, @"d": @4, @"e": @5, @"f": @6
};
-
+
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
[ref observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
// we got the initial data
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
-
+
__block NSNumber* snap = nil;
[[ref queryLimitedToLast:1] observeSingleEventOfType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
snap = [snapshot value];
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
XCTAssertTrue([snap isEqualToNumber:@6], @"Got once response");
}
- (void) testHandlesOnceCalledOnNodeWithDefaultListenerAndNonCompleteLimit {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL ready = NO;
-
+
NSDictionary* toSet = @{@"a": @1, @"b": @2, @"c": @3};
-
+
[ref setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
// do first listen
[ref observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
-
+
__block NSDictionary* snap = nil;
[[ref queryLimitedToLast:5] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
snap = [snapshot value];
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
NSDictionary* expected = @{@"a": @1, @"b": @2, @"c": @3};
XCTAssertTrue([snap isEqualToDictionary:expected], @"Got once response");
}
@@ -2355,19 +2355,19 @@
FTupleFirebase* tuple = [FTestHelpers getRandomNodePair];
FIRDatabaseReference * writer = tuple.one;
FIRDatabaseReference * reader = tuple.two;
-
+
__block BOOL ready = NO;
-
+
NSDictionary* toSet = @{@"a": @"a", @"b": @"b", @"c": @"c", @"d": @"d", @"e": @"e"};
-
+
[writer setValue:toSet withCompletionBlock:^(NSError* err, FIRDatabaseReference * ref) {
ready = YES;
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
-
+
ready = NO;
__block int count = 0;
@@ -2386,7 +2386,7 @@
ready = YES;
}
}];
-
+
[self waitUntil:^BOOL{
return ready;
}];
@@ -2394,7 +2394,7 @@
- (void) testEndingAtNameReturnsCorrectChildren {
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
NSDictionary* toSet = @{
@"a": @"a",
@"b": @"b",
@@ -2633,9 +2633,9 @@
- (void) testItemsPulledIntoLimitCorrectly {
FIRDatabaseReference *ref = [FTestHelpers getRandomNode];
-
+
NSMutableArray* snaps = [[NSMutableArray alloc] init];
-
+
// Just so everything is cached locally.
[ref observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
@@ -2645,20 +2645,20 @@
id val = [snapshot value];
[snaps addObject:val];
}];
-
+
[ref setValue:@{
@"a": @{@".value": @1, @".priority": @1},
@"b": @{@".value": @2, @".priority": @2},
@"c": @{@".value": @3, @".priority": @3}
}];
-
+
__block BOOL ready = NO;
[[ref child:@"b"] setValue:[NSNull null] withCompletionBlock:^(NSError *error, FIRDatabaseReference *ref) {
ready = YES;
}];
WAIT_FOR(ready);
-
+
NSArray* expected = @[@{@"b": @2, @"c": @3}, @{@"a": @1, @"c": @3}];
XCTAssertEqualObjects(snaps, expected, @"Incorrect snapshots.");
}
@@ -2753,23 +2753,23 @@
// one-time listener. Event removal code path wasn't removing the listener because it stopped as soon as it
// found the default view. This left the zombie one-time listener and check failed on the second attempt to
// create a listener for the same path (asana#61028598952586).
-
+
FIRDatabaseReference * ref = [FTestHelpers getRandomNode];
-
+
__block BOOL done = NO;
-
+
[[ref child:@"child"] setValue:@{@"name": @"John"}];
[[[ref queryOrderedByChild:@"name"] queryEqualToValue:@"John"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
done = YES;
}];
WAIT_FOR(done);
-
+
done = NO;
[[[ref child:@"child"] child:@"favoriteToy"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
done = YES;
}];
WAIT_FOR(done);
-
+
done = NO;
[[[ref child:@"child"] child:@"favoriteToy"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
done = YES;