26
26
#import " FIRAuth.h"
27
27
#import " FIRAuthErrorUtils.h"
28
28
#import " FIRAuthGlobalWorkQueue.h"
29
- #import " FIRUser .h"
29
+ #import " FIRUser_Internal .h"
30
30
#import " FIRUserInfo.h"
31
31
#import " FIRAuthBackend.h"
32
32
#import " FIRGetAccountInfoRequest.h"
209
209
*/
210
210
static NSString *const kVerificationID = @" 55432" ;
211
211
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
+
212
217
/* * @var kExpectationTimeout
213
218
@brief The maximum time waiting for expectations to fulfill.
214
219
*/
@@ -257,10 +262,11 @@ - (void)tearDown {
257
262
258
263
#pragma mark - Tests
259
264
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.
262
268
*/
263
- - (void )testUserProperties {
269
+ - (void )testUserPropertiesAndNSSecureCoding {
264
270
// Mock auth provider user info for email/password for GetAccountInfo.
265
271
id mockPasswordUserInfo = OCMClassMock ([FIRGetAccountInfoResponseProviderUserInfo class ]);
266
272
OCMStub ([mockPasswordUserInfo providerID ]).andReturn (FIREmailAuthProviderID);
@@ -327,23 +333,20 @@ - (void)testUserProperties {
327
333
328
334
// Verify FIRUserInfo properties from email/password.
329
335
id <FIRUserInfo> passwordUserInfo = providerMap[FIREmailAuthProviderID];
330
- XCTAssertNotNil (passwordUserInfo);
331
336
XCTAssertEqualObjects (passwordUserInfo.uid , kEmail );
332
337
XCTAssertNil (passwordUserInfo.displayName );
333
338
XCTAssertNil (passwordUserInfo.photoURL );
334
339
XCTAssertEqualObjects (passwordUserInfo.email , kEmail );
335
340
336
341
// Verify FIRUserInfo properties from the Google auth provider.
337
342
id <FIRUserInfo> googleUserInfo = providerMap[FIRGoogleAuthProviderID];
338
- XCTAssertNotNil (googleUserInfo);
339
343
XCTAssertEqualObjects (googleUserInfo.uid , kGoogleID );
340
344
XCTAssertEqualObjects (googleUserInfo.displayName , kGoogleDisplayName );
341
345
XCTAssertEqualObjects (googleUserInfo.photoURL , [NSURL URLWithString: kGooglePhotoURL ]);
342
346
XCTAssertEqualObjects (googleUserInfo.email , kGoogleEmail );
343
347
344
348
// Verify FIRUserInfo properties from the Facebook auth provider.
345
349
id <FIRUserInfo> facebookUserInfo = providerMap[FIRFacebookAuthProviderID];
346
- XCTAssertNotNil (facebookUserInfo);
347
350
XCTAssertEqualObjects (facebookUserInfo.uid , kFacebookID );
348
351
XCTAssertNil (facebookUserInfo.displayName );
349
352
XCTAssertNil (facebookUserInfo.photoURL );
@@ -352,10 +355,62 @@ - (void)testUserProperties {
352
355
#if TARGET_OS_IOS
353
356
// Verify FIRUserInfo properties from the phone auth provider.
354
357
id <FIRUserInfo> phoneUserInfo = providerMap[FIRPhoneAuthProviderID];
355
- XCTAssertNotNil (phoneUserInfo);
356
358
XCTAssertEqualObjects (phoneUserInfo.phoneNumber , kPhoneNumber );
357
359
#endif
358
360
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
+
359
414
[expectation fulfill ];
360
415
}];
361
416
[self waitForExpectationsWithTimeout: kExpectationTimeout handler: nil ];
@@ -1540,7 +1595,6 @@ - (void)testlinkPhoneAuthCredentialFailure {
1540
1595
completion: ^(FIRAuthDataResult *_Nullable
1541
1596
linkAuthResult,
1542
1597
NSError *_Nullable error) {
1543
- XCTAssertNotNil (error);
1544
1598
XCTAssertEqual (error.code , FIRAuthErrorCodeProviderAlreadyLinked);
1545
1599
[expectation fulfill ];
1546
1600
}];
0 commit comments