Procházet zdrojové kódy

Add unit test for `updateAuthState:` in GIDGoogleUserTest (#212)

- Add a new initializer in OIDAuthState+Testing.
- Add a test case `testUpdateAuthState`.
pinlu před 3 roky
rodič
revize
3e54f0965a

+ 43 - 0
GoogleSignIn/Tests/Unit/GIDGoogleUserTest.m

@@ -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
@@ -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
 
@@ -91,4 +98,40 @@
 }
 #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 - 0
GoogleSignIn/Tests/Unit/OIDAuthState+Testing.h

@@ -28,4 +28,8 @@
 
 + (instancetype)testInstanceWithTokenResponse:(OIDTokenResponse *)tokenResponse;
 
++ (instancetype)testInstanceWithIDToken:(NSString *)idToken
+                            accessToken:(NSString *)accessToken
+                  accessTokenExpireTime:(NSTimeInterval)accessTokenExpireTime;
+
 @end

+ 13 - 0
GoogleSignIn/Tests/Unit/OIDAuthState+Testing.m

@@ -33,4 +33,17 @@
                                                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