123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- <?php
- /**
- * Access Collections tests
- *
- * @package Elgg
- * @subpackage Test
- *
- * TODO(ewinslow): Move this to Elgg\Database\AccessCollectionsTest
- */
- class ElggCoreAccessCollectionsTest extends \ElggCoreUnitTest {
- /**
- * Called before each test object.
- */
- public function __construct() {
- parent::__construct();
- $this->dbPrefix = get_config("dbprefix");
- $user = new \ElggUser();
- $user->username = 'test_user_' . rand();
- $user->email = 'fake_email@fake.com' . rand();
- $user->name = 'fake user';
- $user->access_id = ACCESS_PUBLIC;
- $user->setPassword(rand());
- $user->owner_guid = 0;
- $user->container_guid = 0;
- $user->save();
- $this->user = $user;
- }
- /**
- * Called after each test object.
- */
- public function __destruct() {
- // all __destruct() code should go above here
- $this->user->delete();
- parent::__destruct();
- }
- public function testCreateGetDeleteACL() {
-
- $acl_name = 'test access collection';
- $acl_id = create_access_collection($acl_name);
- $this->assertTrue(is_int($acl_id));
- $q = "SELECT * FROM {$this->dbPrefix}access_collections WHERE id = $acl_id";
- $acl = get_data_row($q);
- $this->assertEqual($acl->id, $acl_id);
- if ($acl) {
- $this->assertEqual($acl->name, $acl_name);
- $result = delete_access_collection($acl_id);
- $this->assertTrue($result);
- $q = "SELECT * FROM {$this->dbPrefix}access_collections WHERE id = $acl_id";
- $data = get_data($q);
- $this->assertIdentical(array(), $data);
- }
- }
- public function testAddRemoveUserToACL() {
- $acl_id = create_access_collection('test acl');
- $result = add_user_to_access_collection($this->user->guid, $acl_id);
- $this->assertTrue($result);
- if ($result) {
- $result = remove_user_from_access_collection($this->user->guid, $acl_id);
- $this->assertIdentical(true, $result);
- }
- delete_access_collection($acl_id);
- }
- public function testUpdateACL() {
- // another fake user to test with
- $user = new \ElggUser();
- $user->username = 'test_user_' . rand();
- $user->email = 'fake_email@fake.com' . rand();
- $user->name = 'fake user';
- $user->access_id = ACCESS_PUBLIC;
- $user->setPassword(rand());
- $user->owner_guid = 0;
- $user->container_guid = 0;
- $user->save();
- $acl_id = create_access_collection('test acl');
- $member_lists = array(
- // adding
- array(
- $this->user->guid,
- $user->guid
- ),
- // removing one, keeping one.
- array(
- $user->guid
- ),
- // removing one, adding one
- array(
- $this->user->guid,
- ),
- // removing all.
- array()
- );
- foreach ($member_lists as $members) {
- $result = update_access_collection($acl_id, $members);
- $this->assertTrue($result);
- if ($result) {
- $q = "SELECT * FROM {$this->dbPrefix}access_collection_membership
- WHERE access_collection_id = $acl_id";
- $data = get_data($q);
- if (count($members) == 0) {
- $this->assertFalse($data);
- } else {
- $this->assertEqual(count($members), count($data));
- }
- foreach ($data as $row) {
- $this->assertTrue(in_array($row->user_guid, $members));
- }
- }
- }
- delete_access_collection($acl_id);
- $user->delete();
- }
- public function testCanEditACL() {
- $acl_id = create_access_collection('test acl', $this->user->guid);
- // should be true since it's the owner
- $result = can_edit_access_collection($acl_id, $this->user->guid);
- $this->assertTrue($result);
- // should be true since IA is on.
- $ia = elgg_set_ignore_access(true);
- $result = can_edit_access_collection($acl_id);
- $this->assertTrue($result);
- elgg_set_ignore_access($ia);
- // should be false since IA is off
- $ia = elgg_set_ignore_access(false);
- $result = can_edit_access_collection($acl_id);
- $this->assertFalse($result);
- elgg_set_ignore_access($ia);
- delete_access_collection($acl_id);
- }
- public function testCanEditACLHook() {
- // if only we supported closures!
- global $acl_test_info;
- $acl_id = create_access_collection('test acl');
- $acl_test_info = array(
- 'acl_id' => $acl_id,
- 'user' => $this->user
- );
-
- function test_acl_access_hook($hook, $type, $value, $params) {
- global $acl_test_info;
- if ($params['user_id'] == $acl_test_info['user']->guid) {
- $acl = get_access_collection($acl_test_info['acl_id']);
- $value[$acl->id] = $acl->name;
- }
- return $value;
- }
- elgg_register_plugin_hook_handler('access:collections:write', 'all', 'test_acl_access_hook');
- // enable security since we usually run as admin
- $ia = elgg_set_ignore_access(false);
- $result = can_edit_access_collection($acl_id, $this->user->guid);
- $this->assertTrue($result);
- $ia = elgg_set_ignore_access($ia);
- elgg_unregister_plugin_hook_handler('access:collections:write', 'all', 'test_acl_access_hook');
- delete_access_collection($acl_id);
- }
- // groups interface
- // only runs if the groups plugin is enabled because implementation is split between
- // core and the plugin.
- public function testCreateDeleteGroupACL() {
- if (!elgg_is_active_plugin('groups')) {
- return;
- }
-
- $group = new \ElggGroup();
- $group->name = 'Test group';
- $group->save();
- $acl = get_access_collection($group->group_acl);
- // ACLs are owned by groups
- $this->assertEqual($acl->owner_guid, $group->guid);
- // removing group and acl
- $this->assertTrue($group->delete());
-
- $acl = get_access_collection($group->group_acl);
- $this->assertFalse($acl);
- $group->delete();
- }
- public function testJoinLeaveGroupACL() {
- if (!elgg_is_active_plugin('groups')) {
- return;
- }
- $group = new \ElggGroup();
- $group->name = 'Test group';
- $group->save();
- $result = $group->join($this->user);
- $this->assertTrue($result);
- // disable security since we run as admin
- $ia = elgg_set_ignore_access(false);
- // need to set the page owner to emulate being in a group context.
- // this is kinda hacky.
- elgg_set_page_owner_guid($group->getGUID());
- if ($result) {
- $can_edit = can_edit_access_collection($group->group_acl, $this->user->guid);
- $this->assertTrue($can_edit);
- }
- $result = $group->leave($this->user);
- $this->assertTrue($result);
- if ($result) {
- $can_edit = can_edit_access_collection($group->group_acl, $this->user->guid);
- $this->assertFalse($can_edit);
- }
- elgg_set_ignore_access($ia);
- $group->delete();
- }
- public function testAccessCaching() {
- // create a new user to check against
- $user = new \ElggUser();
- $user->username = 'access_test_user';
- $user->save();
- foreach (array('get_access_list', 'get_access_array') as $func) {
- _elgg_services()->accessCache->clear();
- // admin users run tests, so disable access
- elgg_set_ignore_access(true);
- $access = $func($user->getGUID());
- elgg_set_ignore_access(false);
- $access2 = $func($user->getGUID());
- $this->assertNotEqual($access, $access2, "Access test for $func");
- }
- $user->delete();
- }
-
- public function testAddMemberToACLRemoveMember() {
- // create a new user to check against
- $user = new \ElggUser();
- $user->username = 'access_test_user';
- $user->save();
-
- $acl_id = create_access_collection('test acl');
- $result = add_user_to_access_collection($user->guid, $acl_id);
- $this->assertTrue($result);
- if ($result) {
- $this->assertTrue($user->delete());
-
- // since there are no more members this should return false
- $acl_members = get_members_of_access_collection($acl_id, true);
- $this->assertFalse($acl_members);
- }
- delete_access_collection($acl_id);
- }
- }
|