AdvisoriesTestHttpClient.php

Namespace

Drupal\advisory_feed_test

File

core/modules/system/tests/modules/advisory_feed_test/src/AdvisoriesTestHttpClient.php

View source
<?php

namespace Drupal\advisory_feed_test;

use GuzzleHttp\Client;
use Psr\Http\Message\ResponseInterface;

/**
 * Provides a decorator service for the 'http_client' service for testing.
 */
class AdvisoriesTestHttpClient extends Client {
    
    /**
     * The decorated http_client service.
     *
     * @var \GuzzleHttp\Client
     */
    protected $innerClient;
    
    /**
     * Constructs an AdvisoriesTestHttpClient object.
     *
     * @param \GuzzleHttp\Client $client
     *   The decorated http_client service.
     */
    public function __construct(Client $client) {
        $this->innerClient = $client;
    }
    
    /**
     * {@inheritdoc}
     */
    public function get($uri, array $options = []) : ResponseInterface {
        $test_end_point = \Drupal::state()->get('advisories_test_endpoint');
        if ($test_end_point && strpos($uri, '://updates.drupal.org/psa.json') !== FALSE) {
            // Only override $uri if it matches the advisories JSON feed to avoid
            // changing any other uses of the 'http_client' service during tests with
            // this module installed.
            $uri = $test_end_point;
        }
        return $this->innerClient
            ->get($uri, $options);
    }
    
    /**
     * Sets the test endpoint for the advisories JSON feed.
     *
     * @param string $test_endpoint
     *   The test endpoint.
     * @param bool $delete_stored_response
     *   Whether to delete stored feed response.
     */
    public static function setTestEndpoint(string $test_endpoint, bool $delete_stored_response = FALSE) : void {
        \Drupal::state()->set('advisories_test_endpoint', $test_endpoint);
        if ($delete_stored_response) {
            \Drupal::service('system.sa_fetcher')->deleteStoredResponse();
        }
    }

}

Classes

Title Deprecated Summary
AdvisoriesTestHttpClient Provides a decorator service for the 'http_client' service for testing.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.