Initial Drupal 11 with DDEV setup
This commit is contained in:
		
							
								
								
									
										83
									
								
								web/core/tests/Drupal/Tests/ApiRequestTrait.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								web/core/tests/Drupal/Tests/ApiRequestTrait.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Drupal\Tests;
 | 
			
		||||
 | 
			
		||||
use Behat\Mink\Driver\BrowserKitDriver;
 | 
			
		||||
use Drupal\Core\Url;
 | 
			
		||||
use GuzzleHttp\RequestOptions;
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Boilerplate for API Functional tests' HTTP requests.
 | 
			
		||||
 *
 | 
			
		||||
 * @internal
 | 
			
		||||
 */
 | 
			
		||||
trait ApiRequestTrait {
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Performs an HTTP request. Wraps the Guzzle HTTP client.
 | 
			
		||||
   *
 | 
			
		||||
   * Why wrap the Guzzle HTTP client? Because we want to keep the actual test
 | 
			
		||||
   * code as simple as possible, and hence not require them to specify the
 | 
			
		||||
   * 'http_errors = FALSE' request option, nor do we want them to have to
 | 
			
		||||
   * convert Drupal Url objects to strings.
 | 
			
		||||
   *
 | 
			
		||||
   * We also don't want to follow redirects automatically, to ensure these tests
 | 
			
		||||
   * are able to detect when redirects are added or removed.
 | 
			
		||||
   *
 | 
			
		||||
   * @param string $method
 | 
			
		||||
   *   HTTP method.
 | 
			
		||||
   * @param \Drupal\Core\Url $url
 | 
			
		||||
   *   URL to request.
 | 
			
		||||
   * @param array $request_options
 | 
			
		||||
   *   Request options to apply.
 | 
			
		||||
   *
 | 
			
		||||
   * @return \Psr\Http\Message\ResponseInterface
 | 
			
		||||
   *   The response.
 | 
			
		||||
   *
 | 
			
		||||
   * @see \GuzzleHttp\ClientInterface::request()
 | 
			
		||||
   */
 | 
			
		||||
  protected function makeApiRequest($method, Url $url, array $request_options): ResponseInterface {
 | 
			
		||||
    // HEAD requests do not have bodies. If one is specified, Guzzle will not
 | 
			
		||||
    // ignore it and the request will be treated as GET with an overridden
 | 
			
		||||
    // method string, and libcurl will expect to read a response body.
 | 
			
		||||
    if ($method === 'HEAD' && array_key_exists('body', $request_options)) {
 | 
			
		||||
      unset($request_options['body']);
 | 
			
		||||
    }
 | 
			
		||||
    $this->refreshVariables();
 | 
			
		||||
    $request_options[RequestOptions::HTTP_ERRORS] = FALSE;
 | 
			
		||||
    $request_options[RequestOptions::ALLOW_REDIRECTS] = FALSE;
 | 
			
		||||
    $request_options = $this->decorateWithXdebugCookie($request_options);
 | 
			
		||||
    $client = $this->getSession()->getDriver()->getClient()->getClient();
 | 
			
		||||
    return $client->request($method, $url->setAbsolute(TRUE)->toString(), $request_options);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds the Xdebug cookie to the request options.
 | 
			
		||||
   *
 | 
			
		||||
   * @param array $request_options
 | 
			
		||||
   *   The request options.
 | 
			
		||||
   *
 | 
			
		||||
   * @return array
 | 
			
		||||
   *   Request options updated with the Xdebug cookie if present.
 | 
			
		||||
   */
 | 
			
		||||
  protected function decorateWithXdebugCookie(array $request_options): array {
 | 
			
		||||
    $session = $this->getSession();
 | 
			
		||||
    $driver = $session->getDriver();
 | 
			
		||||
    if ($driver instanceof BrowserKitDriver) {
 | 
			
		||||
      $client = $driver->getClient();
 | 
			
		||||
      foreach ($client->getCookieJar()->all() as $cookie) {
 | 
			
		||||
        if (isset($request_options[RequestOptions::HEADERS]['Cookie'])) {
 | 
			
		||||
          $request_options[RequestOptions::HEADERS]['Cookie'] .= '; ' . $cookie->getName() . '=' . $cookie->getValue();
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
          $request_options[RequestOptions::HEADERS]['Cookie'] = $cookie->getName() . '=' . $cookie->getValue();
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return $request_options;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user