swisnl / php-http-fixture-client
Fixture client for PHP-HTTP
Installs: 47 142
Dependents: 5
Suggesters: 2
Security: 0
Stars: 8
Watchers: 4
Forks: 2
Open Issues: 0
Requires
- php: ^7.4|^8.0
- php-http/discovery: ^1.14
- php-http/mock-client: ^1.6
- psr/http-factory: ^1.0
- psr/http-message: ^1.0|^2.0
- symfony/string: ^5.4|^6.0|^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.16
- guzzlehttp/guzzle: ^7.3
- guzzlehttp/psr7: ^2.1
- phpunit/phpunit: ^9.5
Suggests
- ext-json: Required to mock response headers.
Provides
README
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:
- {path}.{query}.{method}.mock
- {path}.{query}.mock
- {path}.{method}.mock
- {path}.mock
Please see the following table for some examples.
Domain aliases
The ReponseBuilder
can be instructed to use aliases for domains using setDomainAliases([...])
.
When configured, the provided aliases will be normalized when transforming requests to file paths.
You should provide aliases in the form of ['alias' => 'abstract']
.
Ignored query parameters
The ReponseBuilder
can be instructed to ignore certain query parameters using setIgnoredQueryParameters([...])
.
When configured, the provided parameters will be ignored when transforming requests to file paths.
You should only provide the parameter name, not the value.
This allows you to ignore 'dynamic' parameters that change in each test execution.
Parameters are matched strictly, after url decoding, so 'foo' will match 'foo=bar', but not 'foo[]=bar'.
Strict mode
The ReponseBuilder
can be set to strict mode using setStrictMode(true)
.
When in strict mode, only the first possible fixture path will be used.
This means that both the method and query params must be present in the fixture file name and it does not fall back to other fixture files.
Helper
Please see https://swisnl.github.io/php-http-fixture-client/#helper for the URL helper.
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.
Mocks (advanced)
This client extends php-http/mock-client, which allows you to add custom responses and exceptions that ignore fixture files. Please see the mock-client documentation for more information.
N.B. A default response can not be set because this client uses that under the hood.
Change log
Please see CHANGELOG for more information on what has changed recently.
Testing
$ composer test
Contributing
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
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.
This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.
SWIS ❤️ Open Source
SWIS is a web agency from Leiden, the Netherlands. We love working with open source software.