You are here

public function ContentAccessAclTest::testViewAccess in Content Access 8

Test Viewing accessibility with permissions for single users.

File

tests/src/Functional/ContentAccessAclTest.php, line 106

Class

ContentAccessAclTest
Automated BrowserTest Case for using content access module with acl module.

Namespace

Drupal\Tests\content_access\Functional

Code

public function testViewAccess() {

  // Exit test if ACL module could not be enabled.
  if (!\Drupal::moduleHandler()
    ->moduleExists('acl')) {
    $this
      ->pass('No ACL module present, skipping test');
    return;
  }

  // Restrict access to this content type.
  // Enable per node access control.
  $accessPermissions = [
    'view[anonymous]' => FALSE,
    'view[authenticated]' => FALSE,
    'per_node' => TRUE,
  ];
  $this
    ->changeAccessContentType($accessPermissions);

  // Allow access for test user.
  $edit = [
    'acl[view][add]' => $this->testUser
      ->getAccountName(),
  ];
  $this
    ->drupalPostForm('node/' . $this->node1
    ->id() . '/access', $edit, $this
    ->t('edit-acl-view-add-button'));
  $this
    ->drupalPostForm(NULL, [], $this
    ->t('Submit'));

  // Logout admin, try to access the node anonymously.
  $this
    ->drupalLogout();
  $this
    ->drupalGet('node/' . $this->node1
    ->id());
  $this
    ->assertSession()
    ->pageTextContains($this
    ->t('Access denied'));

  // Login test user, view access should be allowed now.
  $this
    ->drupalLogin($this->testUser);
  $this
    ->drupalGet('node/' . $this->node1
    ->id());
  $this
    ->assertSession()
    ->pageTextNotContains($this
    ->t('Access denied'));

  // Login admin and disable per node access.
  $this
    ->drupalLogin($this->adminUser);
  $this
    ->changeAccessPerNode(FALSE);

  // Logout admin, try to access the node anonymously.
  $this
    ->drupalLogout();
  $this
    ->drupalGet('node/' . $this->node1
    ->id());
  $this
    ->assertSession()
    ->pageTextContains($this
    ->t('Access denied'));

  // Login test user, view access should be denied now.
  $this
    ->drupalLogin($this->testUser);
  $this
    ->drupalGet('node/' . $this->node1
    ->id());
  $this
    ->assertSession()
    ->pageTextContains($this
    ->t('Access denied'));
}