swisnl/php-http-fixture-client

1.0.0 2018-02-09 13:44 UTC

README

PHP from Packagist Latest Version on Packagist Software License Run Status Coverage Badge

This is a fixture client for PHP-HTTP and is meant for testing purposes. It maps requests to static fixtures.

Install

composer require --dev swisnl/php-http-fixture-client

Usage

// Create client
$responseBuilder = new \Swis\Http\Fixture\ResponseBuilder('/path/to/fixtures');
$client = new \Swis\Http\Fixture\Client($responseBuilder);

// Send request
$response = $client->sendRequest(new Request(...));

Fixture mapping

All requests send using this client are mapped to static fixtures located in the provided path. URLs are transformed to file paths by using the domain and path fragments and (optionally) the method and/or the query params (sorted alphabetically). A list of possible fixture paths is made and handled in order of specificity:

  1. {path}.{query}.{method}.mock
  2. {path}.{query}.mock
  3. {path}.{method}.mock
  4. {path}.mock

Please see the following table for some examples.

URL Method Possible fixtures (in order of specificity)
http://example.com/api/articles/1 GET /path/to/fixtures/example.com/api/articles/1.get.mock
/path/to/fixtures/example.com/api/articles/1.mock
http://example.com/api/articles POST /path/to/fixtures/example.com/api/articles.post.mock
/path/to/fixtures/example.com/api/articles.mock
http://example.com/api/comments?query=json GET /path/to/fixtures/example.com/api/comments.query-json.get.mock
/path/to/fixtures/example.com/api/comments.query-json.mock
/path/to/fixtures/example.com/api/comments.get.mock
/path/to/fixtures/example.com/api/comments.mock
http://example.com/api/comments?query=json&order=id GET /path/to/fixtures/example.com/api/comments.order-id-query-json.get.mock
/path/to/fixtures/example.com/api/comments.order-id-query-json.mock
/path/to/fixtures/example.com/api/comments.get.mock
/path/to/fixtures/example.com/api/comments.mock

Body

The body of a request is loaded directly from a fixture with the file extension .mock. The contents of this file can be anything that is a valid HTTP response, e.g. HTML, JSON or even images. If a fixture can not be found, a MockNotFoundException will be thrown. This exception has a convenience method getPossiblePaths() which lists all file paths that were checked, in order of specificity.

Headers (optional)

The headers of a request are loaded from a fixture with the file extension .headers. This is a simple JSON object with headers, e.g.

{
  "X-Made-With": "PHPUnit"
}

Status (optional)

The status code of a request is loaded from a fixture with the file extension .status. This is a plain file containing only the HTTP status code. If no .status file is found, 200 OK will be used.

Testing

composer test

Security

If you discover any security related issues, please email security@swis.nl instead of using the issue tracker.

License

The MIT License (MIT). Please see License File for more information.