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
43 changes: 43 additions & 0 deletions GoogleSignIn/Tests/Unit/GIDGoogleUserTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#import "GoogleSignIn/Tests/Unit/GIDProfileData+Testing.h"
#import "GoogleSignIn/Tests/Unit/OIDAuthState+Testing.h"
#import "GoogleSignIn/Tests/Unit/OIDAuthorizationRequest+Testing.h"
#import "GoogleSignIn/Tests/Unit/OIDTokenRequest+Testing.h"
#import "GoogleSignIn/Tests/Unit/OIDTokenResponse+Testing.h"

#ifdef SWIFT_PACKAGE
Expand All @@ -34,6 +35,12 @@
#import <AppAuth/OIDAuthState.h>
#endif

static NSString *const kNewAccessToken = @"new_access_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;

@interface GIDGoogleUserTest : XCTestCase
@end

Expand Down Expand Up @@ -91,4 +98,40 @@ - (void)testLegacyCoding {
}
#endif // TARGET_OS_IOS || TARGET_OS_MACCATALYST

- (void)testUpdateAuthState {
NSTimeInterval accessTokenExpireTime = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval idTokenExpireTime = accessTokenExpireTime + kTimeIncrement;

NSString *idToken = [self idTokenWithExpireTime:idTokenExpireTime];
OIDAuthState *authState = [OIDAuthState testInstanceWithIDToken:idToken
accessToken:kAccessToken
accessTokenExpireTime:accessTokenExpireTime];

GIDGoogleUser *user = [[GIDGoogleUser alloc] initWithAuthState:authState profileData:nil];

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

[user updateAuthState:updatedAuthState profileData:updatedProfileData];

XCTAssertEqualObjects(user.accessToken.tokenString, kNewAccessToken);
XCTAssertEqualWithAccuracy([user.accessToken.expirationDate timeIntervalSinceReferenceDate],
updatedAccessTokenExpireTime, kTimeAccuracy);
XCTAssertEqualObjects(user.idToken.tokenString, updatedIDToken);
XCTAssertEqualWithAccuracy([user.idToken.expirationDate timeIntervalSinceReferenceDate],
updatedIDTokenExpireTime, kTimeAccuracy);
XCTAssertEqual(user.profile, updatedProfileData);
}

#pragma mark - Helpers

- (NSString *)idTokenWithExpireTime:(NSTimeInterval)expireTime {
return [OIDTokenResponse idTokenWithSub:kUserID exp:@(expireTime + NSTimeIntervalSince1970)];
}

@end
4 changes: 4 additions & 0 deletions GoogleSignIn/Tests/Unit/OIDAuthState+Testing.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,8 @@

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

+ (instancetype)testInstanceWithIDToken:(NSString *)idToken
accessToken:(NSString *)accessToken
accessTokenExpireTime:(NSTimeInterval)accessTokenExpireTime;

@end
13 changes: 13 additions & 0 deletions GoogleSignIn/Tests/Unit/OIDAuthState+Testing.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,17 @@ + (instancetype)testInstanceWithTokenResponse:(OIDTokenResponse *)tokenResponse
tokenResponse:tokenResponse];
}

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

@end