@@ -483,6 +483,93 @@ class ParseInstallationTests: XCTestCase { // swiftlint:disable:this type_body_l
483483 XCTAssertEqual ( merged, original)
484484 }
485485
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+
486573 @MainActor
487574 func testMergeDifferentObjectId( ) async throws {
488575 var installation = Installation ( )
0 commit comments