@@ -427,6 +427,109 @@ 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 testRevertKeyPathMissingOriginal( ) throws {
495+ var score = GameScore ( points: 19 , name: " fire " )
496+ score. objectId = " yolo "
497+ var mutableScore = score
498+ mutableScore. points = 50
499+ mutableScore. player = " ali "
500+ XCTAssertNotEqual ( mutableScore, score)
501+ do {
502+ try mutableScore. revertKeyPath ( \. player)
503+ XCTFail ( " Should have thrown error " )
504+ } catch {
505+ guard let parseError = error as? ParseError else {
506+ XCTFail ( " Should have casted " )
507+ return
508+ }
509+ XCTAssertTrue ( parseError. message. contains ( " Missing original " ) )
510+ }
511+ }
512+
513+ func testRevertKeyPathDiffObjectId( ) throws {
514+ var score = GameScore ( points: 19 , name: " fire " )
515+ score. objectId = " yolo "
516+ var mutableScore = score. mergeable
517+ mutableScore. points = 50
518+ mutableScore. player = " ali "
519+ mutableScore. objectId = " nolo "
520+ XCTAssertNotEqual ( mutableScore, score)
521+ do {
522+ try mutableScore. revertKeyPath ( \. player)
523+ XCTFail ( " Should have thrown error " )
524+ } catch {
525+ guard let parseError = error as? ParseError else {
526+ XCTFail ( " Should have casted " )
527+ return
528+ }
529+ XCTAssertTrue ( parseError. message. contains ( " objectId as the original " ) )
530+ }
531+ }
532+
430533 func testFetchCommand( ) {
431534 var score = GameScore ( points: 10 )
432535 let className = score. className
0 commit comments