diff options
Diffstat (limited to 'Functions/Example/IntegrationTests/FIRIntegrationTests.m')
-rw-r--r-- | Functions/Example/IntegrationTests/FIRIntegrationTests.m | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/Functions/Example/IntegrationTests/FIRIntegrationTests.m b/Functions/Example/IntegrationTests/FIRIntegrationTests.m new file mode 100644 index 0000000..15a5af5 --- /dev/null +++ b/Functions/Example/IntegrationTests/FIRIntegrationTests.m @@ -0,0 +1,190 @@ +// 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; + +#import "FIRError.h" +#import "FIRFunctions+Internal.h" +#import "FIRFunctions.h" +#import "FIRHTTPSCallable.h" +#import "FUNFakeApp.h" +#import "FUNFakeInstanceID.h" + +@interface FIRIntegrationTests : XCTestCase { + FIRFunctions *_functions; +} +@end + +@implementation FIRIntegrationTests + +- (void)setUp { + [super setUp]; + id app = [[FUNFakeApp alloc] initWithProjectID:@"functions-integration-test"]; + _functions = [FIRFunctions functionsForApp:app]; + [_functions useLocalhost]; +} + +- (void)tearDown { + [super tearDown]; +} + +- (void)testData { + NSDictionary *data = @{ + @"bool" : @YES, + @"int" : @2, + @"long" : @3L, + @"string" : @"four", + @"array" : @[ @5, @6 ], + @"null" : [NSNull null], + }; + + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"dataTest"]; + [function callWithObject:data + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNil(error); + XCTAssertEqualObjects(@"stub response", result.data[@"message"]); + XCTAssertEqualObjects(@42, result.data[@"code"]); + XCTAssertEqualObjects(@420L, result.data[@"long"]); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testScalar { + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"scalarTest"]; + [function callWithObject:@17 + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNil(error); + XCTAssertEqualObjects(@76, result.data); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testToken { + // Recreate _functions with a token. + id app = [[FUNFakeApp alloc] initWithProjectID:@"functions-integration-test" token:@"token"]; + FIRFunctions *functions = [FIRFunctions functionsForApp:app]; + [functions useLocalhost]; + + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [functions HTTPSCallableWithName:@"tokenTest"]; + [function callWithObject:@{} + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNil(error); + XCTAssertEqualObjects(@{}, result.data); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testInstanceID { + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"instanceIdTest"]; + [function callWithObject:@{} + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNil(error); + XCTAssertEqualObjects(@{}, result.data); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testNull { + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"nullTest"]; + [function callWithObject:[NSNull null] + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertEqualObjects([NSNull null], result.data); + XCTAssertNil(error); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; + + // Test the version with no arguments. + [function + callWithCompletion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertEqualObjects([NSNull null], result.data); + XCTAssertNil(error); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testMissingResult { + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"missingResultTest"]; + [function + callWithCompletion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNotNil(error); + XCTAssertEqual(FIRFunctionsErrorCodeInternal, error.code); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testUnhandledError { + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"unhandledErrorTest"]; + [function callWithObject:@{} + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNotNil(error); + XCTAssertEqual(FIRFunctionsErrorCodeInternal, error.code); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testUnknownError { + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"unknownErrorTest"]; + [function callWithObject:@{} + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNotNil(error); + XCTAssertEqual(FIRFunctionsErrorCodeInternal, error.code); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testExplicitError { + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"explicitErrorTest"]; + [function callWithObject:@{} + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNotNil(error); + XCTAssertEqual(FIRFunctionsErrorCodeOutOfRange, error.code); + XCTAssertEqualObjects(@"explicit nope", error.userInfo[NSLocalizedDescriptionKey]); + NSDictionary *expectedDetails = @{ @"start" : @10, @"end" : @20, @"long" : @30L }; + XCTAssertEqualObjects(expectedDetails, error.userInfo[FIRFunctionsErrorDetailsKey]); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +- (void)testHttpError { + XCTestExpectation *expectation = [[XCTestExpectation alloc] init]; + FIRHTTPSCallable *function = [_functions HTTPSCallableWithName:@"httpErrorTest"]; + [function callWithObject:@{} + completion:^(FIRHTTPSCallableResult *_Nullable result, NSError *_Nullable error) { + XCTAssertNotNil(error); + XCTAssertEqual(FIRFunctionsErrorCodeInvalidArgument, error.code); + [expectation fulfill]; + }]; + [self waitForExpectations:@[ expectation ] timeout:10]; +} + +@end |