Version 1
[yaffs-website] / web / core / modules / node / tests / src / Functional / Views / FilterNodeAccessTest.php
diff --git a/web/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php b/web/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
new file mode 100644 (file)
index 0000000..44f08a6
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+namespace Drupal\Tests\node\Functional\Views;
+
+use Drupal\node\Entity\NodeType;
+
+/**
+ * Tests the node_access filter handler.
+ *
+ * @group node
+ * @see \Drupal\node\Plugin\views\filter\Access
+ */
+class FilterNodeAccessTest extends NodeTestBase {
+
+  /**
+   * An array of users.
+   *
+   * @var \Drupal\user\Entity\User[]
+   */
+  protected $users;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['node_access_test'];
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_filter_node_access'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    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->getUsername()]),
+          'type' => 'article',
+          'uid' => $web_user->id(),
+          'private' => (bool) $is_private,
+        ];
+
+        $node = $this->drupalCreateNode($settings);
+        $this->assertEqual($is_private, (int) $node->private->value, 'The private status of the node was properly set in the node_access_test table.');
+      }
+    }
+  }
+
+  /**
+   * Tests the node access filter.
+   */
+  public function testFilterNodeAccess() {
+    $this->drupalLogin($this->users[0]);
+    $this->drupalGet('test_filter_node_access');
+    // Test that the private node of the current user is shown.
+    $this->assertText('Private Article created by ' . $this->users[0]->getUsername());
+    // Test that the private node of the other use isn't shown.
+    $this->assertNoText('Private Article created by ' . $this->users[1]->getUsername());
+    // Test that both public nodes are shown.
+    $this->assertText('Public Article created by ' . $this->users[0]->getUsername());
+    $this->assertText('Public Article created by ' . $this->users[1]->getUsername());
+
+    // Switch users and test the other private node is shown.
+    $this->drupalLogin($this->users[1]);
+    $this->drupalGet('test_filter_node_access');
+    // Test that the private node of the current user is shown.
+    $this->assertText('Private Article created by ' . $this->users[1]->getUsername());
+    // Test that the private node of the other use isn't shown.
+    $this->assertNoText('Private Article created by ' . $this->users[0]->getUsername());
+
+    // Test that a user with administer nodes permission can't see all nodes.
+    $administer_nodes_user = $this->drupalCreateUser(['access content', 'administer nodes']);
+    $this->drupalLogin($administer_nodes_user);
+    $this->drupalGet('test_filter_node_access');
+    $this->assertNoText('Private Article created by ' . $this->users[0]->getUsername());
+    $this->assertNoText('Private Article created by ' . $this->users[1]->getUsername());
+    $this->assertText('Public Article created by ' . $this->users[0]->getUsername());
+    $this->assertText('Public Article created by ' . $this->users[1]->getUsername());
+
+    // Test that a user with bypass node access can see all nodes.
+    $bypass_access_user = $this->drupalCreateUser(['access content', 'bypass node access']);
+    $this->drupalLogin($bypass_access_user);
+    $this->drupalGet('test_filter_node_access');
+    $this->assertText('Private Article created by ' . $this->users[0]->getUsername());
+    $this->assertText('Private Article created by ' . $this->users[1]->getUsername());
+    $this->assertText('Public Article created by ' . $this->users[0]->getUsername());
+    $this->assertText('Public Article created by ' . $this->users[1]->getUsername());
+  }
+
+}