Version 1
[yaffs-website] / web / core / modules / user / tests / src / Kernel / Views / HandlerFilterPermissionTest.php
1 <?php
2
3 namespace Drupal\Tests\user\Kernel\Views;
4
5 use Drupal\Component\Utility\Html;
6 use Drupal\views\Views;
7
8 /**
9  * Tests the permissions filter handler.
10  *
11  * @group user
12  * @see \Drupal\user\Plugin\views\filter\Permissions
13  */
14 class HandlerFilterPermissionTest extends UserKernelTestBase {
15
16   /**
17    * Views used by this test.
18    *
19    * @var array
20    */
21   public static $testViews = ['test_filter_permission'];
22
23   protected $columnMap;
24
25   /**
26    * Tests the permission filter handler.
27    *
28    * @todo Fix the different commented out tests by fixing the many to one
29    *   handler handling with the NOT operator.
30    */
31   public function testFilterPermission() {
32     $this->setupPermissionTestData();
33
34     $column_map = ['uid' => 'uid'];
35     $view = Views::getView('test_filter_permission');
36
37     // Filter by a non existing permission.
38     $view->initHandlers();
39     $view->filter['permission']->value = ['non_existent_permission'];
40     $this->executeView($view);
41     $this->assertEqual(count($view->result), 4, 'A non existent permission is not filtered so everything is the result.');
42     $expected[] = ['uid' => 1];
43     $expected[] = ['uid' => 2];
44     $expected[] = ['uid' => 3];
45     $expected[] = ['uid' => 4];
46     $this->assertIdenticalResultset($view, $expected, $column_map);
47     $view->destroy();
48
49     // Filter by a permission.
50     $view->initHandlers();
51     $view->filter['permission']->value = ['administer permissions'];
52     $this->executeView($view);
53     $this->assertEqual(count($view->result), 2);
54     $expected = [];
55     $expected[] = ['uid' => 3];
56     $expected[] = ['uid' => 4];
57     $this->assertIdenticalResultset($view, $expected, $column_map);
58     $view->destroy();
59
60     // Filter by not a permission.
61     $view->initHandlers();
62     $view->filter['permission']->operator = 'not';
63     $view->filter['permission']->value = ['administer users'];
64     $this->executeView($view);
65     $this->assertEqual(count($view->result), 3);
66     $expected = [];
67     $expected[] = ['uid' => 1];
68     $expected[] = ['uid' => 2];
69     $expected[] = ['uid' => 3];
70     $this->assertIdenticalResultset($view, $expected, $column_map);
71     $view->destroy();
72
73     // Filter by not multiple permissions, that are present in multiple roles.
74     $view->initHandlers();
75     $view->filter['permission']->operator = 'not';
76     $view->filter['permission']->value = ['administer users', 'administer permissions'];
77     $this->executeView($view);
78     $this->assertEqual(count($view->result), 2);
79     $expected = [];
80     $expected[] = ['uid' => 1];
81     $expected[] = ['uid' => 2];
82     $this->assertIdenticalResultset($view, $expected, $column_map);
83     $view->destroy();
84
85     // Filter by another permission of a role with multiple permissions.
86     $view->initHandlers();
87     $view->filter['permission']->value = ['administer users'];
88     $this->executeView($view);
89     $this->assertEqual(count($view->result), 1);
90     $expected = [];
91     $expected[] = ['uid' => 4];
92     $this->assertIdenticalResultset($view, $expected, $column_map);
93     $view->destroy();
94
95     $view->initDisplay();
96     $view->initHandlers();
97
98     // Test the value options.
99     $value_options = $view->filter['permission']->getValueOptions();
100
101     $permission_by_module = [];
102     $permissions = \Drupal::service('user.permissions')->getPermissions();
103     foreach ($permissions as $name => $permission) {
104       $permission_by_module[$permission['provider']][$name] = $permission;
105     }
106     foreach (['system' => 'System', 'user' => 'User'] as $module => $title) {
107       $expected = array_map(function ($permission) {
108         return Html::escape(strip_tags($permission['title']));
109       }, $permission_by_module[$module]);
110
111       $this->assertEqual($expected, $value_options[$title], 'Ensure the all permissions are available');
112     }
113   }
114
115 }