Version 1
[yaffs-website] / web / core / modules / user / tests / src / Kernel / Views / HandlerFilterCurrentUserTest.php
diff --git a/web/core/modules/user/tests/src/Kernel/Views/HandlerFilterCurrentUserTest.php b/web/core/modules/user/tests/src/Kernel/Views/HandlerFilterCurrentUserTest.php
new file mode 100644 (file)
index 0000000..504c633
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+
+namespace Drupal\Tests\user\Kernel\Views;
+
+use Drupal\views\Views;
+use Drupal\Core\Session\AnonymousUserSession;
+
+/**
+ * Tests the current user filter handler.
+ *
+ * @group user
+ * @see \Drupal\user\Plugin\views\filter\Current
+ */
+class HandlerFilterCurrentUserTest extends UserKernelTestBase {
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_filter_current_user'];
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountProxy
+   */
+  protected $currentUser;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp();
+    $this->currentUser = $this->container->get('current_user');
+    $this->setupPermissionTestData();
+  }
+
+  /**
+   * Tests the current user filter handler with anonymous user.
+   */
+  public function testFilterCurrentUserAsAnonymous() {
+    $column_map = ['uid' => 'uid'];
+    $this->currentUser->setAccount(new AnonymousUserSession());
+
+    $view = Views::getView('test_filter_current_user');
+    $view->initHandlers();
+    $view->filter['uid_current']->value = 0;
+    $this->executeView($view);
+    $expected[] = ['uid' => 1];
+    $expected[] = ['uid' => 2];
+    $expected[] = ['uid' => 3];
+    $expected[] = ['uid' => 4];
+    $this->assertIdenticalResultset($view, $expected, $column_map, 'Anonymous account can view all accounts when current filter is FALSE.');
+    $view->destroy();
+
+    $view = Views::getView('test_filter_current_user');
+    $view->initHandlers();
+    $view->filter['uid_current']->value = 1;
+    $this->executeView($view);
+    $expected = [];
+    $this->assertIdenticalResultset($view, $expected, $column_map, 'Anonymous account can view zero accounts when current filter is TRUE.');
+    $view->destroy();
+  }
+
+  /**
+   * Tests the current user filter handler with logged-in user.
+   */
+  public function testFilterCurrentUserAsUser() {
+    $column_map = ['uid' => 'uid'];
+    $user = reset($this->users);
+    $this->currentUser->setAccount($user);
+
+    $view = Views::getView('test_filter_current_user');
+    $view->initHandlers();
+    $view->filter['uid_current']->value = 0;
+    $this->executeView($view);
+    $expected = [];
+    $expected[] = ['uid' => 2];
+    $expected[] = ['uid' => 3];
+    $expected[] = ['uid' => 4];
+    $this->assertIdenticalResultset($view, $expected, $column_map, 'User can view all users except itself when current filter is FALSE.');
+    $view->destroy();
+
+    $view = Views::getView('test_filter_current_user');
+    $view->initHandlers();
+    $view->filter['uid_current']->value = 1;
+    $this->executeView($view);
+    $expected = [];
+    $expected[] = ['uid' => 1];
+    $this->assertIdenticalResultset($view, $expected, $column_map, 'User can only view itself when current filter is TRUE.');
+    $view->destroy();
+  }
+
+}