diff --git a/src/MockedClient/HandlerBuilder.php b/src/MockedClient/HandlerBuilder.php index 481512b..ef1897e 100644 --- a/src/MockedClient/HandlerBuilder.php +++ b/src/MockedClient/HandlerBuilder.php @@ -6,10 +6,11 @@ use DoppioGancio\MockedClient\Exception\RouteNotFound; use DoppioGancio\MockedClient\Route\Route; +use GuzzleHttp\Promise\FulfilledPromise; +use GuzzleHttp\Promise\PromiseInterface; use League\Route\Http\Exception\NotFoundException; use League\Route\Router; use Psr\Http\Message\RequestInterface; -use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestFactoryInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; @@ -39,11 +40,11 @@ public function addRoute(Route $route): self } /** - * @return callable(RequestInterface): ResponseInterface + * @return callable(RequestInterface): PromiseInterface */ public function build(): callable { - return function (RequestInterface $request): ResponseInterface { + return function (RequestInterface $request): PromiseInterface { $uri = $request->getUri() ->withScheme('') ->withHost('') @@ -90,7 +91,7 @@ public function build(): callable ] ); - return $response; + return new FulfilledPromise($response); } catch (NotFoundException $e) { $this->logError($e, $request); diff --git a/src/MockedClient/MockedGuzzleClientBuilder.php b/src/MockedClient/MockedGuzzleClientBuilder.php index f5af869..b18b4ef 100644 --- a/src/MockedClient/MockedGuzzleClientBuilder.php +++ b/src/MockedClient/MockedGuzzleClientBuilder.php @@ -5,24 +5,15 @@ namespace DoppioGancio\MockedClient; use GuzzleHttp\Client; -use GuzzleHttp\Exception\ClientException; -use GuzzleHttp\Exception\ServerException; use GuzzleHttp\HandlerStack; use GuzzleHttp\MessageFormatter; use GuzzleHttp\Middleware; -use GuzzleHttp\Promise\FulfilledPromise; -use GuzzleHttp\Promise\PromiseInterface; -use GuzzleHttp\Psr7\Response; -use Psr\Http\Message\RequestInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; -use function assert; - class MockedGuzzleClientBuilder { private HandlerBuilder $handlerBuilder; - private LoggerInterface $logger; /** @var array */ private array $middlewares = []; @@ -32,7 +23,10 @@ public function __construct( ?LoggerInterface $logger = null ) { $this->handlerBuilder = $handlerBuilder; - $this->logger = $logger ?? new NullLogger(); + $this->addMiddleware(Middleware::log( + $logger ?? new NullLogger(), + new MessageFormatter() + )); } public function addMiddleware(callable $middleware): self @@ -42,43 +36,19 @@ public function addMiddleware(callable $middleware): self return $this; } - public function build(): Client + /** @param array $options */ + public function build(array $options = []): Client { $handler = $this->handlerBuilder->build(); - $callback = static function (RequestInterface $request, $options) use ($handler): PromiseInterface { - $response = $handler($request); - assert($response instanceof Response); - if ($response->getStatusCode() >= 400 && $response->getStatusCode() < 500) { - throw new ClientException( - $response->getBody()->getContents(), - $request, - $response - ); - } - - if ($response->getStatusCode() >= 500 && $response->getStatusCode() < 600) { - throw new ServerException( - $response->getBody()->getContents(), - $request, - $response - ); - } - - return new FulfilledPromise($response); - }; - - $handlerStack = new HandlerStack($callback); - - $handlerStack->push(Middleware::log( - $this->logger, - new MessageFormatter() - )); + $handlerStack = HandlerStack::create($handler); foreach ($this->middlewares as $middleware) { $handlerStack->push($middleware); } - return new Client(['handler' => $handlerStack]); + $options['handler'] = $handlerStack; + + return new Client($options); } } diff --git a/tests/ClientBuilderTest.php b/tests/ClientBuilderTest.php index 97da84f..883b49a 100644 --- a/tests/ClientBuilderTest.php +++ b/tests/ClientBuilderTest.php @@ -81,8 +81,12 @@ public function testRouteNotFound(): void public function testClientWithFullUrl(): void { - $response = $this->getMockedClient()->request('GET', 'http://user:password@localhost:8099/country/?page=1&code=it'); - $body = (string) $response->getBody(); + $response = $this->getMockedClient()->request( + 'GET', + 'http://user:password@localhost:8099/country/?page=1&code=it' + ); + + $body = (string) $response->getBody(); $this->assertEquals('{"id":"+39","code":"IT","name":"Italy"}', $body); }