Skip to content

Commit 3dffe0e

Browse files
authored
User meta data (firebase#292)
* Add user metadata * Small improvements * Addresses comments * Fixes broken tests Adds FIRUserMetadata to unbrella file.
1 parent ce42a14 commit 3dffe0e

File tree

12 files changed

+330
-37
lines changed

12 files changed

+330
-37
lines changed

Example/Auth/Sample/UserInfoViewController.m

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#import "FIRUser.h"
2020
#import "FIRUserInfo.h"
21+
#import "FIRUserMetadata.h"
2122
#import "StaticContentTableViewManager.h"
2223

2324
/** @fn stringWithBool
@@ -29,6 +30,20 @@
2930
return boolValue ? @"YES" : @"NO";
3031
}
3132

33+
/** @fn stringFromDate
34+
@brief Converts a NSDate va to a string for display.
35+
@param date The NSDate instance.
36+
@return The string form of the NSDate instance.
37+
*/
38+
static NSString *stringFromDate(NSDate *date) {
39+
if (!date) {
40+
return @"nil";
41+
}
42+
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
43+
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
44+
return [dateFormatter stringFromDate:date];
45+
}
46+
3247
@implementation UserInfoViewController {
3348
FIRUser *_user;
3449
}
@@ -50,6 +65,10 @@ - (void)loadTableView {
5065
NSMutableArray<StaticContentTableViewSection *> *sections = [@[
5166
[StaticContentTableViewSection sectionWithTitle:@"User" cells:@[
5267
[StaticContentTableViewCell cellWithTitle:@"anonymous" value:stringWithBool(_user.anonymous)],
68+
[StaticContentTableViewCell cellWithTitle:@"Creation date"
69+
value:stringFromDate(_user.metadata.creationDate)],
70+
[StaticContentTableViewCell cellWithTitle:@"Last sign in date"
71+
value:stringFromDate(_user.metadata.lastSignInDate)],
5372
[StaticContentTableViewCell cellWithTitle:@"emailVerified"
5473
value:stringWithBool(_user.emailVerified)],
5574
[StaticContentTableViewCell cellWithTitle:@"refreshToken" value:_user.refreshToken],
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* Copyright 2017 Google
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#import <XCTest/XCTest.h>
18+
19+
#import "FIRUserMetadata_Internal.h"
20+
21+
/** @var kCreationDateInSeconds
22+
@brief The fake creation date.
23+
*/
24+
static NSTimeInterval const kCreationDateTimeIntervalInSeconds = 1505858500;
25+
26+
/** @var kLastSignInDateTimeIntervalInSeconds
27+
@brief The fake last sign in date date.
28+
*/
29+
static NSTimeInterval const kLastSignInDateTimeIntervalInSeconds = 1505858583;
30+
31+
/** @class FIRUserMetadataTests
32+
@brief Tests for @c FIRUserMetadata.
33+
*/
34+
@interface FIRUserMetadataTests : XCTestCase
35+
36+
@end
37+
38+
@implementation FIRUserMetadataTests
39+
40+
/** @fn testUserMetadataCreation
41+
@brief Tests succuessful creation of a @c FIRUserMetadata object.
42+
*/
43+
- (void)testUserMetadataCreation {
44+
NSDate *creationDate = [NSDate dateWithTimeIntervalSince1970:kCreationDateTimeIntervalInSeconds];
45+
NSDate *lastSignInDate =
46+
[NSDate dateWithTimeIntervalSince1970:kLastSignInDateTimeIntervalInSeconds];
47+
FIRUserMetadata *userMetadata =
48+
[[FIRUserMetadata alloc]initWithCreationDate:creationDate lastSignInDate:lastSignInDate];
49+
XCTAssertEqualObjects(userMetadata.creationDate, creationDate);
50+
XCTAssertEqualObjects(userMetadata.lastSignInDate, lastSignInDate);
51+
}
52+
53+
/** @fn testUserMetadataCoding
54+
@brief Tests succuessful archiving and unarchiving of a @c FIRUserMetadata object.
55+
*/
56+
- (void)testUserMetadataCoding {
57+
NSDate *creationDate = [NSDate dateWithTimeIntervalSince1970:kCreationDateTimeIntervalInSeconds];
58+
NSDate *lastSignInDate =
59+
[NSDate dateWithTimeIntervalSince1970:kLastSignInDateTimeIntervalInSeconds];
60+
FIRUserMetadata *userMetadata =
61+
[[FIRUserMetadata alloc]initWithCreationDate:creationDate lastSignInDate:lastSignInDate];
62+
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:userMetadata];
63+
XCTAssertNotNil(data, @"Should not be nil if archving succeeded.");
64+
XCTAssertNoThrow([NSKeyedUnarchiver unarchiveObjectWithData:data],
65+
@"Unarchiving should not throw an exception");
66+
FIRUserMetadata *unArchivedUserMetadata = [NSKeyedUnarchiver unarchiveObjectWithData:data];
67+
XCTAssertTrue([unArchivedUserMetadata isKindOfClass:[FIRUserMetadata class]]);
68+
XCTAssertEqualObjects(unArchivedUserMetadata.creationDate, creationDate);
69+
XCTAssertEqualObjects(unArchivedUserMetadata.lastSignInDate, lastSignInDate);
70+
}
71+
72+
@end

Example/Auth/Tests/FIRUserTests.m

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,15 @@
2525
#import "FirebaseCommunity/FIRAdditionalUserInfo.h"
2626
#import "FirebaseCommunity/FIRAuth.h"
2727
#import "FIRAuthErrorUtils.h"
28-
#import "FIRAuthGlobalWorkQueue.h"
29-
#import "FIRUser_Internal.h"
30-
#import "FIRUserInfo.h"
3128
#import "FIRAuthBackend.h"
29+
#import "FIRAuthGlobalWorkQueue.h"
3230
#import "FIRGetAccountInfoRequest.h"
3331
#import "FIRGetAccountInfoResponse.h"
3432
#import "FIRSetAccountInfoRequest.h"
3533
#import "FIRSetAccountInfoResponse.h"
34+
#import "FIRUser_Internal.h"
35+
#import "FIRUserInfo.h"
36+
#import "FIRUserMetadata.h"
3637
#import "FIRVerifyAssertionResponse.h"
3738
#import "FIRVerifyAssertionRequest.h"
3839
#import "FIRVerifyPasswordRequest.h"
@@ -215,6 +216,16 @@
215216
*/
216217
static NSString *const kUserArchiverKey = @"userArchiverKey";
217218

219+
/** @var kCreationDateInSeconds
220+
@brief The fake creation date.
221+
*/
222+
static NSTimeInterval const kCreationDateTimeIntervalInSeconds = 1505858500;
223+
224+
/** @var kLastSignInDateTimeIntervalInSeconds
225+
@brief The fake last sign in date date.
226+
*/
227+
static NSTimeInterval const kLastSignInDateTimeIntervalInSeconds = 1505858583;
228+
218229
/** @var kExpectationTimeout
219230
@brief The maximum time waiting for expectations to fulfill.
220231
*/
@@ -302,6 +313,10 @@ - (void)testUserPropertiesAndNSSecureCoding {
302313
OCMStub([mockGetAccountInfoResponseUser emailVerified]).andReturn(YES);
303314
OCMStub([mockGetAccountInfoResponseUser displayName]).andReturn(kGoogleDisplayName);
304315
OCMStub([mockGetAccountInfoResponseUser photoURL]).andReturn([NSURL URLWithString:kPhotoURL]);
316+
OCMStub([mockGetAccountInfoResponseUser creationDate]).
317+
andReturn([NSDate dateWithTimeIntervalSince1970:kCreationDateTimeIntervalInSeconds]);
318+
OCMStub([mockGetAccountInfoResponseUser lastLoginDate]).
319+
andReturn([NSDate dateWithTimeIntervalSince1970:kLastSignInDateTimeIntervalInSeconds]);
305320
NSArray *providerUserInfos = @[
306321
#if TARGET_OS_IOS
307322
mockPhoneUserInfo,
@@ -322,6 +337,10 @@ - (void)testUserPropertiesAndNSSecureCoding {
322337
XCTAssertEqualObjects(user.displayName, kGoogleDisplayName);
323338
XCTAssertEqualObjects(user.photoURL, [NSURL URLWithString:kPhotoURL]);
324339
XCTAssertEqualObjects(user.email, kEmail);
340+
XCTAssertEqualObjects(user.metadata.creationDate,
341+
[NSDate dateWithTimeIntervalSince1970:kCreationDateTimeIntervalInSeconds]);
342+
XCTAssertEqualObjects(user.metadata.lastSignInDate,
343+
[NSDate dateWithTimeIntervalSince1970:kLastSignInDateTimeIntervalInSeconds]);
325344

326345
// Verify FIRUser properties besides providerData contents.
327346
XCTAssertFalse(user.anonymous);

0 commit comments

Comments
 (0)