function BigPipeTest::assertBigPipeNoJsMetaRefreshRedirect

Same name and namespace in other branches
  1. 8.9.x core/modules/big_pipe/tests/src/Functional/BigPipeTest.php \Drupal\Tests\big_pipe\Functional\BigPipeTest::assertBigPipeNoJsMetaRefreshRedirect()
  2. 10 core/modules/big_pipe/tests/src/Functional/BigPipeTest.php \Drupal\Tests\big_pipe\Functional\BigPipeTest::assertBigPipeNoJsMetaRefreshRedirect()
  3. 11.x core/modules/big_pipe/tests/src/Functional/BigPipeTest.php \Drupal\Tests\big_pipe\Functional\BigPipeTest::assertBigPipeNoJsMetaRefreshRedirect()

Calls ::performMetaRefresh() and asserts the responses.

@internal

1 call to BigPipeTest::assertBigPipeNoJsMetaRefreshRedirect()
BigPipeTest::testNoJsDetection in core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
Tests BigPipe's no-JS detection.

File

core/modules/big_pipe/tests/src/Functional/BigPipeTest.php, line 484

Class

BigPipeTest
Tests BigPipe's no-JS detection & response delivery (with and without JS).

Namespace

Drupal\Tests\big_pipe\Functional

Code

protected function assertBigPipeNoJsMetaRefreshRedirect() : void {
    $original_url = $this->getSession()
        ->getCurrentUrl();
    // Disable automatic following of redirects by the HTTP client, so that this
    // test can analyze the response headers of each redirect response.
    $this->getSession()
        ->getDriver()
        ->getClient()
        ->followRedirects(FALSE);
    $this->performMetaRefresh();
    $headers[0] = $this->getSession()
        ->getResponseHeaders();
    $statuses[0] = $this->getSession()
        ->getStatusCode();
    $this->performMetaRefresh();
    $headers[1] = $this->getSession()
        ->getResponseHeaders();
    $statuses[1] = $this->getSession()
        ->getStatusCode();
    $this->getSession()
        ->getDriver()
        ->getClient()
        ->followRedirects(TRUE);
    $this->assertEquals($original_url, $this->getSession()
        ->getCurrentUrl(), 'Redirected back to the original location.');
    // First response: redirect.
    $this->assertEquals(302, $statuses[0], 'The first response was a 302 (redirect).');
    $this->assertStringStartsWith('big_pipe_nojs=1', $headers[0]['Set-Cookie'][0], 'The first response sets the big_pipe_nojs cookie.');
    $this->assertEquals($original_url, $headers[0]['Location'][0], 'The first response redirected back to the original page.');
    $this->assertEmpty(array_diff([
        'cookies:big_pipe_nojs',
        'session.exists',
    ], explode(' ', $headers[0]['X-Drupal-Cache-Contexts'][0])), 'The first response varies by the "cookies:big_pipe_nojs" and "session.exists" cache contexts.');
    $this->assertFalse(isset($headers[0]['Surrogate-Control']), 'The first response has no "Surrogate-Control" header.');
    // Second response: redirect followed.
    $this->assertEquals(200, $statuses[1], 'The second response was a 200.');
    $this->assertEmpty(array_diff([
        'cookies:big_pipe_nojs',
        'session.exists',
    ], explode(' ', $headers[0]['X-Drupal-Cache-Contexts'][0])), 'The second response varies by the "cookies:big_pipe_nojs" and "session.exists" cache contexts.');
    $this->assertEquals('no-store, content="BigPipe/1.0"', $headers[1]['Surrogate-Control'][0], 'The second response has a "Surrogate-Control" header.');
    // Check that the <meta> refresh is absent, only one redirect ever happens.
    $this->assertSession()
        ->responseNotContains('<noscript><meta http-equiv="Refresh" content="0; URL=');
}

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