@@ -378,4 +378,36 @@ - (void)testFirebaseArrayCanMoveElement {
378378 XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
379379}
380380
381+ - (void )testFirebaseArrayCanMoveElementToStart {
382+ [self .observable populateWithCount: 10 ];
383+ self.snap .key = @" 8" ;
384+
385+ // Test delegate
386+ __block BOOL delegateWasCalled = NO ;
387+ __block BOOL expectedParametersWereCorrect = NO ;
388+ self.arrayDelegate .didMoveObject = ^(FirebaseArray *array, id object, NSUInteger from, NSUInteger to) {
389+ // Xcode complains about retain cycles if an XCTAssert is placed in here.
390+ delegateWasCalled = YES ;
391+ expectedParametersWereCorrect = (array == self.firebaseArray &&
392+ object == self.snap &&
393+ from == 8 && to == 0 );
394+ };
395+
396+ // Move 8 to the start
397+ [self .observable sendEvent: FIRDataEventTypeChildMoved withObject: self .snap previousKey: @" " error: nil ];
398+
399+ // Array expectation
400+ NSArray *items = self.firebaseArray .items ;
401+ NSArray *expected = @[@" 8" , @" 0" , @" 1" , @" 2" , @" 3" , @" 4" , @" 5" , @" 6" , @" 7" , @" 9" ];
402+ NSMutableArray *result = [NSMutableArray array ];
403+ for (FUIFakeSnapshot *snapshot in items) {
404+ [result addObject: snapshot.key];
405+ }
406+ XCTAssert ([result isEqual: expected], @" expected firebaseArray contents to equal %@ , got %@ " , expected, [result copy ]);
407+
408+ // Delegate expectations
409+ XCTAssert (delegateWasCalled, @" expected delegate to receive callback for deletion" );
410+ XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
411+ }
412+
381413@end
0 commit comments