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;
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc