| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /*
- * Copyright 2020 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 <OCMock/OCMock.h>
- #import <XCTest/XCTest.h>
- #import "FirebaseInAppMessaging/Sources/Private/Analytics/FIRIAMClientInfoFetcher.h"
- #import "FirebaseInAppMessaging/Sources/Runtime/FIRIAMSDKRuntimeErrorCodes.h"
- #import "FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h"
- @interface FIRInstallationsAuthTokenResult (Tests)
- - (instancetype)initWithToken:(NSString *)token expirationDate:(NSDate *)expirationDate;
- @end
- @interface FIRIAMClientInfoFetcherTests : XCTestCase
- @property(nonatomic, strong) FIRIAMClientInfoFetcher *clientInfoFetcher;
- @property(nonatomic) id mockInstallations;
- @end
- @implementation FIRIAMClientInfoFetcherTests
- - (void)setUp {
- self.mockInstallations = OCMClassMock([FIRInstallations class]);
- self.clientInfoFetcher =
- [[FIRIAMClientInfoFetcher alloc] initWithFirebaseInstallations:self.mockInstallations];
- }
- - (void)tearDown {
- [self.mockInstallations stopMocking];
- }
- - (void)testNoInstallations {
- FIRIAMClientInfoFetcher *fetcherWithoutInstallations =
- [[FIRIAMClientInfoFetcher alloc] initWithFirebaseInstallations:nil];
- [fetcherWithoutInstallations
- fetchFirebaseInstallationDataWithProjectNumber:@"my project number"
- withCompletion:^(NSString *_Nullable FID,
- NSString *_Nullable FISToken,
- NSError *_Nullable error) {
- XCTAssertEqual(
- error.code,
- FIRIAMSDKRuntimeErrorNoFirebaseInstallationsObject);
- }];
- }
- - (void)testReturnsBothFIDAndToken {
- FIRInstallationsAuthTokenResult *tokenResult =
- [[FIRInstallationsAuthTokenResult alloc] initWithToken:@"mock_token"
- expirationDate:[NSDate distantFuture]];
- [self mockInstanceIDMethodForTokenAndIdentity:tokenResult
- tokenError:nil
- identity:@"mock_id"
- identityError:nil];
- [self.clientInfoFetcher
- fetchFirebaseInstallationDataWithProjectNumber:@"my project number"
- withCompletion:^(NSString *_Nullable FID,
- NSString *_Nullable FISToken,
- NSError *_Nullable error) {
- XCTAssertEqualObjects(FID, @"mock_id");
- XCTAssertEqualObjects(FISToken, @"mock_token");
- XCTAssertNil(error);
- }];
- }
- - (void)testReturnsTokenButNotFID {
- // Mock error where no installations ID was fetched.
- NSError *error =
- [NSError errorWithDomain:@"com.mock.installations"
- code:0
- userInfo:@{NSLocalizedDescriptionKey : @"Installations couldn't return FID"}];
- FIRInstallationsAuthTokenResult *tokenResult =
- [[FIRInstallationsAuthTokenResult alloc] initWithToken:@"mock_token"
- expirationDate:[NSDate distantFuture]];
- [self mockInstanceIDMethodForTokenAndIdentity:tokenResult
- tokenError:nil
- identity:nil
- identityError:error];
- [self.clientInfoFetcher
- fetchFirebaseInstallationDataWithProjectNumber:@"my project number"
- withCompletion:^(NSString *_Nullable FID,
- NSString *_Nullable FISToken,
- NSError *_Nullable error) {
- // FID should be nil.
- XCTAssertNil(FID);
- // FIS token is still passed.
- XCTAssertEqualObjects(FISToken, @"mock_token");
- // Validate error gets propagated.
- XCTAssertEqualObjects(error.localizedDescription,
- @"Installations couldn't return FID");
- }];
- }
- - (void)testDoesntReturnToken {
- // Mock error where no auth token was fetched.
- NSError *error = [NSError
- errorWithDomain:@"com.mock.installations"
- code:0
- userInfo:@{NSLocalizedDescriptionKey : @"Installations couldn't return FIS token"}];
- [self mockInstanceIDMethodForTokenAndIdentity:nil
- tokenError:error
- identity:nil
- identityError:nil];
- [self.clientInfoFetcher
- fetchFirebaseInstallationDataWithProjectNumber:@"my project number"
- withCompletion:^(NSString *_Nullable FID,
- NSString *_Nullable FISToken,
- NSError *_Nullable error) {
- XCTAssertNil(FID);
- XCTAssertNil(FISToken);
- // Validate error gets propagated.
- XCTAssertEqualObjects(
- error.localizedDescription,
- @"Installations couldn't return FIS token");
- }];
- }
- // Mock FIRInstallations methods.
- - (void)mockInstanceIDMethodForTokenAndIdentity:
- (nullable FIRInstallationsAuthTokenResult *)tokenResult
- tokenError:(nullable NSError *)tokenError
- identity:(nullable NSString *)identity
- identityError:(nullable NSError *)identityError {
- OCMStub([self.mockInstallations
- installationIDWithCompletion:([OCMArg
- invokeBlockWithArgs:(identity ? identity : [NSNull null]),
- (identityError ? identityError
- : [NSNull null]),
- nil])]);
- OCMStub([self.mockInstallations
- authTokenWithCompletion:([OCMArg
- invokeBlockWithArgs:(tokenResult ? tokenResult : [NSNull null]),
- (tokenError ? tokenError : [NSNull null]),
- nil])]);
- }
- @end
|