From e737e17c0765450062a83984073723fd6d5e7caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Baptiste=20Clavi=C3=A9?= Date: Tue, 4 Feb 2020 10:49:29 +0100 Subject: [PATCH 1/6] Bump to php 7.3 minimum --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 91dd475..77790a7 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ }, "require": { - "php": "^7.1", + "php": "^7.3", "beberlei/assert": "^3.2", From 0c79771a87445a5f6a81f21861b6c4307de6cb4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Baptiste=20Clavi=C3=A9?= Date: Tue, 4 Feb 2020 11:37:22 +0100 Subject: [PATCH 2/6] Use PSR interfaces --- composer.json | 15 ++++++++------- src/HttpHistory/History.php | 17 +++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/composer.json b/composer.json index 77790a7..666de43 100644 --- a/composer.json +++ b/composer.json @@ -25,16 +25,17 @@ "symfony/property-access": "^3.1 || ^4.0 || ^5.0", + "psr/http-client": "^1.0", + "psr/http-client-implementation": "^1.0", + "psr/http-message": "^1.0", "psr/http-message-implementation": "^1.0", - "php-http/httplug": "^1.0", - "php-http/discovery": "^1.0", - "php-http/client-common": "^1.4", - "php-http/message-factory": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-factory-implementation": "^1.0", - "php-http/client-implementation": "^1.0", - "php-http/message-factory-implementation": "^1.0" + "php-http/discovery": "^1.0", + "php-http/client-common": "^2.0" }, "suggest": { @@ -57,8 +58,8 @@ "coduo/php-matcher": "^2.3 || ^3.0", "php-http/message": "^1.0", - "php-http/mock-client": "^0.3", + "symfony/http-client": "^4.3 || ^5.0", "symfony/var-dumper": "^2.8 || ^3.3 || ^4.0", "phpstan/phpstan": "^0.10", diff --git a/src/HttpHistory/History.php b/src/HttpHistory/History.php index 3926f38..5a2640d 100644 --- a/src/HttpHistory/History.php +++ b/src/HttpHistory/History.php @@ -5,10 +5,10 @@ use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; +use Psr\Http\Client\ClientExceptionInterface; use Http\Client\Common\Plugin\Journal; -use Http\Client\Exception; use Http\Client\Exception\HttpException; use function end; @@ -17,21 +17,20 @@ final class History implements Journal, IteratorAggregate { - /** @var Tuple[] */ + /** @var list */ private $tuples = []; - /** {@inheritDoc} */ - public function addSuccess(RequestInterface $request, ResponseInterface $response) + public function addSuccess(RequestInterface $request, ResponseInterface $response): void { $this->tuples[] = new Tuple($request, $response); } - /** {@inheritDoc} */ - public function addFailure(RequestInterface $request, Exception $exception) + public function addFailure(RequestInterface $request, ClientExceptionInterface $exception): void { $response = $exception instanceof HttpException ? $exception->getResponse() - : null; + : null + ; $this->tuples[] = new Tuple($request, $response); } @@ -42,7 +41,6 @@ public function getLastResponse(): ResponseInterface throw new NoResponse; } - /** @var Tuple $tuple */ $tuple = end($this->tuples); reset($this->tuples); @@ -55,8 +53,7 @@ public function getLastResponse(): ResponseInterface return $response; } - /** @return iterable */ - public function getIterator(): iterable + public function getIterator() { yield from $this->tuples; From 1e7c0b9f7c4015a9da1cfae83d9b31d7c804ae70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Baptiste=20Clavi=C3=A9?= Date: Tue, 4 Feb 2020 14:18:25 +0100 Subject: [PATCH 3/6] Remove unused namespaces --- src/Container.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Container.php b/src/Container.php index a5077e5..68c957e 100644 --- a/src/Container.php +++ b/src/Container.php @@ -5,9 +5,6 @@ use Behat\Behat\HelperContainer\Exception\ServiceNotFoundException; -use Symfony\Component\EventDispatcher\EventDispatcher; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; - use Http\Message\StreamFactory; use Http\Message\MessageFactory; @@ -15,7 +12,6 @@ use Http\Discovery\StreamFactoryDiscovery; use Http\Discovery\MessageFactoryDiscovery; -use Http\Client\Common\PluginClient; use Http\Client\Common\Plugin\BaseUriPlugin; use Http\Client\Common\Plugin\HistoryPlugin; use Http\Client\Common\Plugin\ContentLengthPlugin; From 2ded6d7495365d605d47193bba08aa7fdb2a2800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Baptiste=20Clavi=C3=A9?= Date: Tue, 4 Feb 2020 14:51:37 +0100 Subject: [PATCH 4/6] Use PSR-17 factories --- src/Container.php | 29 +++++++++++++---------------- src/Http/Builder.php | 10 +++++----- src/Http/RequestContext.php | 25 ++++++++++++++----------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/Container.php b/src/Container.php index 68c957e..8efcc0d 100644 --- a/src/Container.php +++ b/src/Container.php @@ -5,13 +5,6 @@ use Behat\Behat\HelperContainer\Exception\ServiceNotFoundException; -use Http\Message\StreamFactory; -use Http\Message\MessageFactory; - -use Http\Discovery\UriFactoryDiscovery; -use Http\Discovery\StreamFactoryDiscovery; -use Http\Discovery\MessageFactoryDiscovery; - use Http\Client\Common\Plugin\BaseUriPlugin; use Http\Client\Common\Plugin\HistoryPlugin; use Http\Client\Common\Plugin\ContentLengthPlugin; @@ -19,6 +12,11 @@ use Behapi\Http\PluginClientBuilder; use Behapi\HttpHistory\History as HttpHistory; +use Http\Discovery\Psr17FactoryDiscovery; + +use Psr\Http\Message\RequestFactoryInterface; +use Psr\Http\Message\StreamFactoryInterface; + use function bin2hex; use function in_array; use function random_bytes; @@ -38,20 +36,18 @@ public function __construct(HttpHistory $history, string $baseUrl) $this->services[HttpHistory::class] = $history; } - /** {@inheritDoc} */ public function has($id) { static $services = [ HttpHistory::class, - StreamFactory::class, - MessageFactory::class, PluginClientBuilder::class, + StreamFactoryInterface::class, + RequestFactoryInterface::class, ]; return in_array($id, $services, true); } - /** {@inheritDoc} */ public function get($id) { if (array_key_exists($id, $this->services)) { @@ -62,11 +58,11 @@ public function get($id) case PluginClientBuilder::class: return $this->services[$id] = $this->getPluginClientBuilder(); - case MessageFactory::class: - return $this->services[$id] = MessageFactoryDiscovery::find(); + case RequestFactoryInterface::class: + return $this->services[$id] = Psr17FactoryDiscovery::findRequestFactory(); - case StreamFactory::class: - return $this->services[$id] = StreamFactoryDiscovery::find(); + case StreamFactoryInterface::class: + return $this->services[$id] = Psr17FactoryDiscovery::findStreamFactory(); } throw new ServiceNotFoundException("Service {$id} is not available", $id); @@ -75,7 +71,8 @@ public function get($id) private function getPluginClientBuilder(): PluginClientBuilder { $builder = new PluginClientBuilder; - $uriFactory = UriFactoryDiscovery::find(); + $uriFactory = Psr17FactoryDiscovery::findUrlFactory(); + $baseUri = $uriFactory->createUri($this->baseUrl); assert($this->services[HttpHistory::class] instanceof HttpHistory); diff --git a/src/Http/Builder.php b/src/Http/Builder.php index c13a25c..929e7ba 100644 --- a/src/Http/Builder.php +++ b/src/Http/Builder.php @@ -1,17 +1,17 @@ Query args to add */ + private $query = []; /** @var HttpClient|HttpAsyncClient */ private $client; - public function __construct(PluginClientBuilder $builder, StreamFactory $streamFactory, MessageFactory $messageFactory) + public function __construct(PluginClientBuilder $builder, StreamFactoryInterface $streamFactory, RequestFactoryInterface $requestFactory) { $this->builder = $builder; $this->streamFactory = $streamFactory; - $this->messageFactory = $messageFactory; + $this->requestFactory = $requestFactory; $this->client = HttpClientDiscovery::find(); } @@ -48,7 +48,7 @@ final public function create_a_request(string $method, string $url): void $url = trim($url); $this->query = []; - $this->request = $this->messageFactory->createRequest(strtoupper($method), $url); + $this->request = $this->requestFactory->createRequest(strtoupper($method), $url); // let's set a default content-type $this->set_the_content_type($this->getDefaultContentType()); @@ -61,14 +61,17 @@ final public function create_a_request(string $method, string $url): void * * Shortcut for `When I create a X request to Then send the request` */ - final public function send_a_request($method, $url): void + final public function send_a_request(string $method, string $url): void { $this->create_a_request($method, $url); $this->send_request(); } - /** @When I add/set the value :value to the parameter :parameter */ - final public function add_a_parameter(string $parameter, string $value): void + /** + * @param mixed $value + * @When I add/set the value :value to the parameter :parameter + */ + final public function add_a_parameter(string $parameter, $value): void { if (!isset($this->query[$parameter])) { $this->query[$parameter] = $value; From c9fba0eaf4f1d6f96a01aa6bbdba57cbacc6c662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Baptiste=20Clavi=C3=A9?= Date: Tue, 4 Feb 2020 15:27:44 +0100 Subject: [PATCH 5/6] Use proper typehint for client property --- src/Http/RequestContext.php | 11 ++++------- src/Json/Context.php | 3 --- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Http/RequestContext.php b/src/Http/RequestContext.php index d473625..2f63539 100644 --- a/src/Http/RequestContext.php +++ b/src/Http/RequestContext.php @@ -3,19 +3,16 @@ use RuntimeException; +use Psr\Http\Client\ClientInterface; use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\RequestFactoryInterface; +use Psr\Http\Message\StreamFactoryInterface; use Behat\Behat\Context\Context; use Behat\Gherkin\Node\TableNode; -use Http\Client\HttpClient; -use Http\Client\HttpAsyncClient; - use Http\Discovery\HttpClientDiscovery; -use Psr\Http\Message\RequestFactoryInterface; -use Psr\Http\Message\StreamFactoryInterface; - use function trim; use function is_array; use function http_build_query; @@ -30,7 +27,7 @@ class RequestContext implements Context /** @var array Query args to add */ private $query = []; - /** @var HttpClient|HttpAsyncClient */ + /** @var ClientInterface */ private $client; public function __construct(PluginClientBuilder $builder, StreamFactoryInterface $streamFactory, RequestFactoryInterface $requestFactory) diff --git a/src/Json/Context.php b/src/Json/Context.php index 09528ba..a08e9e4 100644 --- a/src/Json/Context.php +++ b/src/Json/Context.php @@ -1,7 +1,6 @@ Date: Tue, 4 Feb 2020 15:37:06 +0100 Subject: [PATCH 6/6] Remerge the Builder trait into the RequestContext --- src/Http/Builder.php | 17 ----------------- src/Http/RequestContext.php | 11 +++++++++-- 2 files changed, 9 insertions(+), 19 deletions(-) delete mode 100644 src/Http/Builder.php diff --git a/src/Http/Builder.php b/src/Http/Builder.php deleted file mode 100644 index 929e7ba..0000000 --- a/src/Http/Builder.php +++ /dev/null @@ -1,17 +0,0 @@ -builder = $builder;