NodeAccessCacheRedirectWarningTest.php
Namespace
Drupal\Tests\node\FunctionalFile
-
core/
modules/ node/ tests/ src/ Functional/ NodeAccessCacheRedirectWarningTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\node\Functional;
/**
* Tests the node access grants cache context service.
*
* @group node
* @group Cache
*/
class NodeAccessCacheRedirectWarningTest extends NodeTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'block',
'node_access_test_empty',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
node_access_rebuild();
}
/**
* Ensures that node access checks don't cause cache redirect warnings.
*
* @covers \Drupal\node\NodeAccessControlHandler
*/
public function testNodeAccessCacheRedirectWarning() : void {
$this->drupalPlaceBlock('local_tasks_block');
// Ensure that both a node_grants implementation exists, and that the
// current user has 'view own unpublished nodes' permission. Node's access
// control handler bypasses node grants when 'view own published nodes' is
// granted and the node is unpublished, which means that the code path is
// significantly different when a node is published vs. unpublished, and
// that cache contexts vary depend on the state of the node.
$this->assertTrue(\Drupal::moduleHandler()->hasImplementations('node_grants'));
$author = $this->drupalCreateUser([
'create page content',
'edit any page content',
'view own unpublished content',
]);
$this->drupalLogin($author);
$node = $this->drupalCreateNode([
'uid' => $author->id(),
'status' => 0,
]);
$this->drupalGet($node->toUrl());
$this->assertSession()
->statusCodeEquals(200);
$this->assertSession()
->pageTextContains($node->label());
$node->setPublished();
$node->save();
$this->drupalGet($node->toUrl());
$this->assertSession()
->statusCodeEquals(200);
$this->assertSession()
->pageTextContains($node->label());
// When the node has been viewed in both the unpublished and published state
// a cache redirect should exist for the local tasks block. Repeating the
// process of changing the node status and viewing the node will test that
// no stale redirect is found.
$node->setUnpublished();
$node->save();
$this->drupalGet($node->toUrl());
$this->assertSession()
->statusCodeEquals(200);
$this->assertSession()
->pageTextContains($node->label());
$node->setPublished();
$node->save();
$this->drupalGet($node->toUrl());
$this->assertSession()
->statusCodeEquals(200);
$this->assertSession()
->pageTextContains($node->label());
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
NodeAccessCacheRedirectWarningTest | Tests the node access grants cache context service. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.