You are here

public function WebformWorkflowPermissionsTestCase::testViewEdit in Webform Workflow 7

Test view and edit permissions.

File

tests/webform_workflow_permissions.test, line 35
Workflow permissions tests.

Class

WebformWorkflowPermissionsTestCase
@file Workflow permissions tests.

Code

public function testViewEdit() {

  // Create a webform.
  $owner = $this
    ->drupalCreateUser(array(
    'create webform content',
    'edit own webform content',
    'access own webform results',
  ));
  $node = $this
    ->createDummyWebform(array(
    'uid' => $owner->uid,
  ));

  // Add two states to the webform.
  $state1 = $this
    ->createDummyState();
  $state2 = $this
    ->createDummyState();
  $this
    ->addStateToWebform($state1, $node);
  $this
    ->addStateToWebform($state2, $node);

  // Create two users, submitter 1 and 2. Submitter 1 has permission to access
  // his/her own webform submissions. Submitter 2 does not have any special
  // permissions.
  $submitter1 = $this
    ->drupalCreateUser(array(
    'access own webform submissions',
    'edit own webform submissions',
  ));
  $submitter2 = $this
    ->drupalCreateUser();

  // Create two webform submissions, by the above submitters.
  $submission1 = $this
    ->createDummySubmission($node, $submitter1);
  $submission2 = $this
    ->createDummySubmission($node, $submitter2);

  // Set submission 1 to state 1, and submission 2 to state 2.
  webform_workflow_transition($submission1, $state1);
  webform_workflow_transition($submission2, $state2);

  // Test view and edit permissions, which (so far) should have been
  // unaffected by the Webform Workflow module.
  $anonymous = drupal_anonymous_user();
  $ops = array(
    'view',
    'edit',
  );
  foreach ($ops as $op) {
    $this
      ->assertTrue(webform_submission_access($node, $submission1, $op, $submitter1), "Submitter 1 can {$op} own submission 1");
    $this
      ->assertFalse(webform_submission_access($node, $submission2, $op, $submitter2), "Submitter 2 cannot {$op} own submission 2");
    $this
      ->assertFalse(webform_submission_access($node, $submission2, $op, $submitter1), "Submitter 1 cannot {$op} submission 2");
    $this
      ->assertFalse(webform_submission_access($node, $submission1, $op, $submitter2), "Submitter 2 cannot {$op} submission 1");
    $this
      ->assertFalse(webform_submission_access($node, $submission1, $op, $anonymous), "Anonymous cannot {$op} submission 1");
    $this
      ->assertFalse(webform_submission_access($node, $submission2, $op, $anonymous), "Anonymous cannot {$op} submission 2");
  }
  $this
    ->assertTrue(webform_submission_access($node, $submission1, 'view', $owner), "Webform owner can view submission 1");
  $this
    ->assertTrue(webform_submission_access($node, $submission2, 'view', $owner), "Webform owner can view submission 2");

  // Modify state 2 so that it does grant view/edit access to submitter 2.
  foreach ($ops as $op) {
    $state2->permissions[$op][WEBFORM_WORKFLOW_ORIGINAL_SUBMITTER] = WEBFORM_WORKFLOW_ORIGINAL_SUBMITTER;
  }
  entity_save('webform_workflow_state', $state2);

  // Test the new permissions.
  foreach ($ops as $op) {
    $this
      ->assertTrue(webform_submission_access($node, $submission2, $op, $submitter2), "Submitter 2 can now {$op} own submission 2");
    $this
      ->assertFalse(webform_submission_access($node, $submission2, $op, $submitter1), "Submitter 1 still cannot {$op} submission 2");
  }

  // Modify state 2 so that it also grants view/edit access to submitter 1's
  // role.
  $rids = array_keys($submitter1->roles);
  $rid = end($rids);
  foreach ($ops as $op) {
    $state2->permissions[$op][$rid] = $rid;
  }
  entity_save('webform_workflow_state', $state2);

  // Test the new permissions.
  foreach ($ops as $op) {
    $this
      ->assertTrue(webform_submission_access($node, $submission2, $op, $submitter1), "Submitter 1 can now {$op} submission 2");
  }
}