PageRenderTime 43ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/web/core/modules/user/tests/src/Kernel/Views/HandlerFilterPermissionTest.php

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