@@ -483,6 +483,93 @@ class ParseInstallationTests: XCTestCase { // swiftlint:disable:this type_body_l
483
483
XCTAssertEqual ( merged, original)
484
484
}
485
485
486
+ @MainActor
487
+ func testMergeableRetainsAutomaticallyComputedProperties( ) async throws {
488
+ var original = try await Installation . current ( )
489
+ original. objectId = " yolo "
490
+ original. createdAt = Date ( )
491
+ original. updatedAt = Date ( )
492
+ original. badge = 10
493
+ original. deviceToken = " 12345 "
494
+ original. channels = [ " halo " ]
495
+ original. customKey = " newKey "
496
+ var acl = ParseACL ( )
497
+ acl. publicRead = true
498
+ original. ACL = acl
499
+
500
+ // These properties should not be nil before merge
501
+ XCTAssertNotNil ( original. customKey)
502
+ XCTAssertNotNil ( original. deviceType)
503
+ XCTAssertNotNil ( original. deviceToken)
504
+ XCTAssertNotNil ( original. channels)
505
+ XCTAssertNotNil ( original. installationId)
506
+ XCTAssertNotNil ( original. ACL)
507
+ XCTAssertNotNil ( original. updatedAt)
508
+
509
+ let mergeable = original. mergeable
510
+
511
+ // These should always remain in the merge
512
+ XCTAssertEqual ( original. badge, mergeable. badge)
513
+ XCTAssertEqual ( original. timeZone, mergeable. timeZone)
514
+ XCTAssertEqual ( original. appName, mergeable. appName)
515
+ XCTAssertEqual ( original. appVersion, mergeable. appVersion)
516
+ XCTAssertEqual ( original. appIdentifier, mergeable. appIdentifier)
517
+ XCTAssertEqual ( original. parseVersion, mergeable. parseVersion)
518
+ XCTAssertEqual ( original. localeIdentifier, mergeable. localeIdentifier)
519
+ XCTAssertEqual ( original. createdAt, mergeable. createdAt)
520
+
521
+ // All other properties should be nil
522
+ XCTAssertNil ( mergeable. customKey)
523
+ XCTAssertNil ( mergeable. deviceType)
524
+ XCTAssertNil ( mergeable. deviceToken)
525
+ XCTAssertNil ( mergeable. channels)
526
+ XCTAssertNil ( mergeable. installationId)
527
+ XCTAssertNil ( mergeable. ACL)
528
+ XCTAssertNil ( mergeable. updatedAt)
529
+ }
530
+
531
+ @MainActor
532
+ func testMergeableRetainsAllPropertiesWhenNotSaved( ) async throws {
533
+ var original = try await Installation . current ( )
534
+ original. badge = 10
535
+ original. deviceToken = " 12345 "
536
+ original. channels = [ " halo " ]
537
+ original. customKey = " newKey "
538
+ var acl = ParseACL ( )
539
+ acl. publicRead = true
540
+ original. ACL = acl
541
+
542
+ XCTAssertNil ( original. objectId)
543
+ XCTAssertNil ( original. createdAt)
544
+ XCTAssertNil ( original. updatedAt)
545
+
546
+ // These properties should not be nil before merge
547
+ XCTAssertNotNil ( original. customKey)
548
+ XCTAssertNotNil ( original. deviceType)
549
+ XCTAssertNotNil ( original. deviceToken)
550
+ XCTAssertNotNil ( original. channels)
551
+ XCTAssertNotNil ( original. installationId)
552
+ XCTAssertNotNil ( original. ACL)
553
+
554
+ let mergeable = original. mergeable
555
+
556
+ XCTAssertEqual ( original. badge, mergeable. badge)
557
+ XCTAssertEqual ( original. timeZone, mergeable. timeZone)
558
+ XCTAssertEqual ( original. appName, mergeable. appName)
559
+ XCTAssertEqual ( original. appVersion, mergeable. appVersion)
560
+ XCTAssertEqual ( original. appIdentifier, mergeable. appIdentifier)
561
+ XCTAssertEqual ( original. parseVersion, mergeable. parseVersion)
562
+ XCTAssertEqual ( original. localeIdentifier, mergeable. localeIdentifier)
563
+ XCTAssertEqual ( original. customKey, mergeable. customKey)
564
+ XCTAssertEqual ( original. deviceType, mergeable. deviceType)
565
+ XCTAssertEqual ( original. deviceToken, mergeable. deviceToken)
566
+ XCTAssertEqual ( original. channels, mergeable. channels)
567
+ XCTAssertEqual ( original. installationId, mergeable. installationId)
568
+ XCTAssertEqual ( original. ACL, mergeable. ACL)
569
+ XCTAssertEqual ( original. createdAt, mergeable. createdAt)
570
+ XCTAssertEqual ( original. updatedAt, mergeable. updatedAt)
571
+ }
572
+
486
573
@MainActor
487
574
func testMergeDifferentObjectId( ) async throws {
488
575
var installation = Installation ( )
0 commit comments