@@ -12,7 +12,7 @@ Mock for PSR-18 HTTP client
1212Add package to project
1313
1414``` bash
15- composer require --dev webclient/fake-http-client:^2 .0
15+ composer require --dev webclient/fake-http-client:^3 .0
1616```
1717
1818Set autoload
@@ -40,16 +40,56 @@ $client = new FakeHttpClient($handler);
4040
4141$response = $client->sendRequest($request);
4242```
43+ # Handlers
4344
44- # Routing
45+ ## SpecHandler
46+
47+ This package provides universal handler ` \Webclient\Fake\Handler\SpecHandler\SpecHandler `
48+ and builder ` \Webclient\Fake\Handler\SpecHandler\SpecHandlerBuilder ` .
49+ With it, you can customize the client for almost any need.
50+
51+ ``` php
52+ <?php
53+
54+ use Psr\Http\Message\ResponseInterface;
55+ use Webclient\Fake\FakeHttpClient;
56+ use Webclient\Fake\Handler\SpecHandler\SpecHandlerBuilder;
57+ use Webclient\Fake\Handler\SpecHandler\Rule;
58+
59+ $builder = SpecHandlerBuilder::create();
60+
61+ $builder
62+ ->route(function (Rule $rule) {
63+ $rule->notEqual('header.authorization', 'bearer xxx');
64+ $rule->oneOf(function (Rule $rule) {
65+ $rule->allOf(function (Rule $rule) {
66+ $rule->equal('uri.path', '/api/v1/posts');
67+ $rule->equal('method', 'POST');
68+ });
69+ $rule->allOf(function (Rule $rule) {
70+ $rule->match('uri.path', '^/api/v1/posts/([a-zA-Z0-9\-]+)$');
71+ $rule->match('method', '^(PUT|DELETE)$');
72+ });
73+ });
74+ })
75+ ->response(function (ResponseInterface $response): ResponseInterface {
76+ return $response->withStatus(403);
77+ });
78+
79+ $handler = $builder->build();
80+
81+ $client = new FakeHttpClient($handler);
82+ ```
83+
84+ ## SimpleRoutingHandler
4585
4686This package provides simple routing.
4787
4888``` php
4989<?php
5090
5191use Webclient\Fake\FakeHttpClient;
52- use Webclient\Fake\Handler\SimpleRoutingHandler;
92+ use Webclient\Fake\Handler\SimpleRoutingHandler\SimpleRoutingHandler ;
5393use Psr\Http\Message\RequestInterface;
5494use Psr\Http\Server\RequestHandlerInterface;
5595
0 commit comments