mroca / request-log-bundle
An HTTP requests mock generator symfony bundle.
Installs: 3 892
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 0
Forks: 2
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=5.5.0
- symfony/symfony: ~2.3|~3.0
Requires (Dev)
- fabpot/php-cs-fixer: ^1.11
- phpunit/phpunit: ~4.8
README
An HTTP requests mock generator symfony bundle.
Description
This bundle allows to log HTTP requests and associated responses as json files. This generated json files can be used as API mock in order to test a front app without running the api.
How it works ?
After each request (Kernel::TERMINATE
event) containing the x-generate-response-mock
header, a json file is created
containing the request and the response.
Examples :
GET /categories
app/log/mocks/categories/GET__.json
{ "request": { "uri": "/categories", "method": "GET", "parameters": [], "content": "" }, "response": { "statusCode": 200, "contentType": "application/json", "content": { "@context": "/contexts/Category", "@id": "/categories", "hydra:member": [ {"name": "foo"}, {"name": "bar"} ] } } }
PUT /categories/1 {"foo": "bar"}
app/log/mocks/categories/PUT__1-a5e74.json
{ "request": { "uri": "/categories/1", "method": "PUT", "parameters": [], "content": { "foo": "bar" } }, "response": { "statusCode": 204, "contentType": "application/json", "content": "" } }
File naming strategy
All files are created with the following convention :
uri/METHOD__segments{--sorted-query=string&others}{__<sha1_substr5(sortedJsonContent)>}{__<sha1_substr5(sortedPostParameters)>}.json
Examples :
The filenames query strings can be hashed by setting the `hash_query_params` option to `true`.
For example, `categories/GET__--order[bar]=desc&order[foo]=asc.json` will be `categories/GET__--b0324.json`
The filenames query strings with non-asssocitive arrays are not indexed by default : `?foo[]=bar`.
You can use the indexed format by setting the `use_indexed_associative_array` option to `true` : `?foo[0]=bar`.
See the ResponseLoggerTest file for more examples.
Installation
You can use Composer to install the bundle to your project as a dev dependency :
composer require --dev mroca/request-log-bundle
Then, enable the bundle by updating your app/config/AppKernel.php
file to enable the bundle:
<?php // app/config/AppKernel.php public function registerBundles() { //... if (in_array($this->getEnvironment(), ['dev', 'test'])) { //... $bundles[] = new Mroca\RequestLogBundle\RequestLogBundle(); } return $bundles; }
If necessary, configure the bundle to your needs (example with default values):
# app/config/config_dev.yml mroca_request_log: mocks_dir: %kernel.logs_dir%/mocks/ hash_query_params: false use_indexed_associative_array: false
If your are using the NelmioCorsBundle or another CORS protection, you must add the header in the allowed ones :
nelmio_cors: defaults: allow_headers: ['x-generate-response-mock']
Usage
The request & response logger is not always activated. To log a request, add the x-generate-response-mock
header into your request :
GET /categories HTTP/1.1
Host: api.my.domain
x-generate-response-mock: true
Commands
Some useful commands are available to manager your mocks :
Clear all mocks
app/console mroca:request-log:clear
Save mocks in a target directory
app/console mroca:request-log:dump /tmp/mocksdirtarget
Dev
composer install
Php-cs-fixer
vendor/bin/php-cs-fixer fix
Testing
vendor/bin/phpunit
TODO
- A Guzzle client using this files for functionnals tests
- A Protractor client using this files for AngularJS e2e tests