| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- /*
- * Copyright 2021 Google LLC
- *
- * 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 "OCMock.h"
- #import "FirebaseDatabase/Sources/Login/FIRDatabaseConnectionContextProvider.h"
- #import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
- #import "SharedTestUtilities/AppCheckFake/FIRAppCheckFake.h"
- #import "SharedTestUtilities/AppCheckFake/FIRAppCheckTokenResultFake.h"
- #import "SharedTestUtilities/FIRAuthInteropFake.h"
- @interface FIRDatabaseConnectionContextProviderTests : XCTestCase
- @property(nonatomic) FIRAuthInteropFake *authFake;
- @property(nonatomic) FIRAppCheckFake *appCheckFake;
- @property(strong, nonatomic) FIRAppCheckTokenResultFake *appCheckTokenSuccess;
- @property(strong, nonatomic) FIRAppCheckTokenResultFake *appCheckTokenError;
- @end
- @implementation FIRDatabaseConnectionContextProviderTests
- - (void)setUp {
- [super setUp];
- self.appCheckTokenSuccess = [[FIRAppCheckTokenResultFake alloc] initWithToken:@"token" error:nil];
- self.appCheckTokenError = [[FIRAppCheckTokenResultFake alloc]
- initWithToken:@"dummy token"
- error:[NSError errorWithDomain:@"testAppCheckError" code:-1 userInfo:nil]];
- self.appCheckFake = [[FIRAppCheckFake alloc] init];
- self.authFake = [[FIRAuthInteropFake alloc] initWithToken:nil userID:nil error:nil];
- }
- - (void)tearDown {
- self.appCheckFake = nil;
- self.authFake = nil;
- [super tearDown];
- }
- - (void)testFetchContextWithAppCheckNoAuthSuccess {
- self.appCheckFake.tokenResult = self.appCheckTokenSuccess;
- __auto_type provider =
- [FIRDatabaseConnectionContextProvider contextProviderWithAuth:nil appCheck:self.appCheckFake];
- XCTestExpectation *completionExpectation =
- [self expectationWithDescription:@"completionExpectation"];
- [provider
- fetchContextForcingRefresh:NO
- withCallback:^(FIRDatabaseConnectionContext *_Nullable context,
- NSError *_Nullable error) {
- XCTAssertNil(error);
- XCTAssertNil(context.authToken);
- XCTAssertEqualObjects(context.appCheckToken, self.appCheckTokenSuccess.token);
- [completionExpectation fulfill];
- }];
- [self waitForExpectations:@[ completionExpectation ] timeout:0.5];
- }
- - (void)testFetchContextWithAppCheckNoAuthError {
- self.appCheckFake.tokenResult = self.appCheckTokenError;
- __auto_type provider =
- [FIRDatabaseConnectionContextProvider contextProviderWithAuth:nil appCheck:self.appCheckFake];
- XCTestExpectation *completionExpectation =
- [self expectationWithDescription:@"completionExpectation"];
- [provider
- fetchContextForcingRefresh:NO
- withCallback:^(FIRDatabaseConnectionContext *_Nullable context,
- NSError *_Nullable error) {
- XCTAssertNil(error);
- XCTAssertNil(context.authToken);
- XCTAssertEqualObjects(context.appCheckToken, self.appCheckTokenError.token);
- [completionExpectation fulfill];
- }];
- [self waitForExpectations:@[ completionExpectation ] timeout:0.5];
- }
- - (void)testFetchContextWithAuthNoAppCheckSuccess {
- NSString *expectedAuthToken = @"valid_auth_token";
- self.authFake.token = expectedAuthToken;
- __auto_type provider = [FIRDatabaseConnectionContextProvider contextProviderWithAuth:self.authFake
- appCheck:nil];
- XCTestExpectation *completionExpectation =
- [self expectationWithDescription:@"completionExpectation"];
- [provider fetchContextForcingRefresh:NO
- withCallback:^(FIRDatabaseConnectionContext *_Nullable context,
- NSError *_Nullable error) {
- XCTAssertNil(error);
- XCTAssertNil(context.appCheckToken);
- XCTAssertEqualObjects(context.authToken, expectedAuthToken);
- [completionExpectation fulfill];
- }];
- [self waitForExpectations:@[ completionExpectation ] timeout:0.5];
- }
- - (void)testFetchContextWithAuthNoAppCheckError {
- NSError *expectedAuthError = [NSError errorWithDomain:@"testFetchContextWithAuthNoAppCheckError"
- code:-1
- userInfo:nil];
- self.authFake.error = expectedAuthError;
- __auto_type provider = [FIRDatabaseConnectionContextProvider contextProviderWithAuth:self.authFake
- appCheck:nil];
- XCTestExpectation *completionExpectation =
- [self expectationWithDescription:@"completionExpectation"];
- [provider fetchContextForcingRefresh:NO
- withCallback:^(FIRDatabaseConnectionContext *_Nullable context,
- NSError *_Nullable error) {
- XCTAssertNil(context.authToken);
- XCTAssertNil(context.appCheckToken);
- XCTAssertEqualObjects(error, expectedAuthError);
- [completionExpectation fulfill];
- }];
- [self waitForExpectations:@[ completionExpectation ] timeout:0.5];
- }
- - (void)testFetchContextWithAuthSuccessAppCheckSuccess {
- NSString *expectedAuthToken = @"valid_auth_token";
- self.authFake.token = expectedAuthToken;
- self.appCheckFake.tokenResult = self.appCheckTokenSuccess;
- __auto_type provider =
- [FIRDatabaseConnectionContextProvider contextProviderWithAuth:self.authFake
- appCheck:self.appCheckFake];
- XCTestExpectation *completionExpectation =
- [self expectationWithDescription:@"completionExpectation"];
- [provider
- fetchContextForcingRefresh:NO
- withCallback:^(FIRDatabaseConnectionContext *_Nullable context,
- NSError *_Nullable error) {
- XCTAssertNil(error);
- XCTAssertEqualObjects(context.appCheckToken, self.appCheckTokenSuccess.token);
- XCTAssertEqualObjects(context.authToken, expectedAuthToken);
- [completionExpectation fulfill];
- }];
- [self waitForExpectations:@[ completionExpectation ] timeout:0.5];
- }
- - (void)testFetchContextWithAuthErrorAppCheckSuccess {
- NSError *expectedAuthError =
- [NSError errorWithDomain:@"testFetchContextWithAuthErrorAppCheckSuccess"
- code:-1
- userInfo:nil];
- self.authFake.error = expectedAuthError;
- self.appCheckFake.tokenResult = self.appCheckTokenSuccess;
- __auto_type provider =
- [FIRDatabaseConnectionContextProvider contextProviderWithAuth:self.authFake
- appCheck:self.appCheckFake];
- XCTestExpectation *completionExpectation =
- [self expectationWithDescription:@"completionExpectation"];
- [provider
- fetchContextForcingRefresh:NO
- withCallback:^(FIRDatabaseConnectionContext *_Nullable context,
- NSError *_Nullable error) {
- XCTAssertNil(context.authToken);
- XCTAssertEqualObjects(error, expectedAuthError);
- XCTAssertEqualObjects(context.appCheckToken, self.appCheckTokenSuccess.token);
- [completionExpectation fulfill];
- }];
- [self waitForExpectations:@[ completionExpectation ] timeout:0.5];
- }
- - (void)testFetchContextWithAuthSuccessAppCheckError {
- NSString *expectedAuthToken = @"valid_auth_token";
- self.authFake.token = expectedAuthToken;
- self.appCheckFake.tokenResult = self.appCheckTokenError;
- __auto_type provider =
- [FIRDatabaseConnectionContextProvider contextProviderWithAuth:self.authFake
- appCheck:self.appCheckFake];
- XCTestExpectation *completionExpectation =
- [self expectationWithDescription:@"completionExpectation"];
- [provider
- fetchContextForcingRefresh:NO
- withCallback:^(FIRDatabaseConnectionContext *_Nullable context,
- NSError *_Nullable error) {
- XCTAssertNil(error);
- XCTAssertEqualObjects(context.authToken, expectedAuthToken);
- XCTAssertEqualObjects(context.appCheckToken, self.appCheckTokenError.token);
- [completionExpectation fulfill];
- }];
- [self waitForExpectations:@[ completionExpectation ] timeout:0.5];
- }
- - (void)testListenForAuthTokenChanges {
- NSString *updatedToken = @"updated_auth_token";
- __auto_type provider =
- [FIRDatabaseConnectionContextProvider contextProviderWithAuth:self.authFake
- appCheck:self.appCheckFake];
- XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"callbackExpectation"];
- [provider listenForAuthTokenChanges:^(NSString *token) {
- XCTAssertEqualObjects(token, updatedToken);
- [callbackExpectation fulfill];
- }];
- // Post auth token change notification.
- [[NSNotificationCenter defaultCenter]
- postNotificationName:FIRAuthStateDidChangeInternalNotification
- object:self.authFake
- userInfo:@{FIRAuthStateDidChangeInternalNotificationTokenKey : updatedToken}];
- [self waitForExpectations:@[ callbackExpectation ] timeout:0.5];
- }
- - (void)testListenForAppCheckTokenChanges {
- NSString *updatedToken = @"updated_app_check_token";
- __auto_type provider =
- [FIRDatabaseConnectionContextProvider contextProviderWithAuth:self.authFake
- appCheck:self.appCheckFake];
- XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"callbackExpectation"];
- [provider listenForAppCheckTokenChanges:^(NSString *token) {
- XCTAssertEqualObjects(token, updatedToken);
- [callbackExpectation fulfill];
- }];
- // Post auth token change notification.
- [[NSNotificationCenter defaultCenter]
- postNotificationName:[self.appCheckFake tokenDidChangeNotificationName]
- object:self.appCheckFake
- userInfo:@{
- [self.appCheckFake notificationTokenKey] : updatedToken,
- [self.appCheckFake notificationAppNameKey] : @"app_name",
- }];
- [self waitForExpectations:@[ callbackExpectation ] timeout:0.5];
- }
- @end
|