1 field_permission_example.test public FieldTestPermissionsExample::testFieldnoteEditPerms()

Test edit permissions.

Note that this is mostly identical to testFieldnoteViewPerms() and could probably be refactored.

File

modules/examples/field_permission_example/field_permission_example.test, line 497
Tests for Field Permission Example.

Class

FieldTestPermissionsExample

Code

public function testFieldnoteEditPerms() {
  // We create two sets of content so we can get a few
  // test cases out of the way.
  $edit_own_content = $this->randomName(23);
  $edit_any_content = $this->randomName(23);
  $edit_own_node = $this->createFieldContentForUser(NULL, $edit_own_content);
  // Get the type of the node so we can create another one.
  $node_type = node_type_load($edit_own_node->type);
  $edit_any_node = $this->createFieldContentForUser(NULL, $edit_any_content, $node_type);

  $edit_own_account = $this->backdropCreateUser(array(
    'edit own ' . $node_type->name . ' content',
    'edit own fieldnote',
  ));
  debug("Created user with 'edit own fieldnote' permission.");

  // Now change the user id for the test node.
  $edit_own_node = node_load($edit_own_node->nid);
  $edit_own_node->uid = $edit_own_account->uid;
  node_save($edit_own_node);
  $edit_own_node = node_load($edit_own_node->nid);
  $this->assertTrue($edit_own_node->uid == $edit_own_account->uid, 'New edit test user assigned to node.');

  // Now we want to look at the page with the field and
  // check that we can see it.
  $this->backdropLogin($edit_own_account);

  $this->backdropGet('node/' . $edit_own_node->nid . '/edit');
  $this->assertText($edit_own_content, "'edit own fieldnote' can edit own fieldnote.");

  // This account shouldn't be able to edit the field on the
  // 'edit any' node.
  $this->backdropGet('node/' . $edit_any_node->nid . '/edit');
  $this->assertNoText($edit_any_content, "'edit own fieldnote' can not edit any fieldnote.");

  // Now, to test for 'edit any fieldnote' we create another user
  // with that permission, and try to edit at the same node.
  // We have to add the ability to edit any node content, as well
  // or Backdrop will deny us access to the page.
  $edit_any_account = $this->backdropCreateUser(array(
    'edit any ' . $node_type->name . ' content',
    'edit any fieldnote',
  ));
  debug("Created user with 'edit any fieldnote' permission.");
  $this->backdropLogin($edit_any_account);
  // This account should be able to see the field on the
  // 'edit any' node.
  $this->backdropGet('node/' . $edit_any_node->nid . '/edit');
  $this->assertText($edit_any_content, "'edit any fieldnote' can edit any fieldnote.");
}