3636#endif
3737
3838static NSString *const kNewAccessToken = @" new_access_token" ;
39+ static NSString *const kNewRefreshToken = @" new_refresh_token" ;
40+
3941static NSTimeInterval const kTimeAccuracy = 10 ;
4042// The difference between times.
4143// It should be larger than kTimeAccuracy which is used in the method `XCTAssertEqualWithAccuracy`.
@@ -102,19 +104,16 @@ - (void)testUpdateAuthState {
102104 NSTimeInterval accessTokenExpireTime = [[NSDate date ] timeIntervalSince1970 ];
103105 NSTimeInterval idTokenExpireTime = accessTokenExpireTime + kTimeIncrement ;
104106
105- NSString *idToken = [self idTokenWithExpireTime: idTokenExpireTime];
106- OIDAuthState *authState = [OIDAuthState testInstanceWithIDToken: idToken
107- accessToken: kAccessToken
108- accessTokenExpireTime: accessTokenExpireTime];
109-
110- GIDGoogleUser *user = [[GIDGoogleUser alloc ] initWithAuthState: authState profileData: nil ];
107+ GIDGoogleUser *user = [self googleUserWithAccessTokenExpireTime: accessTokenExpireTime
108+ idTokenExpireTime: idTokenExpireTime];
111109
112110 NSTimeInterval updatedAccessTokenExpireTime = idTokenExpireTime + kTimeIncrement ;
113111 NSTimeInterval updatedIDTokenExpireTime = updatedAccessTokenExpireTime + kTimeIncrement ;
114112 NSString *updatedIDToken = [self idTokenWithExpireTime: updatedIDTokenExpireTime];
115113 OIDAuthState *updatedAuthState = [OIDAuthState testInstanceWithIDToken: updatedIDToken
116114 accessToken: kNewAccessToken
117- accessTokenExpireTime: updatedAccessTokenExpireTime];
115+ accessTokenExpireTime: updatedAccessTokenExpireTime
116+ refreshToken: kNewRefreshToken ];
118117 GIDProfileData *updatedProfileData = [GIDProfileData testInstance ];
119118
120119 [user updateAuthState: updatedAuthState profileData: updatedProfileData];
@@ -125,11 +124,48 @@ - (void)testUpdateAuthState {
125124 XCTAssertEqualObjects (user.idToken .tokenString , updatedIDToken);
126125 XCTAssertEqualWithAccuracy ([user.idToken.expirationDate timeIntervalSince1970 ],
127126 updatedIDTokenExpireTime, kTimeAccuracy );
127+ XCTAssertEqualObjects (user.refreshToken .tokenString , kNewRefreshToken );
128128 XCTAssertEqual (user.profile , updatedProfileData);
129129}
130130
131+ // When updating with a new OIDAuthState in which token information is not changed, the token objects
132+ // should remain the same.
133+ - (void )testUpdateAuthState_tokensAreNotChanged {
134+ NSTimeInterval accessTokenExpireTime = [[NSDate date ] timeIntervalSince1970 ];
135+ NSTimeInterval idTokenExpireTime = [[NSDate date ] timeIntervalSince1970 ];
136+
137+ NSString *idToken = [self idTokenWithExpireTime: idTokenExpireTime];
138+ OIDAuthState *authState = [OIDAuthState testInstanceWithIDToken: idToken
139+ accessToken: kAccessToken
140+ accessTokenExpireTime: accessTokenExpireTime
141+ refreshToken: kRefreshToken ];
142+
143+ GIDGoogleUser *user = [[GIDGoogleUser alloc ] initWithAuthState: authState profileData: nil ];
144+
145+ GIDToken *accessTokenBeforeUpdate = user.accessToken ;
146+ GIDToken *refreshTokenBeforeUpdate = user.refreshToken ;
147+ GIDToken *idTokenBeforeUpdate = user.idToken ;
148+
149+ [user updateAuthState: authState profileData: nil ];
150+
151+ XCTAssertIdentical (user.accessToken , accessTokenBeforeUpdate);
152+ XCTAssertIdentical (user.idToken , idTokenBeforeUpdate);
153+ XCTAssertIdentical (user.refreshToken , refreshTokenBeforeUpdate);
154+ }
155+
131156#pragma mark - Helpers
132157
158+ - (GIDGoogleUser *)googleUserWithAccessTokenExpireTime : (NSTimeInterval )accessTokenExpireTime
159+ idTokenExpireTime : (NSTimeInterval )idTokenExpireTime {
160+ NSString *idToken = [self idTokenWithExpireTime: idTokenExpireTime];
161+ OIDAuthState *authState = [OIDAuthState testInstanceWithIDToken: idToken
162+ accessToken: kAccessToken
163+ accessTokenExpireTime: accessTokenExpireTime
164+ refreshToken: kRefreshToken ];
165+
166+ return [[GIDGoogleUser alloc ] initWithAuthState: authState profileData: nil ];
167+ }
168+
133169// The expireTime should be based on 1970.
134170- (NSString *)idTokenWithExpireTime : (NSTimeInterval )expireTime {
135171 return [OIDTokenResponse idTokenWithSub: kUserID exp: @(expireTime)];
0 commit comments