Skip to content

Commit

Permalink
Added expectation to retry error tests and retryHandler
Browse files Browse the repository at this point in the history
  • Loading branch information
kimdv committed Oct 29, 2019
1 parent cb8d93e commit ec5ede7
Showing 1 changed file with 28 additions and 3 deletions.
31 changes: 28 additions & 3 deletions Tests/ApolloTests/HTTPTransportTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ class HTTPTransportTests: XCTestCase {
}

func testErrorDelegateWithErrors() throws {
self.retryCount = 0
self.graphQlErrors = []
let query = HeroNameQuery()
let body = ["errors": [["message": "Test graphql error"]]]
Expand All @@ -206,8 +207,16 @@ class HTTPTransportTests: XCTestCase {
mockSession.response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: nil)
mockSession.data = try JSONSerialization.data(withJSONObject: body, options: .prettyPrinted)
let network = HTTPNetworkTransport(url: url, session: mockSession, delegate: self)
let expectation = self.expectation(description: "Send operation completed")

let _ = network.send(operation: query) { _ in }
let _ = network.send(operation: query) { result in
switch result {
case .success:
expectation.fulfill()
case .failure:
break
}
}

guard let request = mockSession.lastRequest else {
XCTFail("last request should not be nil")
Expand All @@ -217,9 +226,12 @@ class HTTPTransportTests: XCTestCase {
XCTAssertEqual(request.httpMethod, "POST")

XCTAssertEqual(self.graphQlErrors.count, 1)
XCTAssertEqual(retryCount, 1)
wait(for: [expectation], timeout: 1)
}

func testErrorDelegateWithNoErrors() throws {
self.retryCount = 0
self.graphQlErrors = []
let query = HeroNameQuery()
let body = ["errors": []]
Expand All @@ -228,17 +240,27 @@ class HTTPTransportTests: XCTestCase {
mockSession.response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: nil)
mockSession.data = try JSONSerialization.data(withJSONObject: body, options: .prettyPrinted)
let network = HTTPNetworkTransport(url: url, session: mockSession, delegate: self)
let expectation = self.expectation(description: "Send operation completed")

let _ = network.send(operation: query) { _ in }
let _ = network.send(operation: query) { result in
switch result {
case .success:
expectation.fulfill()
case .failure:
break
}
}

guard let request = mockSession.lastRequest else {
XCTFail("last request should not be nil")
return
}
XCTAssertEqual(request.url?.host, network.url.host)
XCTAssertEqual(request.httpMethod, "POST")

XCTAssertEqual(self.retryCount, 0)
XCTAssertEqual(self.graphQlErrors.count, 0)
wait(for: [expectation], timeout: 1)

}
}

Expand Down Expand Up @@ -318,6 +340,9 @@ extension HTTPTransportTests: HTTPNetworkTransportRetryDelegate {

extension HTTPTransportTests: HTTPNetworkTransportGraphQLErrorDelegate {
func networkTransport(_ networkTransport: HTTPNetworkTransport, receivedGraphQLErrors errors: [GraphQLError], retryHandler: @escaping (Bool) -> Void) {
self.retryCount += 1
let shouldRetry = retryCount == 2
self.graphQlErrors = errors
retryHandler(shouldRetry)
}
}

0 comments on commit ec5ede7

Please sign in to comment.