You are here

function oa_subspacesPermission::test_oa_subspacesPermission in Open Atrium Subspaces 7.2

File

tests/oa_subspacesPermission.test, line 17
Tests permission inheritence for oa_subspaces

Class

oa_subspacesPermission
@file Tests permission inheritence for oa_subspaces

Code

function test_oa_subspacesPermission() {
  $langcode = LANGUAGE_NONE;
  $group_key = "og_group_ref[{$langcode}][0][default]";
  $body_key = "body[{$langcode}][0][value]";
  extract($this
    ->createOaSpaceAndUsers(array(
    'og_user_inheritance' => array(
      LANGUAGE_NONE => array(
        0 => array(
          'value' => 1,
        ),
      ),
    ),
  )));

  // Create another space that is a child of this one.
  $child = $this
    ->createOaSpace(array(
    'oa_parent_space' => array(
      LANGUAGE_NONE => array(
        0 => array(
          'target_id' => $space->nid,
        ),
      ),
    ),
  ));
  $not_child = $this
    ->createOaSpace();
  $roles = array_flip(og_roles('node', 'oa_space'));

  // Add create permission.
  $permissions = array(
    'create oa_discussion_post content' => 1,
  );
  og_role_change_permissions($roles[OG_AUTHENTICATED_ROLE], $permissions);
  $this
    ->assertTrue(og_user_access('node', $space->nid, 'create oa_discussion_post content', $space_member), t('Member has access to do permissions in main space.'));
  $this
    ->assertTrue(og_user_access('node', $child->nid, 'create oa_discussion_post content', $space_member), t('Member has access to do permissions in child space.'));
  $this
    ->assertFalse(og_user_access('node', $not_child->nid, 'create oa_discussion_post content', $space_member), t('Member does not have access to do permissions in not-child space.'));
  $this
    ->assertTrue(oa_user_access('node', $space->nid, 'create oa_discussion_post content', $space_member), t('Member has access to do permissions in main space.'));
  $this
    ->assertTrue(oa_user_access('node', $child->nid, 'create oa_discussion_post content', $space_member), t('Member has access to do permissions in child space.'));
  $this
    ->assertFalse(oa_user_access('node', $not_child->nid, 'create oa_discussion_post content', $space_member), t('Member does not have access to do permissions in not-child space.'));
  $this
    ->drupalLogin($space_member);
  $edit = array(
    'title' => $this
      ->randomName(16),
    $group_key => $space->title . ' (' . $space->nid . ')',
    $body_key => $this
      ->randomName(26),
  );
  $this
    ->drupalGet('node/' . $space->nid);
  $this
    ->drupalPost('node/add/oa-discussion-post', $edit, t('Publish'));
  $discussion = $this
    ->drupalGetNodeByTitle($edit['title']);
  $this
    ->assertTrue(!empty($discussion), t('Able to post discussion to parent.'));
  $edit = array(
    'title' => $this
      ->randomName(16),
    $group_key => $child->title . ' (' . $child->nid . ')',
    $body_key => $this
      ->randomName(26),
  );
  $this
    ->drupalPost('node/add/oa-discussion-post', $edit, t('Publish'));
  $discussion = $this
    ->drupalGetNodeByTitle($edit['title']);
  $this
    ->assertTrue(!empty($discussion), t('Able to post discussion to child.'));
  $edit = array(
    'title' => $this
      ->randomName(16),
    $group_key => $not_child->title . ' (' . $not_child->nid . ')',
    $body_key => $this
      ->randomName(26),
  );
  $this
    ->drupalPost('node/add/oa-discussion-post', $edit, t('Publish'));
  $discussion = $this
    ->drupalGetNodeByTitle($edit['title']);
  $this
    ->assertTrue(empty($discussion), t('Not able to post discussion to not child.'));
  $options = array(
    'query' => array(
      'field_mode' => 'default',
      'search_string' => $space->title,
    ),
  );
  $this
    ->drupalGet('select2widget/ajax/og_group_ref/node/oa_discussion_post/NULL', $options);
  $this
    ->assertText('"id":"' . $space->nid . '"', t('Parent ID returned from json.'));
  $options['query']['search_string'] = $child->title;
  $this
    ->drupalGet('select2widget/ajax/og_group_ref/node/oa_discussion_post/NULL', $options);
  $this
    ->assertText('"id":"' . $child->nid . '"', t('Child ID returned from json.'));
  $options['query']['search_string'] = $not_child->title;
  $this
    ->drupalGet('select2widget/ajax/og_group_ref/node/oa_discussion_post/NULL', $options);
  $this
    ->assertNoText('"id":"' . $not_child->nid . '"', t('Non-sibling ID not returned from json.'));
}