@@ -427,6 +427,138 @@ class ParseObjectTests: XCTestCase { // swiftlint:disable:this type_body_length
427
427
XCTAssertThrowsError ( try score2. merge ( with: score) )
428
428
}
429
429
430
+ func testRevertObject( ) throws {
431
+ var score = GameScore ( points: 19 , name: " fire " )
432
+ score. objectId = " yolo "
433
+ var mutableScore = score. mergeable
434
+ mutableScore. points = 50
435
+ mutableScore. player = " ali "
436
+ XCTAssertNotEqual ( mutableScore, score)
437
+ try mutableScore. revertObject ( )
438
+ XCTAssertEqual ( mutableScore, score)
439
+ }
440
+
441
+ func testRevertObjectMissingOriginal( ) throws {
442
+ var score = GameScore ( points: 19 , name: " fire " )
443
+ score. objectId = " yolo "
444
+ var mutableScore = score
445
+ mutableScore. points = 50
446
+ mutableScore. player = " ali "
447
+ XCTAssertNotEqual ( mutableScore, score)
448
+ do {
449
+ try mutableScore. revertObject ( )
450
+ XCTFail ( " Should have thrown error " )
451
+ } catch {
452
+ guard let parseError = error as? ParseError else {
453
+ XCTFail ( " Should have casted " )
454
+ return
455
+ }
456
+ XCTAssertTrue ( parseError. message. contains ( " Missing original " ) )
457
+ }
458
+ }
459
+
460
+ func testRevertObjectDiffObjectId( ) throws {
461
+ var score = GameScore ( points: 19 , name: " fire " )
462
+ score. objectId = " yolo "
463
+ var mutableScore = score. mergeable
464
+ mutableScore. points = 50
465
+ mutableScore. player = " ali "
466
+ mutableScore. objectId = " nolo "
467
+ XCTAssertNotEqual ( mutableScore, score)
468
+ do {
469
+ try mutableScore. revertObject ( )
470
+ XCTFail ( " Should have thrown error " )
471
+ } catch {
472
+ guard let parseError = error as? ParseError else {
473
+ XCTFail ( " Should have casted " )
474
+ return
475
+ }
476
+ XCTAssertTrue ( parseError. message. contains ( " objectId as the original " ) )
477
+ }
478
+ }
479
+
480
+ func testRevertKeyPath( ) throws {
481
+ var score = GameScore ( points: 19 , name: " fire " )
482
+ score. objectId = " yolo "
483
+ var mutableScore = score. mergeable
484
+ mutableScore. points = 50
485
+ mutableScore. player = " ali "
486
+ XCTAssertNotEqual ( mutableScore, score)
487
+ try mutableScore. revertKeyPath ( \. player)
488
+ XCTAssertNotEqual ( mutableScore, score)
489
+ XCTAssertEqual ( mutableScore. objectId, score. objectId)
490
+ XCTAssertNotEqual ( mutableScore. points, score. points)
491
+ XCTAssertEqual ( mutableScore. player, score. player)
492
+ }
493
+
494
+ func testRevertKeyPathUpdatedNil( ) throws {
495
+ var score = GameScore ( points: 19 , name: " fire " )
496
+ score. objectId = " yolo "
497
+ var mutableScore = score. mergeable
498
+ mutableScore. points = 50
499
+ mutableScore. player = nil
500
+ XCTAssertNotEqual ( mutableScore, score)
501
+ try mutableScore. revertKeyPath ( \. player)
502
+ XCTAssertNotEqual ( mutableScore, score)
503
+ XCTAssertEqual ( mutableScore. objectId, score. objectId)
504
+ XCTAssertNotEqual ( mutableScore. points, score. points)
505
+ XCTAssertEqual ( mutableScore. player, score. player)
506
+ }
507
+
508
+ func testRevertKeyPathOriginalNil( ) throws {
509
+ var score = GameScore ( points: 19 , name: " fire " )
510
+ score. objectId = " yolo "
511
+ score. player = nil
512
+ var mutableScore = score. mergeable
513
+ mutableScore. points = 50
514
+ mutableScore. player = " ali "
515
+ XCTAssertNotEqual ( mutableScore, score)
516
+ try mutableScore. revertKeyPath ( \. player)
517
+ XCTAssertNotEqual ( mutableScore, score)
518
+ XCTAssertEqual ( mutableScore. objectId, score. objectId)
519
+ XCTAssertNotEqual ( mutableScore. points, score. points)
520
+ XCTAssertEqual ( mutableScore. player, score. player)
521
+ }
522
+
523
+ func testRevertKeyPathMissingOriginal( ) throws {
524
+ var score = GameScore ( points: 19 , name: " fire " )
525
+ score. objectId = " yolo "
526
+ var mutableScore = score
527
+ mutableScore. points = 50
528
+ mutableScore. player = " ali "
529
+ XCTAssertNotEqual ( mutableScore, score)
530
+ do {
531
+ try mutableScore. revertKeyPath ( \. player)
532
+ XCTFail ( " Should have thrown error " )
533
+ } catch {
534
+ guard let parseError = error as? ParseError else {
535
+ XCTFail ( " Should have casted " )
536
+ return
537
+ }
538
+ XCTAssertTrue ( parseError. message. contains ( " Missing original " ) )
539
+ }
540
+ }
541
+
542
+ func testRevertKeyPathDiffObjectId( ) throws {
543
+ var score = GameScore ( points: 19 , name: " fire " )
544
+ score. objectId = " yolo "
545
+ var mutableScore = score. mergeable
546
+ mutableScore. points = 50
547
+ mutableScore. player = " ali "
548
+ mutableScore. objectId = " nolo "
549
+ XCTAssertNotEqual ( mutableScore, score)
550
+ do {
551
+ try mutableScore. revertKeyPath ( \. player)
552
+ XCTFail ( " Should have thrown error " )
553
+ } catch {
554
+ guard let parseError = error as? ParseError else {
555
+ XCTFail ( " Should have casted " )
556
+ return
557
+ }
558
+ XCTAssertTrue ( parseError. message. contains ( " objectId as the original " ) )
559
+ }
560
+ }
561
+
430
562
func testFetchCommand( ) {
431
563
var score = GameScore ( points: 10 )
432
564
let className = score. className
0 commit comments