Skip to content

Commit 58959a6

Browse files
authored
Adds NSSecureCoding unit tests for FIRUser (#74)
* Adds unit tests for NSSecureCoding for FIRUser
1 parent fa8a8f1 commit 58959a6

File tree

1 file changed

+63
-9
lines changed

1 file changed

+63
-9
lines changed

Example/Auth/Tests/FIRUserTests.m

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#import "FIRAuth.h"
2727
#import "FIRAuthErrorUtils.h"
2828
#import "FIRAuthGlobalWorkQueue.h"
29-
#import "FIRUser.h"
29+
#import "FIRUser_Internal.h"
3030
#import "FIRUserInfo.h"
3131
#import "FIRAuthBackend.h"
3232
#import "FIRGetAccountInfoRequest.h"
@@ -209,6 +209,11 @@
209209
*/
210210
static NSString *const kVerificationID = @"55432";
211211

212+
/** @var kUserArchiverKey
213+
@brief The key used to archive and unarchive the user object for test NSSecureCoding.
214+
*/
215+
static NSString *const kUserArchiverKey = @"userArchiverKey";
216+
212217
/** @var kExpectationTimeout
213218
@brief The maximum time waiting for expectations to fulfill.
214219
*/
@@ -257,10 +262,11 @@ - (void)tearDown {
257262

258263
#pragma mark - Tests
259264

260-
/** @fn testUserProperties
261-
@brief Tests properties of the @c FIRUser instance.
265+
/** @fn testUserPropertiesAndNSSecureCoding
266+
@brief Tests properties of the @c FIRUser instance before and after being
267+
serialized/deserialized.
262268
*/
263-
- (void)testUserProperties {
269+
- (void)testUserPropertiesAndNSSecureCoding {
264270
// Mock auth provider user info for email/password for GetAccountInfo.
265271
id mockPasswordUserInfo = OCMClassMock([FIRGetAccountInfoResponseProviderUserInfo class]);
266272
OCMStub([mockPasswordUserInfo providerID]).andReturn(FIREmailAuthProviderID);
@@ -327,23 +333,20 @@ - (void)testUserProperties {
327333

328334
// Verify FIRUserInfo properties from email/password.
329335
id<FIRUserInfo> passwordUserInfo = providerMap[FIREmailAuthProviderID];
330-
XCTAssertNotNil(passwordUserInfo);
331336
XCTAssertEqualObjects(passwordUserInfo.uid, kEmail);
332337
XCTAssertNil(passwordUserInfo.displayName);
333338
XCTAssertNil(passwordUserInfo.photoURL);
334339
XCTAssertEqualObjects(passwordUserInfo.email, kEmail);
335340

336341
// Verify FIRUserInfo properties from the Google auth provider.
337342
id<FIRUserInfo> googleUserInfo = providerMap[FIRGoogleAuthProviderID];
338-
XCTAssertNotNil(googleUserInfo);
339343
XCTAssertEqualObjects(googleUserInfo.uid, kGoogleID);
340344
XCTAssertEqualObjects(googleUserInfo.displayName, kGoogleDisplayName);
341345
XCTAssertEqualObjects(googleUserInfo.photoURL, [NSURL URLWithString:kGooglePhotoURL]);
342346
XCTAssertEqualObjects(googleUserInfo.email, kGoogleEmail);
343347

344348
// Verify FIRUserInfo properties from the Facebook auth provider.
345349
id<FIRUserInfo> facebookUserInfo = providerMap[FIRFacebookAuthProviderID];
346-
XCTAssertNotNil(facebookUserInfo);
347350
XCTAssertEqualObjects(facebookUserInfo.uid, kFacebookID);
348351
XCTAssertNil(facebookUserInfo.displayName);
349352
XCTAssertNil(facebookUserInfo.photoURL);
@@ -352,10 +355,62 @@ - (void)testUserProperties {
352355
#if TARGET_OS_IOS
353356
// Verify FIRUserInfo properties from the phone auth provider.
354357
id<FIRUserInfo> phoneUserInfo = providerMap[FIRPhoneAuthProviderID];
355-
XCTAssertNotNil(phoneUserInfo);
356358
XCTAssertEqualObjects(phoneUserInfo.phoneNumber, kPhoneNumber);
357359
#endif
358360

361+
// Test NSSecureCoding
362+
XCTAssertTrue([FIRUser supportsSecureCoding]);
363+
NSMutableData *data = [NSMutableData data];
364+
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
365+
[archiver encodeObject:user forKey:kUserArchiverKey];
366+
[archiver finishEncoding];
367+
368+
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
369+
FIRUser *unarchivedUser = [unarchiver decodeObjectForKey:kUserArchiverKey];
370+
371+
// Verify NSSecureCoding for FIRUser
372+
XCTAssertEqualObjects(unarchivedUser.providerID, user.providerID);
373+
XCTAssertEqualObjects(unarchivedUser.uid, user.uid);
374+
XCTAssertEqualObjects(unarchivedUser.email, user.email);
375+
XCTAssertEqualObjects(unarchivedUser.photoURL, user.photoURL);
376+
XCTAssertEqualObjects(unarchivedUser.displayName, user.displayName);
377+
378+
// Verify NSSecureCoding properties besides providerData contents.
379+
XCTAssertEqual(unarchivedUser.anonymous, user.anonymous);
380+
XCTAssertEqual(unarchivedUser.emailVerified, user.emailVerified);
381+
XCTAssertEqualObjects(unarchivedUser.refreshToken, user.refreshToken);
382+
XCTAssertEqual(unarchivedUser.providerData.count, user.providerData.count);
383+
384+
NSDictionary<NSString *, id<FIRUserInfo>> *unarchivedProviderMap =
385+
[self dictionaryWithUserInfoArray:unarchivedUser.providerData];
386+
387+
// Verify NSSecureCoding properties from email/password.
388+
id<FIRUserInfo> unarchivedPasswordUserInfo = unarchivedProviderMap[FIREmailAuthProviderID];
389+
XCTAssertEqualObjects(unarchivedPasswordUserInfo.uid, passwordUserInfo.uid);
390+
XCTAssertEqualObjects(unarchivedPasswordUserInfo.displayName, passwordUserInfo.displayName);
391+
XCTAssertEqualObjects(unarchivedPasswordUserInfo.photoURL, passwordUserInfo.photoURL);
392+
XCTAssertEqualObjects(unarchivedPasswordUserInfo.email, passwordUserInfo.email);
393+
394+
// Verify NSSecureCoding properties from the Google auth provider.
395+
id<FIRUserInfo> unarchivedGoogleUserInfo = unarchivedProviderMap[FIRGoogleAuthProviderID];
396+
XCTAssertEqualObjects(unarchivedGoogleUserInfo.uid, googleUserInfo.uid);
397+
XCTAssertEqualObjects(unarchivedGoogleUserInfo.displayName, googleUserInfo.displayName);
398+
XCTAssertEqualObjects(unarchivedGoogleUserInfo.photoURL, googleUserInfo.photoURL);
399+
XCTAssertEqualObjects(unarchivedGoogleUserInfo.email, googleUserInfo.email);
400+
401+
// Verify NSSecureCoding properties from the Facebook auth provider.
402+
id<FIRUserInfo> unarchivedFacebookUserInfo = unarchivedProviderMap[FIRFacebookAuthProviderID];
403+
XCTAssertEqualObjects(unarchivedFacebookUserInfo.uid, facebookUserInfo.uid);
404+
XCTAssertEqualObjects(unarchivedFacebookUserInfo.displayName, facebookUserInfo.displayName);
405+
XCTAssertEqualObjects(unarchivedFacebookUserInfo.photoURL, facebookUserInfo.photoURL);
406+
XCTAssertEqualObjects(unarchivedFacebookUserInfo.email, facebookUserInfo.email);
407+
408+
#if TARGET_OS_IOS
409+
// Verify FIRUserInfo properties from the phone auth provider.
410+
id<FIRUserInfo> unarchivedPhoneUserInfo = unarchivedProviderMap[FIRPhoneAuthProviderID];
411+
XCTAssertEqualObjects(unarchivedPhoneUserInfo.phoneNumber, phoneUserInfo.phoneNumber);
412+
#endif
413+
359414
[expectation fulfill];
360415
}];
361416
[self waitForExpectationsWithTimeout:kExpectationTimeout handler:nil];
@@ -1540,7 +1595,6 @@ - (void)testlinkPhoneAuthCredentialFailure {
15401595
completion:^(FIRAuthDataResult *_Nullable
15411596
linkAuthResult,
15421597
NSError *_Nullable error) {
1543-
XCTAssertNotNil(error);
15441598
XCTAssertEqual(error.code, FIRAuthErrorCodeProviderAlreadyLinked);
15451599
[expectation fulfill];
15461600
}];

0 commit comments

Comments
 (0)