Skip to content

Commit 1230914

Browse files
committed
Improve testcases
1 parent e869252 commit 1230914

File tree

1 file changed

+159
-15
lines changed

1 file changed

+159
-15
lines changed

Tests/ParseSwiftTests/ParseUserTests.swift

Lines changed: 159 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -541,17 +541,82 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
541541
XCTAssertEqual(command.body?.email, email)
542542
}
543543

544-
func testSaveAndUpdateCurrentUser() { // swiftlint:disable:this function_body_length
544+
func testSaveAndUpdateCurrentUser() throws { // swiftlint:disable:this function_body_length
545545
XCTAssertNil(User.current?.objectId)
546-
testLogin()
547-
MockURLProtocol.removeAll()
546+
try userSignUp()
548547
XCTAssertNotNil(User.current?.objectId)
549548

550549
guard let user = User.current else {
551550
XCTFail("Should unwrap")
552551
return
553552
}
553+
XCTAssertNotNil(user.email)
554+
var userOnServer = user
555+
userOnServer.createdAt = User.current?.createdAt
556+
userOnServer.updatedAt = User.current?.updatedAt?.addingTimeInterval(+300)
557+
558+
let encoded: Data!
559+
do {
560+
encoded = try userOnServer.getEncoder().encode(userOnServer, skipKeys: .none)
561+
//Get dates in correct format from ParseDecoding strategy
562+
userOnServer = try userOnServer.getDecoder().decode(User.self, from: encoded)
563+
} catch {
564+
XCTFail("Should encode/decode. Error \(error)")
565+
return
566+
}
567+
MockURLProtocol.mockRequests { _ in
568+
return MockURLResponse(data: encoded, statusCode: 200, delay: 0.0)
569+
}
570+
571+
do {
572+
let saved = try user.save(options: [.useMasterKey])
573+
XCTAssert(saved.hasSameObjectId(as: userOnServer))
574+
XCTAssertEqual(saved.email, user.email)
575+
guard let savedCreatedAt = saved.createdAt,
576+
let savedUpdatedAt = saved.updatedAt else {
577+
XCTFail("Should unwrap dates")
578+
return
579+
}
580+
guard let originalCreatedAt = user.createdAt,
581+
let originalUpdatedAt = user.updatedAt else {
582+
XCTFail("Should unwrap dates")
583+
return
584+
}
585+
XCTAssertEqual(savedCreatedAt, originalCreatedAt)
586+
XCTAssertGreaterThan(savedUpdatedAt, originalUpdatedAt)
587+
XCTAssertNil(saved.ACL)
588+
589+
//Should be updated in memory
590+
XCTAssertEqual(User.current?.updatedAt, savedUpdatedAt)
591+
XCTAssertEqual(User.current?.email, user.email)
592+
593+
#if !os(Linux) && !os(Android)
594+
//Should be updated in Keychain
595+
guard let keychainUser: CurrentUserContainer<BaseParseUser>
596+
= try? KeychainStore.shared.get(valueFor: ParseStorage.Keys.currentUser) else {
597+
XCTFail("Should get object from Keychain")
598+
return
599+
}
600+
XCTAssertEqual(keychainUser.currentUser?.updatedAt, savedUpdatedAt)
601+
XCTAssertEqual(keychainUser.currentUser?.email, user.email)
602+
#endif
603+
604+
} catch {
605+
XCTFail(error.localizedDescription)
606+
}
607+
}
554608

609+
func testSaveAndUpdateCurrentUserModifiedEmail() throws { // swiftlint:disable:this function_body_length
610+
XCTAssertNil(User.current?.objectId)
611+
try userSignUp()
612+
XCTAssertNotNil(User.current?.objectId)
613+
614+
guard var user = User.current else {
615+
XCTFail("Should unwrap")
616+
return
617+
}
618+
user.email = "[email protected]"
619+
XCTAssertNotEqual(User.current?.email, user.email)
555620
var userOnServer = user
556621
userOnServer.createdAt = User.current?.createdAt
557622
userOnServer.updatedAt = User.current?.updatedAt?.addingTimeInterval(+300)
@@ -572,6 +637,7 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
572637
do {
573638
let saved = try user.save(options: [.useMasterKey])
574639
XCTAssert(saved.hasSameObjectId(as: userOnServer))
640+
XCTAssertEqual(saved.email, user.email)
575641
guard let savedCreatedAt = saved.createdAt,
576642
let savedUpdatedAt = saved.updatedAt else {
577643
XCTFail("Should unwrap dates")
@@ -588,6 +654,7 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
588654

589655
//Should be updated in memory
590656
XCTAssertEqual(User.current?.updatedAt, savedUpdatedAt)
657+
XCTAssertEqual(User.current?.email, user.email)
591658

592659
#if !os(Linux) && !os(Android)
593660
//Should be updated in Keychain
@@ -597,24 +664,98 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
597664
return
598665
}
599666
XCTAssertEqual(keychainUser.currentUser?.updatedAt, savedUpdatedAt)
667+
XCTAssertEqual(keychainUser.currentUser?.email, user.email)
600668
#endif
601669

602670
} catch {
603671
XCTFail(error.localizedDescription)
604672
}
605673
}
606674

607-
func testSaveAsyncAndUpdateCurrentUser() { // swiftlint:disable:this function_body_length
675+
func testSaveAsyncAndUpdateCurrentUser() throws { // swiftlint:disable:this function_body_length
608676
XCTAssertNil(User.current?.objectId)
609-
testLogin()
610-
MockURLProtocol.removeAll()
677+
try userSignUp()
611678
XCTAssertNotNil(User.current?.objectId)
612679

613680
guard let user = User.current else {
614681
XCTFail("Should unwrap")
615682
return
616683
}
684+
XCTAssertNotNil(user.email)
685+
var userOnServer = user
686+
userOnServer.createdAt = User.current?.createdAt
687+
userOnServer.updatedAt = User.current?.updatedAt?.addingTimeInterval(+300)
688+
689+
let encoded: Data!
690+
do {
691+
encoded = try userOnServer.getEncoder().encode(userOnServer, skipKeys: .none)
692+
//Get dates in correct format from ParseDecoding strategy
693+
userOnServer = try userOnServer.getDecoder().decode(User.self, from: encoded)
694+
} catch {
695+
XCTFail("Should encode/decode. Error \(error)")
696+
return
697+
}
698+
MockURLProtocol.mockRequests { _ in
699+
return MockURLResponse(data: encoded, statusCode: 200, delay: 0.0)
700+
}
701+
702+
let expectation1 = XCTestExpectation(description: "Fetch user1")
703+
user.save(options: [], callbackQueue: .global(qos: .background)) { result in
704+
705+
switch result {
706+
case .success(let saved):
707+
XCTAssert(saved.hasSameObjectId(as: userOnServer))
708+
XCTAssertEqual(saved.email, user.email)
709+
guard let savedCreatedAt = saved.createdAt,
710+
let savedUpdatedAt = saved.updatedAt else {
711+
XCTFail("Should unwrap dates")
712+
expectation1.fulfill()
713+
return
714+
}
715+
guard let originalCreatedAt = user.createdAt,
716+
let originalUpdatedAt = user.updatedAt else {
717+
XCTFail("Should unwrap dates")
718+
expectation1.fulfill()
719+
return
720+
}
721+
XCTAssertEqual(savedCreatedAt, originalCreatedAt)
722+
XCTAssertGreaterThan(savedUpdatedAt, originalUpdatedAt)
723+
XCTAssertNil(saved.ACL)
724+
725+
//Should be updated in memory
726+
XCTAssertEqual(User.current?.updatedAt, savedUpdatedAt)
727+
XCTAssertEqual(User.current?.email, user.email)
728+
729+
#if !os(Linux) && !os(Android)
730+
//Should be updated in Keychain
731+
guard let keychainUser: CurrentUserContainer<BaseParseUser>
732+
= try? KeychainStore.shared.get(valueFor: ParseStorage.Keys.currentUser) else {
733+
XCTFail("Should get object from Keychain")
734+
return
735+
}
736+
XCTAssertEqual(keychainUser.currentUser?.updatedAt, savedUpdatedAt)
737+
XCTAssertEqual(keychainUser.currentUser?.email, user.email)
738+
#endif
739+
740+
case .failure(let error):
741+
XCTFail(error.localizedDescription)
742+
}
743+
expectation1.fulfill()
744+
}
745+
wait(for: [expectation1], timeout: 20.0)
746+
}
617747

748+
func testSaveAsyncAndUpdateCurrentUserModifiedEmail() throws { // swiftlint:disable:this function_body_length
749+
XCTAssertNil(User.current?.objectId)
750+
try userSignUp()
751+
XCTAssertNotNil(User.current?.objectId)
752+
753+
guard var user = User.current else {
754+
XCTFail("Should unwrap")
755+
return
756+
}
757+
user.email = "[email protected]"
758+
XCTAssertNotEqual(User.current?.email, user.email)
618759
var userOnServer = user
619760
userOnServer.createdAt = User.current?.createdAt
620761
userOnServer.updatedAt = User.current?.updatedAt?.addingTimeInterval(+300)
@@ -636,10 +777,11 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
636777
user.save(options: [], callbackQueue: .global(qos: .background)) { result in
637778

638779
switch result {
639-
case .success(let fetched):
640-
XCTAssert(fetched.hasSameObjectId(as: userOnServer))
641-
guard let fetchedCreatedAt = fetched.createdAt,
642-
let fetchedUpdatedAt = fetched.updatedAt else {
780+
case .success(let saved):
781+
XCTAssert(saved.hasSameObjectId(as: userOnServer))
782+
XCTAssertEqual(saved.email, user.email)
783+
guard let savedCreatedAt = saved.createdAt,
784+
let savedUpdatedAt = saved.updatedAt else {
643785
XCTFail("Should unwrap dates")
644786
expectation1.fulfill()
645787
return
@@ -650,12 +792,13 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
650792
expectation1.fulfill()
651793
return
652794
}
653-
XCTAssertEqual(fetchedCreatedAt, originalCreatedAt)
654-
XCTAssertGreaterThan(fetchedUpdatedAt, originalUpdatedAt)
655-
XCTAssertNil(fetched.ACL)
795+
XCTAssertEqual(savedCreatedAt, originalCreatedAt)
796+
XCTAssertGreaterThan(savedUpdatedAt, originalUpdatedAt)
797+
XCTAssertNil(saved.ACL)
656798

657799
//Should be updated in memory
658-
XCTAssertEqual(User.current?.updatedAt, fetchedUpdatedAt)
800+
XCTAssertEqual(User.current?.updatedAt, savedUpdatedAt)
801+
XCTAssertEqual(User.current?.email, user.email)
659802

660803
#if !os(Linux) && !os(Android)
661804
//Should be updated in Keychain
@@ -664,7 +807,8 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
664807
XCTFail("Should get object from Keychain")
665808
return
666809
}
667-
XCTAssertEqual(keychainUser.currentUser?.updatedAt, fetchedUpdatedAt)
810+
XCTAssertEqual(keychainUser.currentUser?.updatedAt, savedUpdatedAt)
811+
XCTAssertEqual(keychainUser.currentUser?.email, user.email)
668812
#endif
669813

670814
case .failure(let error):

0 commit comments

Comments
 (0)