@@ -427,6 +427,138 @@ class ParseObjectTests: XCTestCase { // swiftlint:disable:this type_body_length
427427 XCTAssertThrowsError ( try score2. merge ( with: score) )
428428 }
429429
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+
430562 func testFetchCommand( ) {
431563 var score = GameScore ( points: 10 )
432564 let className = score. className
0 commit comments