|
|
@@ -23,7 +23,6 @@
|
|
|
#import "FBLPromise+Testing.h"
|
|
|
#import "FIRInstallationsErrorUtil+Tests.h"
|
|
|
#import "FIRInstallationsItem+Tests.h"
|
|
|
-#import "XCTestCase+DateAsserts.h"
|
|
|
|
|
|
#import "FIRInstallations.h"
|
|
|
#import "FIRInstallationsAPIService.h"
|
|
|
@@ -36,8 +35,6 @@
|
|
|
#import "FIRInstallationsStoredIIDCheckin.h"
|
|
|
|
|
|
#import "FIRInstallationsStoredAuthToken.h"
|
|
|
-#import "FIRInstallationsStoredRegistrationError.h"
|
|
|
-#import "FIRInstallationsStoredRegistrationParameters.h"
|
|
|
|
|
|
@interface FIRInstallationsIDController (Tests)
|
|
|
- (instancetype)initWithGoogleAppID:(NSString *)appID
|
|
|
@@ -56,9 +53,6 @@
|
|
|
@property(nonatomic) id mockIIDCheckinStore;
|
|
|
@property(nonatomic) NSString *appID;
|
|
|
@property(nonatomic) NSString *appName;
|
|
|
-
|
|
|
-@property(nonatomic) NSString *APIKey;
|
|
|
-@property(nonatomic) NSString *projectID;
|
|
|
@end
|
|
|
|
|
|
@implementation FIRInstallationsIDControllerTests
|
|
|
@@ -70,16 +64,11 @@
|
|
|
- (void)setUpWithAppName:(NSString *)appName {
|
|
|
self.appID = @"appID";
|
|
|
self.appName = appName;
|
|
|
- self.APIKey = @"APIKey";
|
|
|
- self.projectID = @"projectID";
|
|
|
-
|
|
|
self.mockInstallationsStore = OCMStrictClassMock([FIRInstallationsStore class]);
|
|
|
self.mockAPIService = OCMStrictClassMock([FIRInstallationsAPIService class]);
|
|
|
self.mockIIDStore = OCMStrictClassMock([FIRInstallationsIIDStore class]);
|
|
|
self.mockIIDCheckinStore = OCMStrictClassMock([FIRInstallationsIIDCheckinStore class]);
|
|
|
|
|
|
- [self stubAPIServiceParameters];
|
|
|
-
|
|
|
self.controller =
|
|
|
[[FIRInstallationsIDController alloc] initWithGoogleAppID:self.appID
|
|
|
appName:self.appName
|
|
|
@@ -98,11 +87,6 @@
|
|
|
self.appName = nil;
|
|
|
}
|
|
|
|
|
|
-- (void)stubAPIServiceParameters {
|
|
|
- OCMStub([self.mockAPIService APIKey]).andReturn(self.APIKey);
|
|
|
- OCMStub([self.mockAPIService projectID]).andReturn(self.projectID);
|
|
|
-}
|
|
|
-
|
|
|
#pragma mark - Get Installation
|
|
|
|
|
|
- (void)testGetInstallationItem_WhenFIDExists_ThenItIsReturned {
|
|
|
@@ -1004,190 +988,6 @@
|
|
|
OCMVerifyAll(self.mockAPIService);
|
|
|
}
|
|
|
|
|
|
-#pragma mark - Registration Failures
|
|
|
-
|
|
|
-- (void)testRegisterInstallation_WhenServerRespondsWith429_ThenErrorIsNotStoredAndReturned {
|
|
|
- // 1.1. Expect installation to be requested from the store.
|
|
|
- FIRInstallationsItem *storedInstallation =
|
|
|
- [FIRInstallationsItem createUnregisteredInstallationItem];
|
|
|
- OCMExpect([self.mockInstallationsStore installationForAppID:self.appID appName:self.appName])
|
|
|
- .andReturn([FBLPromise resolvedWith:storedInstallation]);
|
|
|
-
|
|
|
- // 1.2. Receive HTTP 429.
|
|
|
- NSError *APIError = [FIRInstallationsErrorUtil APIErrorWithHTTPCode:429];
|
|
|
- FBLPromise *rejectedAPIPromise = [FBLPromise pendingPromise];
|
|
|
- [rejectedAPIPromise reject:APIError];
|
|
|
- OCMExpect([self.mockAPIService registerInstallation:storedInstallation])
|
|
|
- .andReturn(rejectedAPIPromise);
|
|
|
-
|
|
|
- // 1.3. Don't expect the installation to be stored with the error.
|
|
|
- OCMReject([self.mockInstallationsStore saveInstallation:[OCMArg any]]);
|
|
|
-
|
|
|
- // 2. Request Installation.
|
|
|
- FBLPromise<FIRInstallationsItem *> *promise = [self.controller getInstallationItem];
|
|
|
- XCTAssert(FBLWaitForPromisesWithTimeout(0.5));
|
|
|
-
|
|
|
- // 4. Check.
|
|
|
- XCTAssertNil(promise.error);
|
|
|
- XCTAssertNotNil(promise.value);
|
|
|
-
|
|
|
- // The unregistered installation should be returned before the registration attempt.
|
|
|
- XCTAssertEqual(promise.value.registrationStatus, FIRInstallationStatusUnregistered);
|
|
|
-
|
|
|
- OCMVerifyAll(self.mockInstallationsStore);
|
|
|
- OCMVerifyAll(self.mockAPIService);
|
|
|
-}
|
|
|
-
|
|
|
-- (void)testRegisterInstallation_WhenServerRespondsWith400_ThenErrorStoredAndReturned {
|
|
|
- // 1.1. Expect installation to be requested from the store.
|
|
|
- FIRInstallationsItem *storedInstallation =
|
|
|
- [FIRInstallationsItem createUnregisteredInstallationItem];
|
|
|
- OCMExpect([self.mockInstallationsStore installationForAppID:self.appID appName:self.appName])
|
|
|
- .andReturn([FBLPromise resolvedWith:storedInstallation]);
|
|
|
-
|
|
|
- // 1.2. Receive HTTP 400.
|
|
|
- NSError *APIError = [FIRInstallationsErrorUtil APIErrorWithHTTPCode:400];
|
|
|
- FBLPromise *rejectedAPIPromise = [FBLPromise pendingPromise];
|
|
|
- [rejectedAPIPromise reject:APIError];
|
|
|
- OCMExpect([self.mockAPIService registerInstallation:storedInstallation])
|
|
|
- .andReturn(rejectedAPIPromise);
|
|
|
-
|
|
|
- // 1.3. Expect the installation to be stored with the error.
|
|
|
- OCMExpect([self.mockInstallationsStore
|
|
|
- saveInstallation:[OCMArg checkWithBlock:^BOOL(FIRInstallationsItem *installation) {
|
|
|
- XCTAssertEqual(installation.registrationStatus,
|
|
|
- FIRInstallationStatusRegistrationFailed);
|
|
|
- XCTAssertEqualObjects(installation.registrationError.APIError, APIError);
|
|
|
- XCTAssertEqualObjects(
|
|
|
- installation.registrationError.registrationParameters.APIKey, self.APIKey);
|
|
|
- XCTAssertEqualObjects(
|
|
|
- installation.registrationError.registrationParameters.projectID,
|
|
|
- self.projectID);
|
|
|
- XCTAssertNotNil(installation.registrationError.date);
|
|
|
- [self assertDate:installation.registrationError.date
|
|
|
- isApproximatelyEqualCurrentPlusTimeInterval:0];
|
|
|
- return YES;
|
|
|
- }]])
|
|
|
- .andReturn([FBLPromise resolvedWith:[NSNull null]]);
|
|
|
-
|
|
|
- // 2. Request Installation.
|
|
|
- FBLPromise<FIRInstallationsItem *> *promise = [self.controller getInstallationItem];
|
|
|
- XCTAssert(FBLWaitForPromisesWithTimeout(0.5));
|
|
|
-
|
|
|
- // 4. Check.
|
|
|
- XCTAssertNil(promise.error);
|
|
|
- XCTAssertNotNil(promise.value);
|
|
|
-
|
|
|
- // The unregistered installation should be returned before the registration attempt.
|
|
|
- XCTAssertEqual(promise.value.registrationStatus, FIRInstallationStatusUnregistered);
|
|
|
-
|
|
|
- OCMVerifyAll(self.mockInstallationsStore);
|
|
|
- OCMVerifyAll(self.mockAPIService);
|
|
|
-}
|
|
|
-
|
|
|
-- (void)testGetInstallation_WhenRegistrationErrorStoredAndConfigurationIsTheSame_ThenFails {
|
|
|
- // 1.1. Expect installation to be requested from the store.
|
|
|
- FIRInstallationsItem *storedInstallation =
|
|
|
- [self createFailedToRegisterInstallationWithParameters:[self currentRegistrationParameters]];
|
|
|
- OCMExpect([self.mockInstallationsStore installationForAppID:self.appID appName:self.appName])
|
|
|
- .andReturn([FBLPromise resolvedWith:storedInstallation]);
|
|
|
-
|
|
|
- // 1.2. Don't expect registration API request to be sent.
|
|
|
- OCMReject([self.mockAPIService registerInstallation:[OCMArg any]]);
|
|
|
-
|
|
|
- // 2. Request Installation.
|
|
|
- FBLPromise<FIRInstallationsItem *> *promise = [self.controller getInstallationItem];
|
|
|
- XCTAssert(FBLWaitForPromisesWithTimeout(0.5));
|
|
|
-
|
|
|
- // 3. Check.
|
|
|
- XCTAssertFalse(promise.isFulfilled);
|
|
|
- XCTAssertEqualObjects(promise.error, storedInstallation.registrationError.APIError);
|
|
|
-
|
|
|
- OCMVerifyAll(self.mockInstallationsStore);
|
|
|
- OCMVerifyAll(self.mockAPIService);
|
|
|
-}
|
|
|
-
|
|
|
-- (void)
|
|
|
- testGetInstallation_WhenRegistrationErrorStoredAndConfigurationDifferent_ThenSendsAPIRequest {
|
|
|
- __block FBLPromise<FIRInstallationsItem *> *storedInstallationPromise;
|
|
|
- OCMExpect([self.mockInstallationsStore installationForAppID:self.appID appName:self.appName])
|
|
|
- .andDo(^(NSInvocation *invocation) {
|
|
|
- [invocation setReturnValue:&storedInstallationPromise];
|
|
|
- });
|
|
|
-
|
|
|
- // 1.1. Expect installation to be requested from the store.
|
|
|
- FIRInstallationsItem *storedInstallation =
|
|
|
- [self createFailedToRegisterInstallationWithParameters:[self otherRegistrationParameters]];
|
|
|
- storedInstallationPromise = [FBLPromise resolvedWith:storedInstallation];
|
|
|
-
|
|
|
- // 1.2. Expect registration API request to be sent.
|
|
|
- FIRInstallationsItem *registeredInstallation =
|
|
|
- [FIRInstallationsItem createRegisteredInstallationItem];
|
|
|
- OCMExpect([self.mockAPIService registerInstallation:storedInstallation])
|
|
|
- .andReturn([FBLPromise resolvedWith:registeredInstallation]);
|
|
|
-
|
|
|
- // 1.3. Expect registered Installation to be stored.
|
|
|
- OCMExpect([self.mockInstallationsStore saveInstallation:[OCMArg checkWithBlock:^BOOL(id obj) {
|
|
|
- XCTAssertEqualObjects(obj, registeredInstallation);
|
|
|
- storedInstallationPromise =
|
|
|
- [FBLPromise resolvedWith:obj];
|
|
|
- return YES;
|
|
|
- }]])
|
|
|
- .andReturn([FBLPromise resolvedWith:[NSNull null]]);
|
|
|
-
|
|
|
- // 2. Request Installation.
|
|
|
- FBLPromise<FIRInstallationsItem *> *promise = [self.controller getInstallationItem];
|
|
|
- XCTAssert(FBLWaitForPromisesWithTimeout(0.5));
|
|
|
-
|
|
|
- // 3. Check.
|
|
|
- XCTAssertEqualObjects(promise.value.identifier, registeredInstallation.identifier);
|
|
|
- XCTAssertNil(promise.error);
|
|
|
-
|
|
|
- OCMVerifyAll(self.mockInstallationsStore);
|
|
|
- OCMVerifyAll(self.mockAPIService);
|
|
|
-}
|
|
|
-
|
|
|
-- (void)testGetInstallation_WhenStoredRegistrationErrorIsOutdated_ThenSendsAPIRequest {
|
|
|
- __block FBLPromise<FIRInstallationsItem *> *storedInstallationPromise;
|
|
|
- OCMExpect([self.mockInstallationsStore installationForAppID:self.appID appName:self.appName])
|
|
|
- .andDo(^(NSInvocation *invocation) {
|
|
|
- [invocation setReturnValue:&storedInstallationPromise];
|
|
|
- });
|
|
|
-
|
|
|
- // 1.1. Expect installation to be requested from the store.
|
|
|
- NSDate *date25HoursAgo = [NSDate dateWithTimeIntervalSinceNow:-25 * 60 * 60];
|
|
|
- FIRInstallationsItem *storedInstallation =
|
|
|
- [self createFailedToRegisterInstallationWithParameters:[self currentRegistrationParameters]
|
|
|
- date:date25HoursAgo];
|
|
|
- storedInstallationPromise = [FBLPromise resolvedWith:storedInstallation];
|
|
|
-
|
|
|
- // 1.2. Expect registration API request to be sent.
|
|
|
- FIRInstallationsItem *registeredInstallation =
|
|
|
- [FIRInstallationsItem createRegisteredInstallationItem];
|
|
|
- OCMExpect([self.mockAPIService registerInstallation:storedInstallation])
|
|
|
- .andReturn([FBLPromise resolvedWith:registeredInstallation]);
|
|
|
-
|
|
|
- // 1.3. Expect registered Installation to be stored.
|
|
|
- OCMExpect([self.mockInstallationsStore saveInstallation:[OCMArg checkWithBlock:^BOOL(id obj) {
|
|
|
- XCTAssertEqualObjects(obj, registeredInstallation);
|
|
|
- storedInstallationPromise =
|
|
|
- [FBLPromise resolvedWith:obj];
|
|
|
- return YES;
|
|
|
- }]])
|
|
|
- .andReturn([FBLPromise resolvedWith:[NSNull null]]);
|
|
|
-
|
|
|
- // 2. Request Installation.
|
|
|
- FBLPromise<FIRInstallationsItem *> *promise = [self.controller getInstallationItem];
|
|
|
- XCTAssert(FBLWaitForPromisesWithTimeout(0.5));
|
|
|
-
|
|
|
- // 3. Check.
|
|
|
- XCTAssertEqualObjects(promise.value.identifier, registeredInstallation.identifier);
|
|
|
- XCTAssertNil(promise.error);
|
|
|
-
|
|
|
- OCMVerifyAll(self.mockInstallationsStore);
|
|
|
- OCMVerifyAll(self.mockAPIService);
|
|
|
-}
|
|
|
-
|
|
|
#pragma mark - Helpers
|
|
|
|
|
|
- (void)expectInstallationsStoreGetInstallationNotFound {
|
|
|
@@ -1229,35 +1029,6 @@
|
|
|
return notificationExpectation;
|
|
|
}
|
|
|
|
|
|
-- (FIRInstallationsItem *)createFailedToRegisterInstallationWithParameters:
|
|
|
- (FIRInstallationsStoredRegistrationParameters *)registrationParameters
|
|
|
- date:(NSDate *)date {
|
|
|
- FIRInstallationsStoredRegistrationError *error = [[FIRInstallationsStoredRegistrationError alloc]
|
|
|
- initWithRegistrationParameters:registrationParameters
|
|
|
- date:date
|
|
|
- APIError:[FIRInstallationsErrorUtil APIErrorWithHTTPCode:400]];
|
|
|
- FIRInstallationsItem *installation = [FIRInstallationsItem createWithRegistrationFailure:error];
|
|
|
- return installation;
|
|
|
-}
|
|
|
-
|
|
|
-- (FIRInstallationsItem *)createFailedToRegisterInstallationWithParameters:
|
|
|
- (FIRInstallationsStoredRegistrationParameters *)registrationParameters {
|
|
|
- return [self createFailedToRegisterInstallationWithParameters:registrationParameters
|
|
|
- date:[NSDate date]];
|
|
|
-}
|
|
|
-
|
|
|
-- (FIRInstallationsStoredRegistrationParameters *)currentRegistrationParameters {
|
|
|
- return [[FIRInstallationsStoredRegistrationParameters alloc] initWithAPIKey:self.APIKey
|
|
|
- projectID:self.projectID];
|
|
|
-}
|
|
|
-
|
|
|
-- (FIRInstallationsStoredRegistrationParameters *)otherRegistrationParameters {
|
|
|
- NSString *APIKey = [@"another" stringByAppendingString:self.APIKey];
|
|
|
- NSString *projectID = [@"another" stringByAppendingString:self.projectID];
|
|
|
- return [[FIRInstallationsStoredRegistrationParameters alloc] initWithAPIKey:APIKey
|
|
|
- projectID:projectID];
|
|
|
-}
|
|
|
-
|
|
|
- (void)expectInstallationStoreToBeRequestedAndReturnInstallation:
|
|
|
(FIRInstallationsItem *)storedInstallation {
|
|
|
OCMExpect([self.mockInstallationsStore installationForAppID:self.appID appName:self.appName])
|