Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 22 additions & 25 deletions GoogleSignIn/Tests/Unit/GIDGoogleUserTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,8 @@
static NSString *const kNewRefreshToken = @"new_refresh_token";

static NSTimeInterval const kTimeAccuracy = 10;
// The difference between times.
// It should be larger than kTimeAccuracy which is used in the method `XCTAssertEqualWithAccuracy`.
static NSTimeInterval const kTimeIncrement = 100;
static NSTimeInterval const kIDTokenExpiresIn = 100;
static NSTimeInterval const kNewIDTokenExpiresIn = 200;

@interface GIDGoogleUserTest : XCTestCase
@end
Expand Down Expand Up @@ -101,43 +100,40 @@ - (void)testLegacyCoding {
#endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST

- (void)testUpdateAuthState {
NSTimeInterval accessTokenExpireTime = [[NSDate date] timeIntervalSince1970];
NSTimeInterval idTokenExpireTime = accessTokenExpireTime + kTimeIncrement;
GIDGoogleUser *user = [self googleUserWithAccessTokenExpiresIn:kAccessTokenExpiresIn
idTokenExpiresIn:kIDTokenExpiresIn];

GIDGoogleUser *user = [self googleUserWithAccessTokenExpireTime:accessTokenExpireTime
idTokenExpireTime:idTokenExpireTime];

NSTimeInterval updatedAccessTokenExpireTime = idTokenExpireTime + kTimeIncrement;
NSTimeInterval updatedIDTokenExpireTime = updatedAccessTokenExpireTime + kTimeIncrement;
NSString *updatedIDToken = [self idTokenWithExpireTime:updatedIDTokenExpireTime];
NSString *updatedIDToken = [self idTokenWithExpiresIn:kNewIDTokenExpiresIn];
OIDAuthState *updatedAuthState = [OIDAuthState testInstanceWithIDToken:updatedIDToken
accessToken:kNewAccessToken
accessTokenExpireTime:updatedAccessTokenExpireTime
accessTokenExpiresIn:kAccessTokenExpiresIn
refreshToken:kNewRefreshToken];
GIDProfileData *updatedProfileData = [GIDProfileData testInstance];

[user updateAuthState:updatedAuthState profileData:updatedProfileData];

XCTAssertEqualObjects(user.accessToken.tokenString, kNewAccessToken);
NSDate *expectedAccessTokenExpirationDate = [[NSDate date] dateByAddingTimeInterval:kAccessTokenExpiresIn];
XCTAssertEqualWithAccuracy([user.accessToken.expirationDate timeIntervalSince1970],
updatedAccessTokenExpireTime, kTimeAccuracy);
[expectedAccessTokenExpirationDate timeIntervalSince1970], kTimeAccuracy);

XCTAssertEqualObjects(user.idToken.tokenString, updatedIDToken);
NSDate *expectedIDTokenExpirationDate = [[NSDate date] dateByAddingTimeInterval:kNewIDTokenExpiresIn];
XCTAssertEqualWithAccuracy([user.idToken.expirationDate timeIntervalSince1970],
updatedIDTokenExpireTime, kTimeAccuracy);
[expectedIDTokenExpirationDate timeIntervalSince1970], kTimeAccuracy);

XCTAssertEqualObjects(user.refreshToken.tokenString, kNewRefreshToken);

XCTAssertEqual(user.profile, updatedProfileData);
}

// When updating with a new OIDAuthState in which token information is not changed, the token objects
// should remain the same.
- (void)testUpdateAuthState_tokensAreNotChanged {
NSTimeInterval accessTokenExpireTime = [[NSDate date] timeIntervalSince1970];
NSTimeInterval idTokenExpireTime = [[NSDate date] timeIntervalSince1970];

NSString *idToken = [self idTokenWithExpireTime:idTokenExpireTime];
NSString *idToken = [self idTokenWithExpiresIn:kIDTokenExpiresIn];
OIDAuthState *authState = [OIDAuthState testInstanceWithIDToken:idToken
accessToken:kAccessToken
accessTokenExpireTime:accessTokenExpireTime
accessTokenExpiresIn:kAccessTokenExpiresIn
refreshToken:kRefreshToken];

GIDGoogleUser *user = [[GIDGoogleUser alloc] initWithAuthState:authState profileData:nil];
Expand All @@ -155,19 +151,20 @@ - (void)testUpdateAuthState_tokensAreNotChanged {

#pragma mark - Helpers

- (GIDGoogleUser *)googleUserWithAccessTokenExpireTime:(NSTimeInterval)accessTokenExpireTime
idTokenExpireTime:(NSTimeInterval)idTokenExpireTime {
NSString *idToken = [self idTokenWithExpireTime:idTokenExpireTime];
- (GIDGoogleUser *)googleUserWithAccessTokenExpiresIn:(NSTimeInterval)accessTokenExpiresIn
idTokenExpiresIn:(NSTimeInterval)idTokenExpiresIn {
NSString *idToken = [self idTokenWithExpiresIn:idTokenExpiresIn];
OIDAuthState *authState = [OIDAuthState testInstanceWithIDToken:idToken
accessToken:kAccessToken
accessTokenExpireTime:accessTokenExpireTime
accessTokenExpiresIn:accessTokenExpiresIn
refreshToken:kRefreshToken];

return [[GIDGoogleUser alloc] initWithAuthState:authState profileData:nil];
}

// The expireTime should be based on 1970.
- (NSString *)idTokenWithExpireTime:(NSTimeInterval)expireTime {
- (NSString *)idTokenWithExpiresIn:(NSTimeInterval)expiresIn {
// The expireTime should be based on 1970.
NSTimeInterval expireTime = [[NSDate date] timeIntervalSince1970] + expiresIn;
return [OIDTokenResponse idTokenWithSub:kUserID exp:@(expireTime)];
}

Expand Down
8 changes: 7 additions & 1 deletion GoogleSignIn/Tests/Unit/OIDAuthState+Testing.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,15 @@

+ (instancetype)testInstanceWithTokenResponse:(OIDTokenResponse *)tokenResponse;

/**
* @idToken The ID token.
* @accessToken The access token string.
* @accessTokenExipresIn The life time of the access token starting from the moment when `OIDTokenResponse` is created.
* @refreshToken The refresh token string.
*/
+ (instancetype)testInstanceWithIDToken:(NSString *)idToken
accessToken:(NSString *)accessToken
accessTokenExpireTime:(NSTimeInterval)accessTokenExpireTime
accessTokenExpiresIn:(NSTimeInterval)accessTokenExpiresIn
refreshToken:(NSString *)refreshToken;

@end
6 changes: 2 additions & 4 deletions GoogleSignIn/Tests/Unit/OIDAuthState+Testing.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,12 @@ + (instancetype)testInstanceWithTokenResponse:(OIDTokenResponse *)tokenResponse

+ (instancetype)testInstanceWithIDToken:(NSString *)idToken
accessToken:(NSString *)accessToken
accessTokenExpireTime:(NSTimeInterval)accessTokenExpireTime
accessTokenExpiresIn:(NSTimeInterval)accessTokenExpiresIn
refreshToken:(NSString *)refreshToken {
NSNumber *accessTokenExpiresIn =
@(accessTokenExpireTime - [[NSDate date] timeIntervalSince1970]);
OIDTokenResponse *newResponse =
[OIDTokenResponse testInstanceWithIDToken:idToken
accessToken:accessToken
expiresIn:accessTokenExpiresIn
expiresIn:@(accessTokenExpiresIn)
refreshToken:refreshToken
tokenRequest:nil];
return [self testInstanceWithTokenResponse:newResponse];
Expand Down