@@ -541,17 +541,82 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
541
541
XCTAssertEqual ( command. body? . email, email)
542
542
}
543
543
544
- func testSaveAndUpdateCurrentUser( ) { // swiftlint:disable:this function_body_length
544
+ func testSaveAndUpdateCurrentUser( ) throws { // swiftlint:disable:this function_body_length
545
545
XCTAssertNil ( User . current? . objectId)
546
- testLogin ( )
547
- MockURLProtocol . removeAll ( )
546
+ try userSignUp ( )
548
547
XCTAssertNotNil ( User . current? . objectId)
549
548
550
549
guard let user = User . current else {
551
550
XCTFail ( " Should unwrap " )
552
551
return
553
552
}
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
+ }
554
608
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
+
619
+ XCTAssertNotEqual ( User . current? . email, user. email)
555
620
var userOnServer = user
556
621
userOnServer. createdAt = User . current? . createdAt
557
622
userOnServer. updatedAt = User . current? . updatedAt? . addingTimeInterval ( + 300 )
@@ -572,6 +637,7 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
572
637
do {
573
638
let saved = try user. save ( options: [ . useMasterKey] )
574
639
XCTAssert ( saved. hasSameObjectId ( as: userOnServer) )
640
+ XCTAssertEqual ( saved. email, user. email)
575
641
guard let savedCreatedAt = saved. createdAt,
576
642
let savedUpdatedAt = saved. updatedAt else {
577
643
XCTFail ( " Should unwrap dates " )
@@ -588,6 +654,7 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
588
654
589
655
//Should be updated in memory
590
656
XCTAssertEqual ( User . current? . updatedAt, savedUpdatedAt)
657
+ XCTAssertEqual ( User . current? . email, user. email)
591
658
592
659
#if !os(Linux) && !os(Android)
593
660
//Should be updated in Keychain
@@ -597,24 +664,98 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
597
664
return
598
665
}
599
666
XCTAssertEqual ( keychainUser. currentUser? . updatedAt, savedUpdatedAt)
667
+ XCTAssertEqual ( keychainUser. currentUser? . email, user. email)
600
668
#endif
601
669
602
670
} catch {
603
671
XCTFail ( error. localizedDescription)
604
672
}
605
673
}
606
674
607
- func testSaveAsyncAndUpdateCurrentUser( ) { // swiftlint:disable:this function_body_length
675
+ func testSaveAsyncAndUpdateCurrentUser( ) throws { // swiftlint:disable:this function_body_length
608
676
XCTAssertNil ( User . current? . objectId)
609
- testLogin ( )
610
- MockURLProtocol . removeAll ( )
677
+ try userSignUp ( )
611
678
XCTAssertNotNil ( User . current? . objectId)
612
679
613
680
guard let user = User . current else {
614
681
XCTFail ( " Should unwrap " )
615
682
return
616
683
}
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
+ }
617
747
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
+
758
+ XCTAssertNotEqual ( User . current? . email, user. email)
618
759
var userOnServer = user
619
760
userOnServer. createdAt = User . current? . createdAt
620
761
userOnServer. updatedAt = User . current? . updatedAt? . addingTimeInterval ( + 300 )
@@ -636,10 +777,11 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
636
777
user. save ( options: [ ] , callbackQueue: . global( qos: . background) ) { result in
637
778
638
779
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 {
643
785
XCTFail ( " Should unwrap dates " )
644
786
expectation1. fulfill ( )
645
787
return
@@ -650,12 +792,13 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
650
792
expectation1. fulfill ( )
651
793
return
652
794
}
653
- XCTAssertEqual ( fetchedCreatedAt , originalCreatedAt)
654
- XCTAssertGreaterThan ( fetchedUpdatedAt , originalUpdatedAt)
655
- XCTAssertNil ( fetched . ACL)
795
+ XCTAssertEqual ( savedCreatedAt , originalCreatedAt)
796
+ XCTAssertGreaterThan ( savedUpdatedAt , originalUpdatedAt)
797
+ XCTAssertNil ( saved . ACL)
656
798
657
799
//Should be updated in memory
658
- XCTAssertEqual ( User . current? . updatedAt, fetchedUpdatedAt)
800
+ XCTAssertEqual ( User . current? . updatedAt, savedUpdatedAt)
801
+ XCTAssertEqual ( User . current? . email, user. email)
659
802
660
803
#if !os(Linux) && !os(Android)
661
804
//Should be updated in Keychain
@@ -664,7 +807,8 @@ class ParseUserTests: XCTestCase { // swiftlint:disable:this type_body_length
664
807
XCTFail ( " Should get object from Keychain " )
665
808
return
666
809
}
667
- XCTAssertEqual ( keychainUser. currentUser? . updatedAt, fetchedUpdatedAt)
810
+ XCTAssertEqual ( keychainUser. currentUser? . updatedAt, savedUpdatedAt)
811
+ XCTAssertEqual ( keychainUser. currentUser? . email, user. email)
668
812
#endif
669
813
670
814
case . failure( let error) :
0 commit comments