vadymmarkov / Malibu

:surfer: Malibu is a networking library built on promises
https://vadymmarkov.github.io
Other
414 stars 39 forks source link

Feature: ResponseConvertible and mock provider #60

Closed vadymmarkov closed 7 years ago

vadymmarkov commented 7 years ago

⚠️ Breaking change ⚠️

1) Endpoint protocol was renamed to RequestConvertible in order to make it more descriptive. 2) Mock property is removed from Request. When the mock is created in one single place it is not really flexible for unit testing if you want to inject JSON dictionary or custom file dynamically. That's why MockProvider was introduced in order to improve mock behaviour:

In order to start mocking you have to do the following:

Create a mock provider

// Delay is optional, 0.0 by default.
let mockProvider = MockProvider(delay: 1.0) { endpoint in
  switch endpoint {
    case .fetchBoards:
      // With response data from a file:
      return Mock(fileName: "boards.json")
    case .showBoard(let id):
      // With response from JSON dictionary:
      return Mock(json: ["id": 1, "title": "Balsa Fish"])
    case .updateBoard(let id, let title):
      // `Data` mock:
      return Mock(
        // Needed response
        response: mockedResponse,
        // Response data
        data: responseData,
        // Custom error, `nil` by default
        error: customError
      )
    default:
      return nil
  }
}

Create a networking instance with your mock provider

Both real and fake requests can be used in a mix:

let networking = Networking<SharkywatersEndpoint>(mockProvider: mockProvider)