diff options
author | Paul Beusterien <paulbeusterien@google.com> | 2017-05-15 12:27:07 -0700 |
---|---|---|
committer | Paul Beusterien <paulbeusterien@google.com> | 2017-05-15 12:27:07 -0700 |
commit | 98ba64449a632518bd2b86fe8d927f4a960d3ddc (patch) | |
tree | 131d9c4272fa6179fcda6c5a33fcb3b1bd57ad2e /Example/Auth/Tests/FIRGetAccountInfoResponseTests.m | |
parent | 32461366c9e204a527ca05e6e9b9404a2454ac51 (diff) |
Initial
Diffstat (limited to 'Example/Auth/Tests/FIRGetAccountInfoResponseTests.m')
-rw-r--r-- | Example/Auth/Tests/FIRGetAccountInfoResponseTests.m | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/Example/Auth/Tests/FIRGetAccountInfoResponseTests.m b/Example/Auth/Tests/FIRGetAccountInfoResponseTests.m new file mode 100644 index 0000000..b6c261e --- /dev/null +++ b/Example/Auth/Tests/FIRGetAccountInfoResponseTests.m @@ -0,0 +1,248 @@ +/* + * Copyright 2017 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import <XCTest/XCTest.h> + +#import "FIRAuthErrors.h" +#import "FIRAuthInternalErrors.h" +#import "FIRAuthBackend.h" +#import "FIRGetOOBConfirmationCodeResponse.h" +#import "FIRGetAccountInfoRequest.h" +#import "FIRGetAccountInfoResponse.h" +#import "FIRFakeBackendRPCIssuer.h" + +/** @var kTestAPIKey + @brief Fake API key used for testing. + */ +static NSString *const kTestAPIKey = @"APIKey"; + +/** @var kUsersKey + @brief the name of the "users" property in the response. + */ +static NSString *const kUsersKey = @"users"; + +/** @var kVerifiedProviderKey + @brief The name of the "VerifiedProvider" property in the response. + */ +static NSString *const kProviderUserInfoKey = @"providerUserInfo"; + +/** @var kPhotoUrlKey + @brief The name of the "photoURL" property in the response. + */ +static NSString *const kPhotoUrlKey = @"photoUrl"; + +/** @var kTestPhotoURL + @brief The fake photoUrl property value in the response. + */ +static NSString *const kTestPhotoURL = @"testPhotoURL"; + +/** @var kTestAccessToken + @brief testing token. + */ +static NSString *const kTestAccessToken = @"testAccessToken"; + +/** @var kProviderIDkey + @brief The name of the "provider ID" property in the response. + */ +static NSString *const kProviderIDkey = @"providerId"; + +/** @var kTestProviderID + @brief The fake providerID property value in the response. + */ +static NSString *const kTestProviderID = @"testProviderID"; + +/** @var kDisplayNameKey + @brief The name of the "Display Name" property in the response. + */ +static NSString *const kDisplayNameKey = @"displayName"; + +/** @var kTestDisplayName + @brief The fake DisplayName property value in the response. + */ +static NSString *const kTestDisplayName = @"DisplayName"; + +/** @var kFederatedIDKey + @brief The name of the "federated Id" property in the response. + */ +static NSString *const kFederatedIDKey = @"federatedId"; + +/** @var kTestFederatedID + @brief The fake federated Id property value in the response. + */ +static NSString *const kTestFederatedID = @"testFederatedId"; + +/** @var kEmailKey + @brief The name of the "Email" property in the response. + */ +static NSString *const kEmailKey = @"email"; + +/** @var kTestEmail + @brief The fake email property value in the response. + */ +static NSString *const kTestEmail = @"testEmail"; + +/** @var kPasswordHashKey + @brief The name of the "password hash" property in the response. + */ +static NSString *const kPasswordHashKey = @"passwordHash"; + +/** @var kTestPasswordHash + @brief The fake password hash property value in the response. + */ +static NSString *const kTestPasswordHash = @"testPasswordHash"; + +/** @var kLocalIDKey + @brief The key for the "localID" value in the response. + */ +static NSString *const kLocalIDKey = @"localId"; + +/** @var kTestLocalID + @brief The fake @c localID for testing in the response. + */ +static NSString *const kTestLocalID = @"testLocalId"; + +/** @var kEmailVerifiedKey + @brief The key for the "emailVerified" value in the response. + */ +static NSString *const kEmailVerifiedKey = @"emailVerified"; + +/** @class FIRGetAccountInfoResponseTests + @brief Tests for @c FIRGetAccountInfoResponse. + */ +@interface FIRGetAccountInfoResponseTests : XCTestCase +@end +@implementation FIRGetAccountInfoResponseTests { + /** @var _RPCIssuer + @brief This backend RPC issuer is used to fake network responses for each test in the suite. + In the @c setUp method we initialize this and set @c FIRAuthBackend's RPC issuer to it. + */ + FIRFakeBackendRPCIssuer *_RPCIssuer; +} + +- (void)setUp { + [super setUp]; + FIRFakeBackendRPCIssuer *RPCIssuer = [[FIRFakeBackendRPCIssuer alloc] init]; + [FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:RPCIssuer]; + _RPCIssuer = RPCIssuer; +} + +- (void)tearDown { + _RPCIssuer = nil; + [FIRAuthBackend setDefaultBackendImplementationWithRPCIssuer:nil]; + [super tearDown]; +} + +/** @fn testGetAccountInfoUnexpectedResponseError + @brief This test simulates an unexpected response returned from server in @c GetAccountInfo + flow. + */ +- (void)testGetAccountInfoUnexpectedResponseError { + FIRGetAccountInfoRequest *request = + [[FIRGetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey accessToken:kTestAccessToken]; + + __block BOOL callbackInvoked; + __block FIRGetAccountInfoResponse *RPCResponse; + __block NSError *RPCError; + [FIRAuthBackend getAccountInfo:request + callback:^(FIRGetAccountInfoResponse *_Nullable response, + NSError *_Nullable error) { + callbackInvoked = YES; + RPCResponse = response; + RPCError = error; + }]; + + NSArray *erroneousUserData = @[@"user1Data", @"user2Data"]; + [_RPCIssuer respondWithJSON:@{ + kUsersKey : erroneousUserData + }]; + + XCTAssert(callbackInvoked); + XCTAssertNotNil(RPCError); + XCTAssertEqualObjects(RPCError.domain, FIRAuthErrorDomain); + XCTAssertEqual(RPCError.code, FIRAuthErrorCodeInternalError); + XCTAssertNotNil(RPCError.userInfo[NSUnderlyingErrorKey]); + NSError *underlyingError = RPCError.userInfo[NSUnderlyingErrorKey]; + XCTAssertNotNil(underlyingError); + XCTAssertNotNil(underlyingError.userInfo[FIRAuthErrorUserInfoDeserializedResponseKey]); + XCTAssertNil(RPCResponse); +} + +/** @fn testSuccessfulGetAccountInfoResponse + @brief This test simulates a successful @c GetAccountInfo flow. + */ +- (void)testSuccessfulGetAccountInfoResponse { + FIRGetAccountInfoRequest *request = + [[FIRGetAccountInfoRequest alloc] initWithAPIKey:kTestAPIKey accessToken:kTestAccessToken]; + + __block BOOL callbackInvoked; + __block FIRGetAccountInfoResponse *RPCResponse; + __block NSError *RPCError; + [FIRAuthBackend getAccountInfo:request + callback:^(FIRGetAccountInfoResponse *_Nullable response, + NSError *_Nullable error) { + callbackInvoked = YES; + RPCResponse = response; + RPCError = error; + }]; + + NSArray *users = @[ + @{ + kProviderUserInfoKey:@[ + @{ + kProviderIDkey : kTestProviderID, + kDisplayNameKey: kTestDisplayName, + kPhotoUrlKey : kTestPhotoURL, + kFederatedIDKey : kTestFederatedID, + kEmailKey : kTestEmail, + } + ], + kLocalIDKey : kTestLocalID, + kDisplayNameKey : kTestDisplayName, + kEmailKey : kTestEmail, + kPhotoUrlKey : kTestPhotoURL, + kEmailVerifiedKey : @YES, + kPasswordHashKey : kTestPasswordHash + } + ]; + [_RPCIssuer respondWithJSON:@{ + @"users" : users, + }]; + XCTAssert(callbackInvoked); + XCTAssertNil(RPCError); + XCTAssertNotNil(RPCResponse); + XCTAssertNotNil(RPCResponse.users); + if ([RPCResponse.users count]) { + NSURL *responsePhotoUrl = RPCResponse.users[0].photoURL; + XCTAssertEqualObjects(responsePhotoUrl.absoluteString, kTestPhotoURL); + XCTAssertEqualObjects(RPCResponse.users[0].displayName, kTestDisplayName); + XCTAssertEqualObjects(RPCResponse.users[0].email, kTestEmail); + XCTAssertEqualObjects(RPCResponse.users[0].localID, kTestLocalID); + XCTAssertEqual(RPCResponse.users[0].emailVerified, YES); + XCTAssertEqualObjects(RPCResponse.users[0].passwordHash, kTestPasswordHash); + NSArray<FIRGetAccountInfoResponseProviderUserInfo *> *providerUserInfo = + RPCResponse.users[0].providerUserInfo; + if ([providerUserInfo count]) { + NSURL *providerInfoPhotoUrl = providerUserInfo[0].photoURL; + XCTAssertEqualObjects(providerInfoPhotoUrl.absoluteString, kTestPhotoURL); + XCTAssertEqualObjects(providerUserInfo[0].providerID, kTestProviderID); + XCTAssertEqualObjects(providerUserInfo[0].displayName, kTestDisplayName); + XCTAssertEqualObjects(providerUserInfo[0].federatedID, kTestFederatedID); + XCTAssertEqualObjects(providerUserInfo[0].email, kTestEmail); + } + } +} + +@end |