View source
<?php
class OgSubgroupsAccessFromDescendanceTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'Organic groups Subgroups permissions inheritance',
'description' => 'Test the access of users to subgroups.',
'group' => 'Organic groups subgroups',
);
}
function setUp() {
parent::setUp('og_subgroups', 'entity_test', 'og_access');
og_create_field(OG_GROUP_FIELD, 'entity_test', 'main');
og_create_field(OG_AUDIENCE_FIELD, 'entity_test', 'main');
og_create_field(OG_AUDIENCE_FIELD, 'article', 'main');
}
function testOgSubgroupsGetReverseHierarchyTreePerm() {
$user1 = $this
->drupalCreateUser();
$user2 = $this
->drupalCreateUser();
$user3 = $this
->drupalCreateUser();
$user4 = $this
->drupalCreateUser();
$web_user = $this
->drupalCreateUser(array(
'create article content',
'create page content',
));
$this
->drupalLogin($web_user);
$groups = array();
$entity = entity_create('entity_test', array(
'name' => 'main',
'uid' => $user1->uid,
));
$entity->{OG_GROUP_FIELD}[LANGUAGE_NONE][0]['value'] = 1;
$entity
->save();
$groups[0] = og_get_group('entity_test', $entity->pid);
$entity = entity_create('entity_test', array(
'name' => 'first_child',
'uid' => $user2->uid,
));
$entity->{OG_GROUP_FIELD}[LANGUAGE_NONE][0]['value'] = 1;
$entity->{OG_AUDIENCE_FIELD}[LANGUAGE_NONE][0]['gid'] = $groups[0]->gid;
$entity
->save();
$groups[1] = og_get_group('entity_test', $entity->pid);
$entity = entity_create('entity_test', array(
'name' => 'second_child',
'uid' => $user3->uid,
));
$entity->{OG_GROUP_FIELD}[LANGUAGE_NONE][0]['value'] = 1;
$entity->{OG_AUDIENCE_FIELD}[LANGUAGE_NONE][0]['gid'] = $groups[1]->gid;
$entity
->save();
$groups[2] = og_get_group('entity_test', $entity->pid);
$node = $this
->drupalCreateNode(array(
'type' => 'article',
'promote' => 1,
));
$node->{OG_AUDIENCE_FIELD}[LANGUAGE_NONE][0]['gid'] = $groups[2]->gid;
node_save($node);
$groups[3] = $node;
$group_content[0] = $entity;
og_group($group[2]->gid, 'user', $user4);
$string = 'administer group';
debug($groups);
$this
->assertTrue(og_user_access($groups[0]->gid, $string, $user1, TRUE), t('User1 have admister group permission to parent group 0'));
$access_res = og_subgroups_get_reverse_hierarchy_tree_perm(array(
$groups[2]->gid,
), $string, $user1);
$this
->assertTrue($access_res, t('User1 have admister group permission to subgroup 2'));
$this
->assertFalse(og_user_access($groups[0]->gid, $string, $user3), t('User3 does not have "Administer group" permission.'));
$access_res = og_subgroups_get_reverse_hierarchy_tree_perm(array(
$groups[0]->gid,
), $string, $user1);
$this
->assertFalse($access_res, t('User3 does not have admister group permission to group 0'));
}
function testOgSubgroupsNodeAccessRecordsAlter() {
$user1 = $this
->drupalCreateUser();
$user2 = $this
->drupalCreateUser();
$user3 = $this
->drupalCreateUser();
$user4 = $this
->drupalCreateUser();
$web_user = $this
->drupalCreateUser(array(
'create article content',
'create page content',
));
$this
->drupalLogin($web_user);
$groups = array();
$entity = entity_create('entity_test', array(
'name' => 'main',
'uid' => $user1->uid,
));
$entity->{OG_GROUP_FIELD}[LANGUAGE_NONE][0]['value'] = 1;
$entity
->save();
$groups[0]['group'] = og_get_group('entity_test', $entity->pid);
$groups[0]['entity'] = $entity;
$entity = entity_create('entity_test', array(
'name' => 'first_child',
'uid' => $user2->uid,
));
$entity->{OG_GROUP_FIELD}[LANGUAGE_NONE][0]['value'] = 1;
$entity->{OG_AUDIENCE_FIELD}[LANGUAGE_NONE][0]['gid'] = $groups[0]['group']->gid;
$entity
->save();
$groups[1]['group'] = og_get_group('entity_test', $entity->pid);
$groups[1]['entity'] = $entity;
$entity = entity_create('entity_test', array(
'name' => 'second_child',
'uid' => $user3->uid,
));
$entity->{OG_GROUP_FIELD}[LANGUAGE_NONE][0]['value'] = 1;
$entity->{OG_AUDIENCE_FIELD}[LANGUAGE_NONE][0]['gid'] = $groups[1]['group']->gid;
$entity->{OG_ACCESS_FIELD}[LANGUAGE_NONE][0]['gid'] = 1;
$entity
->save();
$groups[2]['group'] = og_get_group('entity_test', $entity->pid);
$groups[2]['entity'] = $entity;
$node = $this
->drupalCreateNode(array(
'type' => 'article',
'promote' => 1,
));
$node->{OG_AUDIENCE_FIELD}[LANGUAGE_NONE][0]['gid'] = $groups[2]['group']->gid;
node_save($node);
$groups[3]['node'] = $node;
$this
->drupalLogout();
$this
->drupalGet('node/' . $groups[3]['node']->nid);
$this
->assertResponse('403', t('Annonymous cannot view private node.'));
$this
->drupalLogin($user4);
$this
->drupalGet('node/' . $groups[3]['node']->nid);
$this
->assertResponse('403', t('Not group member or parrent cannot view private node.'));
$this
->drupalLogin($user1);
$this
->drupalGet('node/' . $groups[3]['node']->nid);
$this
->assertResponse('200', t('Parent group user can view the node'));
}
}