View source
<?php
namespace Drupal\Tests\node\Functional\Views;
use Drupal\node\Entity\NodeType;
class FilterNodeAccessTest extends NodeTestBase {
protected $users;
protected static $modules = [
'node_access_test',
];
protected $defaultTheme = 'stark';
public static $testViews = [
'test_filter_node_access',
];
protected function setUp($import_test_views = TRUE) : void {
parent::setUp($import_test_views);
$this
->drupalCreateContentType([
'type' => 'article',
'name' => 'Article',
]);
node_access_test_add_field(NodeType::load('article'));
node_access_rebuild();
\Drupal::state()
->set('node_access_test.private', TRUE);
$num_simple_users = 2;
$this->users = [];
for ($i = 0; $i < $num_simple_users; $i++) {
$this->users[$i] = $this
->drupalCreateUser([
'access content',
'create article content',
]);
}
foreach ($this->users as $web_user) {
$this
->drupalLogin($web_user);
foreach ([
0 => 'Public',
1 => 'Private',
] as $is_private => $type) {
$settings = [
'body' => [
[
'value' => $type . ' node',
'format' => filter_default_format(),
],
],
'title' => t('@private_public Article created by @user', [
'@private_public' => $type,
'@user' => $web_user
->getAccountName(),
]),
'type' => 'article',
'uid' => $web_user
->id(),
'private' => (bool) $is_private,
];
$node = $this
->drupalCreateNode($settings);
$this
->assertEquals($is_private, (int) $node->private->value, 'The private status of the node was properly set in the node_access_test table.');
}
}
}
public function testFilterNodeAccess() {
$this
->drupalLogin($this->users[0]);
$this
->drupalGet('test_filter_node_access');
$this
->assertSession()
->pageTextContains('Private Article created by ' . $this->users[0]
->getAccountName());
$this
->assertSession()
->pageTextNotContains('Private Article created by ' . $this->users[1]
->getAccountName());
$this
->assertSession()
->pageTextContains('Public Article created by ' . $this->users[0]
->getAccountName());
$this
->assertSession()
->pageTextContains('Public Article created by ' . $this->users[1]
->getAccountName());
$this
->drupalLogin($this->users[1]);
$this
->drupalGet('test_filter_node_access');
$this
->assertSession()
->pageTextContains('Private Article created by ' . $this->users[1]
->getAccountName());
$this
->assertSession()
->pageTextNotContains('Private Article created by ' . $this->users[0]
->getAccountName());
$administer_nodes_user = $this
->drupalCreateUser([
'access content',
'administer nodes',
]);
$this
->drupalLogin($administer_nodes_user);
$this
->drupalGet('test_filter_node_access');
$this
->assertSession()
->pageTextNotContains('Private Article created by ' . $this->users[0]
->getAccountName());
$this
->assertSession()
->pageTextNotContains('Private Article created by ' . $this->users[1]
->getAccountName());
$this
->assertSession()
->pageTextContains('Public Article created by ' . $this->users[0]
->getAccountName());
$this
->assertSession()
->pageTextContains('Public Article created by ' . $this->users[1]
->getAccountName());
$bypass_access_user = $this
->drupalCreateUser([
'access content',
'bypass node access',
]);
$this
->drupalLogin($bypass_access_user);
$this
->drupalGet('test_filter_node_access');
$this
->assertSession()
->pageTextContains('Private Article created by ' . $this->users[0]
->getAccountName());
$this
->assertSession()
->pageTextContains('Private Article created by ' . $this->users[1]
->getAccountName());
$this
->assertSession()
->pageTextContains('Public Article created by ' . $this->users[0]
->getAccountName());
$this
->assertSession()
->pageTextContains('Public Article created by ' . $this->users[1]
->getAccountName());
}
}