Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,85 +16,62 @@

#import <XCTest/XCTest.h>

#import <OCMock/OCMock.h>
#import "FBLPromise+Testing.h"
#import "GoogleUtilities/Tests/Unit/Shared/URLSession/FIRURLSessionOCMockStub.h"

#import "GoogleUtilities/Environment/Public/GoogleUtilities/GULURLSessionDataResponse.h"
#import "GoogleUtilities/Environment/Public/GoogleUtilities/NSURLSession+GULPromises.h"

@interface NSURLSession_GULPromisesTests : XCTestCase
@property(nonatomic) NSURLSession *URLSession;
@property(nonatomic) id URLSessionMock;
@end

@implementation NSURLSession_GULPromisesTests

- (void)setUp {
self.URLSession = [NSURLSession
sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]];
self.URLSessionMock = OCMPartialMock(self.URLSession);
}

- (void)tearDown {
[self.URLSessionMock stopMocking];
self.URLSessionMock = nil;
self.URLSession = nil;
}

- (void)testDataTaskPromiseWithRequestSuccess {
NSURL *url = [NSURL URLWithString:@"https://localhost"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSHTTPURLResponse *expectedResponse = [[NSHTTPURLResponse alloc] initWithURL:url
statusCode:200
HTTPVersion:@"1.1"
headerFields:nil];
NSData *expectedBody = [@"body" dataUsingEncoding:NSUTF8StringEncoding];

[FIRURLSessionOCMockStub
stubURLSessionDataTaskWithResponse:expectedResponse
body:expectedBody
error:nil
URLSessionMock:self.URLSessionMock
requestValidationBlock:^BOOL(NSURLRequest *_Nonnull sentRequest) {
return [sentRequest isEqual:request];
}];

__auto_type taskPromise = [self.URLSessionMock gul_dataTaskPromiseWithRequest:request];

XCTAssert(FBLWaitForPromisesWithTimeout(0.5));

XCTAssertTrue(taskPromise.isFulfilled);
// Given
NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"success.txt"];
[[NSFileManager defaultManager] removeItemAtPath:tempPath error:nil];
NSData *expectedData = [@"Hello, world!" dataUsingEncoding:NSUTF8StringEncoding];
BOOL success = [[NSFileManager defaultManager] createFileAtPath:tempPath
contents:expectedData
attributes:nil];
XCTAssert(success);

// When
NSURL *tempURL = [NSURL fileURLWithPath:tempPath];
NSURLRequest *request = [NSURLRequest requestWithURL:tempURL];
__auto_type taskPromise = [self.URLSession gul_dataTaskPromiseWithRequest:request];

// Then
XCTAssert(FBLWaitForPromisesWithTimeout(1.0));
XCTAssert(taskPromise.isFulfilled);
XCTAssertNil(taskPromise.error);
XCTAssertEqualObjects(taskPromise.value.HTTPResponse, expectedResponse);
XCTAssertEqualObjects(taskPromise.value.HTTPBody, expectedBody);
XCTAssertEqualObjects(expectedData, taskPromise.value.HTTPBody);
XCTAssertEqual(taskPromise.value.HTTPResponse.statusCode, 200);
}

- (void)testDataTaskPromiseWithRequestError {
NSURL *url = [NSURL URLWithString:@"https://localhost"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSError *expectedError = [NSError errorWithDomain:@"testDataTaskPromiseWithRequestError"
code:-1
userInfo:nil];

[FIRURLSessionOCMockStub
stubURLSessionDataTaskWithResponse:nil
body:nil
error:expectedError
URLSessionMock:self.URLSessionMock
requestValidationBlock:^BOOL(NSURLRequest *_Nonnull sentRequest) {
return [sentRequest isEqual:request];
}];

__auto_type taskPromise = [self.URLSessionMock gul_dataTaskPromiseWithRequest:request];

XCTAssert(FBLWaitForPromisesWithTimeout(0.5));

XCTAssertTrue(taskPromise.isRejected);
XCTAssertEqualObjects(taskPromise.error, expectedError);
XCTAssertNil(taskPromise.value);
// Given
NSString *tempPath =
[NSTemporaryDirectory() stringByAppendingPathComponent:@"does_not_exist.txt"];
XCTAssertFalse([[NSFileManager defaultManager] fileExistsAtPath:tempPath]);

// When
NSURL *tempURL = [NSURL fileURLWithPath:tempPath];
NSURLRequest *request = [NSURLRequest requestWithURL:tempURL];
__auto_type taskPromise = [self.URLSession gul_dataTaskPromiseWithRequest:request];

// Then
XCTAssert(FBLWaitForPromisesWithTimeout(1.0));
XCTAssert(taskPromise.isRejected);
XCTAssertNotNil(taskPromise.error);
XCTAssertNil(taskPromise.value.HTTPBody);
XCTAssertEqual(taskPromise.value.HTTPResponse.statusCode, 0);
}

@end

This file was deleted.

This file was deleted.