@@ -378,4 +378,68 @@ - (void)testFirebaseArrayCanMoveElement {
378
378
XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
379
379
}
380
380
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
+
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
+
381
445
@end
0 commit comments