external_entity-1.0.x-dev/tests/src/Concerns/HttpClient.php
tests/src/Concerns/HttpClient.php
<?php
declare(strict_types=1);
namespace Drupal\Tests\external_entity\Concerns;
use GuzzleHttp\Client;
use GuzzleHttp\Middleware;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\MockHandler;
use Drupal\Core\Http\ClientFactory;
use Psr\Http\Message\ResponseInterface;
/**
* Define the trait for the HTTP client mocking.
*/
trait HttpClient {
/**
* @param \Psr\Http\Message\ResponseInterface|array $response
* @param array $requestHistory
*
* @return \GuzzleHttp\Client
*/
protected function mockHttpClient(
ResponseInterface|array $response,
array &$requestHistory = []
): Client {
$mockHandler = new MockHandler(!is_array($response)
? [$response]
: $response);
$handlerStack = HandlerStack::create($mockHandler);
$handlerStack->push(
Middleware::history($requestHistory)
);
return new Client(['handler' => $handlerStack]);
}
/**
* @param \Psr\Http\Message\ResponseInterface|array $response
* @param array $requestHistory
*
* @return \Drupal\Core\Http\ClientFactory
* @throws \PHPUnit\Framework\MockObject\Exception
*/
protected function mockHttpClientFactory(
ResponseInterface|array $response,
array &$requestHistory = []
): ClientFactory {
$mockClient = $this->mockHttpClient($response, $requestHistory);
$mockFactory = $this->createMock(ClientFactory::class);
$mockFactory->method('fromOptions')
->willReturn($mockClient);
$this->container->set('http_client_factory', $mockFactory);
return $mockFactory;
}
}
