Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,23 @@
},

"require": {
"php": "^7.1",
"php": "^7.3",

"beberlei/assert": "^3.2",

"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": {
Expand All @@ -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",
Expand Down
33 changes: 13 additions & 20 deletions src/Container.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,18 @@

use Behat\Behat\HelperContainer\Exception\ServiceNotFoundException;

use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;

use Http\Message\StreamFactory;
use Http\Message\MessageFactory;

use Http\Discovery\UriFactoryDiscovery;
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;

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;
Expand All @@ -42,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)) {
Expand All @@ -66,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);
Expand All @@ -79,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);
Expand Down
17 changes: 0 additions & 17 deletions src/Http/Builder.php

This file was deleted.

41 changes: 24 additions & 17 deletions src/Http/RequestContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,14 @@

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\Message\StreamFactory;
use Http\Message\MessageFactory;

use Http\Discovery\HttpClientDiscovery;

use function trim;
Expand All @@ -22,22 +19,29 @@

class RequestContext implements Context
{
use Builder;

/** @var ?RequestInterface */
private $request;

/** @var mixed[] Query args to add */
private $query;
/** @var array<string, mixed> Query args to add */
private $query = [];

/** @var HttpClient|HttpAsyncClient */
/** @var ClientInterface */
private $client;

public function __construct(PluginClientBuilder $builder, StreamFactory $streamFactory, MessageFactory $messageFactory)
/** @var PluginClientBuilder */
private $builder;

/** @var StreamFactoryInterface */
private $streamFactory;

/** @var RequestFactoryInterface */
private $requestFactory;

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();
}
Expand All @@ -48,7 +52,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());
Expand All @@ -61,14 +65,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;
Expand Down
17 changes: 7 additions & 10 deletions src/HttpHistory/History.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -17,21 +17,20 @@

final class History implements Journal, IteratorAggregate
{
/** @var Tuple[] */
/** @var list<Tuple> */
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);
}
Expand All @@ -42,7 +41,6 @@ public function getLastResponse(): ResponseInterface
throw new NoResponse;
}

/** @var Tuple $tuple */
$tuple = end($this->tuples);
reset($this->tuples);

Expand All @@ -55,8 +53,7 @@ public function getLastResponse(): ResponseInterface
return $response;
}

/** @return iterable<Tuple> */
public function getIterator(): iterable
public function getIterator()
{
yield from $this->tuples;

Expand Down
3 changes: 0 additions & 3 deletions src/Json/Context.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php declare(strict_types=1);
namespace Behapi\Json;

use stdClass;
use DateTimeImmutable;

use Throwable;
Expand All @@ -17,14 +16,12 @@
use Behapi\HttpHistory\History as HttpHistory;

use function sprintf;
use function preg_match;

use function json_decode;
use function json_last_error;
use function json_last_error_msg;

use const JSON_ERROR_NONE;
use const PREG_OFFSET_CAPTURE;

class Context implements BehatContext
{
Expand Down