diff options
author | Zsika Phillip <protocol86@users.noreply.github.com> | 2017-06-07 14:32:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-07 14:32:02 -0700 |
commit | 58959a676ae3ca06593177407f59dff0b4117298 (patch) | |
tree | 21ab28dc586fe91828fcc603c4acb63cd9297b1b /Example/Auth/Tests/FIRUserTests.m | |
parent | fa8a8f1d429ec238adbb6e9350fe4e91f47cd8cb (diff) |
Adds NSSecureCoding unit tests for FIRUser (#74)
* Adds unit tests for NSSecureCoding for FIRUser
Diffstat (limited to 'Example/Auth/Tests/FIRUserTests.m')
-rw-r--r-- | Example/Auth/Tests/FIRUserTests.m | 72 |
1 files changed, 63 insertions, 9 deletions
diff --git a/Example/Auth/Tests/FIRUserTests.m b/Example/Auth/Tests/FIRUserTests.m index efb7c1b..7e396c2 100644 --- a/Example/Auth/Tests/FIRUserTests.m +++ b/Example/Auth/Tests/FIRUserTests.m @@ -26,7 +26,7 @@ #import "FIRAuth.h" #import "FIRAuthErrorUtils.h" #import "FIRAuthGlobalWorkQueue.h" -#import "FIRUser.h" +#import "FIRUser_Internal.h" #import "FIRUserInfo.h" #import "FIRAuthBackend.h" #import "FIRGetAccountInfoRequest.h" @@ -209,6 +209,11 @@ static NSString *const kVerificationCode = @"12345678"; */ static NSString *const kVerificationID = @"55432"; +/** @var kUserArchiverKey + @brief The key used to archive and unarchive the user object for test NSSecureCoding. + */ +static NSString *const kUserArchiverKey = @"userArchiverKey"; + /** @var kExpectationTimeout @brief The maximum time waiting for expectations to fulfill. */ @@ -257,10 +262,11 @@ static const NSTimeInterval kExpectationTimeout = 1; #pragma mark - Tests -/** @fn testUserProperties - @brief Tests properties of the @c FIRUser instance. +/** @fn testUserPropertiesAndNSSecureCoding + @brief Tests properties of the @c FIRUser instance before and after being + serialized/deserialized. */ -- (void)testUserProperties { +- (void)testUserPropertiesAndNSSecureCoding { // Mock auth provider user info for email/password for GetAccountInfo. id mockPasswordUserInfo = OCMClassMock([FIRGetAccountInfoResponseProviderUserInfo class]); OCMStub([mockPasswordUserInfo providerID]).andReturn(FIREmailAuthProviderID); @@ -327,7 +333,6 @@ static const NSTimeInterval kExpectationTimeout = 1; // Verify FIRUserInfo properties from email/password. id<FIRUserInfo> passwordUserInfo = providerMap[FIREmailAuthProviderID]; - XCTAssertNotNil(passwordUserInfo); XCTAssertEqualObjects(passwordUserInfo.uid, kEmail); XCTAssertNil(passwordUserInfo.displayName); XCTAssertNil(passwordUserInfo.photoURL); @@ -335,7 +340,6 @@ static const NSTimeInterval kExpectationTimeout = 1; // Verify FIRUserInfo properties from the Google auth provider. id<FIRUserInfo> googleUserInfo = providerMap[FIRGoogleAuthProviderID]; - XCTAssertNotNil(googleUserInfo); XCTAssertEqualObjects(googleUserInfo.uid, kGoogleID); XCTAssertEqualObjects(googleUserInfo.displayName, kGoogleDisplayName); XCTAssertEqualObjects(googleUserInfo.photoURL, [NSURL URLWithString:kGooglePhotoURL]); @@ -343,7 +347,6 @@ static const NSTimeInterval kExpectationTimeout = 1; // Verify FIRUserInfo properties from the Facebook auth provider. id<FIRUserInfo> facebookUserInfo = providerMap[FIRFacebookAuthProviderID]; - XCTAssertNotNil(facebookUserInfo); XCTAssertEqualObjects(facebookUserInfo.uid, kFacebookID); XCTAssertNil(facebookUserInfo.displayName); XCTAssertNil(facebookUserInfo.photoURL); @@ -352,10 +355,62 @@ static const NSTimeInterval kExpectationTimeout = 1; #if TARGET_OS_IOS // Verify FIRUserInfo properties from the phone auth provider. id<FIRUserInfo> phoneUserInfo = providerMap[FIRPhoneAuthProviderID]; - XCTAssertNotNil(phoneUserInfo); XCTAssertEqualObjects(phoneUserInfo.phoneNumber, kPhoneNumber); #endif + // Test NSSecureCoding + XCTAssertTrue([FIRUser supportsSecureCoding]); + NSMutableData *data = [NSMutableData data]; + NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; + [archiver encodeObject:user forKey:kUserArchiverKey]; + [archiver finishEncoding]; + + NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; + FIRUser *unarchivedUser = [unarchiver decodeObjectForKey:kUserArchiverKey]; + + // Verify NSSecureCoding for FIRUser + XCTAssertEqualObjects(unarchivedUser.providerID, user.providerID); + XCTAssertEqualObjects(unarchivedUser.uid, user.uid); + XCTAssertEqualObjects(unarchivedUser.email, user.email); + XCTAssertEqualObjects(unarchivedUser.photoURL, user.photoURL); + XCTAssertEqualObjects(unarchivedUser.displayName, user.displayName); + + // Verify NSSecureCoding properties besides providerData contents. + XCTAssertEqual(unarchivedUser.anonymous, user.anonymous); + XCTAssertEqual(unarchivedUser.emailVerified, user.emailVerified); + XCTAssertEqualObjects(unarchivedUser.refreshToken, user.refreshToken); + XCTAssertEqual(unarchivedUser.providerData.count, user.providerData.count); + + NSDictionary<NSString *, id<FIRUserInfo>> *unarchivedProviderMap = + [self dictionaryWithUserInfoArray:unarchivedUser.providerData]; + + // Verify NSSecureCoding properties from email/password. + id<FIRUserInfo> unarchivedPasswordUserInfo = unarchivedProviderMap[FIREmailAuthProviderID]; + XCTAssertEqualObjects(unarchivedPasswordUserInfo.uid, passwordUserInfo.uid); + XCTAssertEqualObjects(unarchivedPasswordUserInfo.displayName, passwordUserInfo.displayName); + XCTAssertEqualObjects(unarchivedPasswordUserInfo.photoURL, passwordUserInfo.photoURL); + XCTAssertEqualObjects(unarchivedPasswordUserInfo.email, passwordUserInfo.email); + + // Verify NSSecureCoding properties from the Google auth provider. + id<FIRUserInfo> unarchivedGoogleUserInfo = unarchivedProviderMap[FIRGoogleAuthProviderID]; + XCTAssertEqualObjects(unarchivedGoogleUserInfo.uid, googleUserInfo.uid); + XCTAssertEqualObjects(unarchivedGoogleUserInfo.displayName, googleUserInfo.displayName); + XCTAssertEqualObjects(unarchivedGoogleUserInfo.photoURL, googleUserInfo.photoURL); + XCTAssertEqualObjects(unarchivedGoogleUserInfo.email, googleUserInfo.email); + + // Verify NSSecureCoding properties from the Facebook auth provider. + id<FIRUserInfo> unarchivedFacebookUserInfo = unarchivedProviderMap[FIRFacebookAuthProviderID]; + XCTAssertEqualObjects(unarchivedFacebookUserInfo.uid, facebookUserInfo.uid); + XCTAssertEqualObjects(unarchivedFacebookUserInfo.displayName, facebookUserInfo.displayName); + XCTAssertEqualObjects(unarchivedFacebookUserInfo.photoURL, facebookUserInfo.photoURL); + XCTAssertEqualObjects(unarchivedFacebookUserInfo.email, facebookUserInfo.email); + + #if TARGET_OS_IOS + // Verify FIRUserInfo properties from the phone auth provider. + id<FIRUserInfo> unarchivedPhoneUserInfo = unarchivedProviderMap[FIRPhoneAuthProviderID]; + XCTAssertEqualObjects(unarchivedPhoneUserInfo.phoneNumber, phoneUserInfo.phoneNumber); + #endif + [expectation fulfill]; }]; [self waitForExpectationsWithTimeout:kExpectationTimeout handler:nil]; @@ -1540,7 +1595,6 @@ static const NSTimeInterval kExpectationTimeout = 1; completion:^(FIRAuthDataResult *_Nullable linkAuthResult, NSError *_Nullable error) { - XCTAssertNotNil(error); XCTAssertEqual(error.code, FIRAuthErrorCodeProviderAlreadyLinked); [expectation fulfill]; }]; |