function AccessRoleTest::testAccessRole

Same name and namespace in other branches
  1. 9 core/modules/user/tests/src/Functional/Views/AccessRoleTest.php \Drupal\Tests\user\Functional\Views\AccessRoleTest::testAccessRole()
  2. 8.9.x core/modules/user/tests/src/Functional/Views/AccessRoleTest.php \Drupal\Tests\user\Functional\Views\AccessRoleTest::testAccessRole()
  3. 11.x core/modules/user/tests/src/Functional/Views/AccessRoleTest.php \Drupal\Tests\user\Functional\Views\AccessRoleTest::testAccessRole()

Tests role access plugin.

File

core/modules/user/tests/src/Functional/Views/AccessRoleTest.php, line 45

Class

AccessRoleTest
Tests views role access plugin.

Namespace

Drupal\Tests\user\Functional\Views

Code

public function testAccessRole() : void {
  /** @var \Drupal\views\ViewEntityInterface $view */
  $view = \Drupal::entityTypeManager()->getStorage('view')
    ->load('test_access_role');
  $display =& $view->getDisplay('default');
  $display['display_options']['access']['options']['role'] = [
    $this->normalRole => $this->normalRole,
  ];
  $view->save();
  $this->container
    ->get('router.builder')
    ->rebuildIfNeeded();
  $expected = [
    'config' => [
      'user.role.' . $this->normalRole,
    ],
    'module' => [
      'user',
      'views_test_data',
    ],
  ];
  $this->assertSame($expected, $view->calculateDependencies()
    ->getDependencies());
  $executable = Views::executableFactory()->get($view);
  $executable->setDisplay('page_1');
  $access_plugin = $executable->display_handler
    ->getPlugin('access');
  $this->assertInstanceOf(Role::class, $access_plugin);
  // Test the access() method on the access plugin.
  $this->assertFalse($executable->display_handler
    ->access($this->webUser));
  $this->assertTrue($executable->display_handler
    ->access($this->normalUser));
  $this->drupalLogin($this->webUser);
  $this->drupalGet('test-role');
  $this->assertSession()
    ->statusCodeEquals(403);
  $this->assertCacheContext('user.roles');
  $this->drupalLogin($this->normalUser);
  $this->drupalGet('test-role');
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertCacheContext('user.roles');
  // Test allowing multiple roles.
  $view = Views::getView('test_access_role')->storage;
  $display =& $view->getDisplay('default');
  $display['display_options']['access']['options']['role'] = [
    $this->normalRole => $this->normalRole,
    'anonymous' => 'anonymous',
  ];
  $view->save();
  $this->container
    ->get('router.builder')
    ->rebuildIfNeeded();
  // Ensure that the list of roles is sorted correctly, if the generated role
  // ID comes before 'anonymous', see https://www.drupal.org/node/2398259.
  $roles = [
    'user.role.anonymous',
    'user.role.' . $this->normalRole,
  ];
  sort($roles);
  $expected = [
    'config' => $roles,
    'module' => [
      'user',
      'views_test_data',
    ],
  ];
  $this->assertSame($expected, $view->calculateDependencies()
    ->getDependencies());
  $this->drupalLogin($this->webUser);
  $this->drupalGet('test-role');
  $this->assertSession()
    ->statusCodeEquals(403);
  $this->assertCacheContext('user.roles');
  $this->drupalLogout();
  $this->drupalGet('test-role');
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertCacheContext('user.roles');
  $this->drupalLogin($this->normalUser);
  $this->drupalGet('test-role');
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertCacheContext('user.roles');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.