aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/Auth/Tests/FIRUserTests.m
diff options
context:
space:
mode:
authorGravatar Zsika Phillip <protocol86@users.noreply.github.com>2017-06-07 14:32:02 -0700
committerGravatar GitHub <noreply@github.com>2017-06-07 14:32:02 -0700
commit58959a676ae3ca06593177407f59dff0b4117298 (patch)
tree21ab28dc586fe91828fcc603c4acb63cd9297b1b /Example/Auth/Tests/FIRUserTests.m
parentfa8a8f1d429ec238adbb6e9350fe4e91f47cd8cb (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.m72
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];
}];