@@ -410,4 +410,36 @@ - (void)testFirebaseArrayCanMoveElementToStart {
410
410
XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
411
411
}
412
412
413
+ - (void )testFirebaseArrayMovesElementToStartWithNilPreviousKey {
414
+ [self .observable populateWithCount: 10 ];
415
+ self.snap .key = @" 6" ;
416
+
417
+ // Test delegate
418
+ __block BOOL delegateWasCalled = NO ;
419
+ __block BOOL expectedParametersWereCorrect = NO ;
420
+ self.arrayDelegate .didMoveObject = ^(FirebaseArray *array, id object, NSUInteger from, NSUInteger to) {
421
+ // Xcode complains about retain cycles if an XCTAssert is placed in here.
422
+ delegateWasCalled = YES ;
423
+ expectedParametersWereCorrect = (array == self.firebaseArray &&
424
+ object == self.snap &&
425
+ from == 6 && to == 0 );
426
+ };
427
+
428
+ // Move 8 to the start
429
+ [self .observable sendEvent: FIRDataEventTypeChildMoved withObject: self .snap previousKey: nil error: nil ];
430
+
431
+ // Array expectation
432
+ NSArray *items = self.firebaseArray .items ;
433
+ NSArray *expected = @[@" 6" , @" 0" , @" 1" , @" 2" , @" 3" , @" 4" , @" 5" , @" 7" , @" 8" , @" 9" ];
434
+ NSMutableArray *result = [NSMutableArray array ];
435
+ for (FUIFakeSnapshot *snapshot in items) {
436
+ [result addObject: snapshot.key];
437
+ }
438
+ XCTAssert ([result isEqual: expected], @" expected firebaseArray contents to equal %@ , got %@ " , expected, [result copy ]);
439
+
440
+ // Delegate expectations
441
+ XCTAssert (delegateWasCalled, @" expected delegate to receive callback for deletion" );
442
+ XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
443
+ }
444
+
413
445
@end
0 commit comments