@@ -410,4 +410,36 @@ - (void)testFirebaseArrayCanMoveElementToStart {
410410 XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
411411}
412412
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+
413445@end
0 commit comments