function NodeRevisionPermissionsTest::testNodeRevisionAccessAnyType

Tests general revision access permissions.

File

drupal/core/modules/node/lib/Drupal/node/Tests/NodeRevisionPermissionsTest.php, line 63
Definition of Drupal\node\Tests\NodeRevisionPermissionsTest.

Class

NodeRevisionPermissionsTest
Tests user permissions for node revisions.

Namespace

Drupal\node\Tests

Code

function testNodeRevisionAccessAnyType() {

  // Create three users, one with each revision permission.
  foreach ($this->map as $op => $permission) {

    // Create the user.
    $account = $this
      ->drupalCreateUser(array(
      'access content',
      'edit any page content',
      'delete any page content',
      $permission,
    ));
    $account->op = $op;
    $this->accounts[] = $account;
  }

  // Create an admin account (returns TRUE for all revision permissions).
  $admin_account = $this
    ->drupalCreateUser(array(
    'access content',
    'administer nodes',
  ));
  $admin_account->is_admin = TRUE;
  $this->accounts['admin'] = $admin_account;
  $accounts['admin'] = $admin_account;

  // Create a normal account (returns FALSE for all revision permissions).
  $normal_account = $this
    ->drupalCreateUser();
  $normal_account->op = FALSE;
  $this->accounts[] = $normal_account;
  $accounts[] = $normal_account;
  $revision = $this->node_revisions['page'][1];
  $parameters = array(
    'op' => array_keys($this->map),
    'account' => $this->accounts,
  );
  $permutations = $this
    ->generatePermutations($parameters);
  foreach ($permutations as $case) {

    // Skip this test if there are no revisions for the node.
    if (!($revision
      ->isDefaultRevision() && (db_query('SELECT COUNT(vid) FROM {node_revision} WHERE nid = :nid', array(
      ':nid' => $revision->nid,
    ))
      ->fetchField() == 1 || $case['op'] == 'update' || $case['op'] == 'delete'))) {
      if (!empty($case['account']->is_admin) || user_access($this->map[$case['op']], $case['account'])) {
        $this
          ->assertTrue(_node_revision_access($revision, $case['op'], $case['account']), "{$this->map[$case['op']]} granted.");
      }
      else {
        $this
          ->assertFalse(_node_revision_access($revision, $case['op'], $case['account']), "{$this->map[$case['op']]} not granted.");
      }
    }
  }

  // Test that access is FALSE for a node administrator with an invalid $node
  // or $op parameters.
  $admin_account = $accounts['admin'];
  $this
    ->assertFalse(_node_revision_access($revision, 'invalid-op', $admin_account), '_node_revision_access() returns FALSE with an invalid op.');
}