Skip to content
Snippets Groups Projects
Verified Commit cc218774 authored by Dave Long's avatar Dave Long
Browse files

Issue #3264167 by Spokje, neclimdul, heykarthikwithu, longwave: Remove use of...

Issue #3264167 by Spokje, neclimdul, heykarthikwithu, longwave: Remove use of final Guzzle client class
parent a487817d
Branches
Tags
29 merge requests!12227Issue #3181946 by jonmcl, mglaman,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3600Issue #3344629: Passing null to parameter #1 ($haystack) of type string is deprecated,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!213Issue #2906496: Give Media a menu item under Content,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
services:
http_client.advisory_feed_test:
public: false
class: Drupal\advisory_feed_test\AdvisoriesTestHttpClient
decorates: http_client
arguments: ['@http_client.advisory_feed_test.inner']
class: Drupal\advisory_feed_test\AdvisoryTestClientMiddleware
tags:
- { name: http_client_middleware }
logger.advisory_feed_test:
public: false
class: Drupal\advisory_feed_test\TestSystemLoggerChannel
......
......@@ -2,43 +2,31 @@
namespace Drupal\advisory_feed_test;
use GuzzleHttp\Client;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Psr7\Uri;
use Psr\Http\Message\RequestInterface;
/**
* Provides a decorator service for the 'http_client' service for testing.
* Overrides the User-Agent HTTP header for outbound HTTP requests.
*/
class AdvisoriesTestHttpClient extends Client {
class AdvisoryTestClientMiddleware {
/**
* 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}
* HTTP middleware that replaces URI for advisory requests.
*/
public function get($uri, array $options = []): ResponseInterface {
public function __invoke() {
return function ($handler) {
return function (RequestInterface $request, array $options) use ($handler): PromiseInterface {
$test_end_point = \Drupal::state()->get('advisories_test_endpoint');
if ($test_end_point && strpos($uri, '://updates.drupal.org/psa.json') !== FALSE) {
if ($test_end_point && strpos($request->getUri(), '://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;
$request = $request->withUri(new Uri($test_end_point));
}
return $this->innerClient->get($uri, $options);
return $handler($request, $options);
};
};
}
/**
......
......@@ -2,10 +2,10 @@
namespace Drupal\Tests\system\Functional\SecurityAdvisories;
use Drupal\advisory_feed_test\AdvisoryTestClientMiddleware;
use Drupal\Core\Url;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\Traits\Core\CronRunTrait;
use Drupal\advisory_feed_test\AdvisoriesTestHttpClient;
/**
* Tests of security advisories functionality.
......@@ -116,7 +116,7 @@ protected function writeSettings(array $settings): void {
public function testPsa(): void {
$assert = $this->assertSession();
// Setup test PSA endpoint.
AdvisoriesTestHttpClient::setTestEndpoint($this->workingEndpointMixed);
AdvisoryTestClientMiddleware::setTestEndpoint($this->workingEndpointMixed);
$mixed_advisory_links = [
'Critical Release - SA-2019-02-19',
'Critical Release - PSA-Really Old',
......@@ -153,7 +153,7 @@ public function testPsa(): void {
// Log back in with user with permission to see the advisories.
$this->drupalLogin($this->user);
// Test cache.
AdvisoriesTestHttpClient::setTestEndpoint($this->nonWorkingEndpoint);
AdvisoryTestClientMiddleware::setTestEndpoint($this->nonWorkingEndpoint);
$this->assertAdminPageLinks($mixed_advisory_links, REQUIREMENT_ERROR);
$this->assertStatusReportLinks($mixed_advisory_links, REQUIREMENT_ERROR);
......@@ -166,7 +166,7 @@ public function testPsa(): void {
$assert->pageTextContains('Failed to fetch security advisory data:');
// Test a PSA endpoint that returns invalid JSON.
AdvisoriesTestHttpClient::setTestEndpoint($this->invalidJsonEndpoint, TRUE);
AdvisoryTestClientMiddleware::setTestEndpoint($this->invalidJsonEndpoint, TRUE);
// Assert that are no logged error messages before attempting to fetch the
// invalid endpoint.
$this->assertServiceAdvisoryLoggedErrors([]);
......@@ -180,7 +180,7 @@ public function testPsa(): void {
// Assert the error was logged again.
$this->assertServiceAdvisoryLoggedErrors(['The security advisory JSON feed from Drupal.org could not be decoded.']);
AdvisoriesTestHttpClient::setTestEndpoint($this->workingEndpointPsaOnly, TRUE);
AdvisoryTestClientMiddleware::setTestEndpoint($this->workingEndpointPsaOnly, TRUE);
$psa_advisory_links = [
'Critical Release - PSA-Really Old',
'Generic Module2 project - Moderately critical - Access bypass - SA-CONTRIB-2019-02-02',
......@@ -193,7 +193,7 @@ public function testPsa(): void {
$this->assertStatusReportLinks($psa_advisory_links, REQUIREMENT_WARNING);
$this->assertAdminPageLinks($psa_advisory_links, REQUIREMENT_WARNING);
AdvisoriesTestHttpClient::setTestEndpoint($this->workingEndpointNonPsaOnly, TRUE);
AdvisoryTestClientMiddleware::setTestEndpoint($this->workingEndpointNonPsaOnly, TRUE);
$non_psa_advisory_links = [
'Critical Release - SA-2019-02-19',
'Generic Module1 Project - Moderately critical - Access bypass - SA-CONTRIB-2019-02-02',
......
......@@ -2150,11 +2150,6 @@ parameters:
count: 1
path: modules/system/system.install
-
message: "#^Class Drupal\\\\advisory_feed_test\\\\AdvisoriesTestHttpClient extends @final class GuzzleHttp\\\\Client\\.$#"
count: 1
path: modules/system/tests/modules/advisory_feed_test/src/AdvisoriesTestHttpClient.php
-
message: "#^Variable \\$messages might not be defined\\.$#"
count: 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment