]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Merged test for can_write_to_container().
authorBrett Profitt <brett.profitt@gmail.com>
Mon, 3 Oct 2011 02:00:07 +0000 (19:00 -0700)
committerBrett Profitt <brett.profitt@gmail.com>
Mon, 3 Oct 2011 02:00:07 +0000 (19:00 -0700)
engine/tests/regression/trac_bugs.php

index 6f98c67bd29e6dd9ad20b8a734778c89dd9c1b0f..23d6d1dc680f65ec9397e8d6f8aaf654ceda50ee 100644 (file)
@@ -112,4 +112,91 @@ class ElggCoreRegressionBugsTest extends ElggCoreUnitTest {
                $this->assertEqual($params['xoffset'], $options['x1']);
                $this->assertEqual($params['yoffset'], $options['y1']);
        }
+
+       // #3722 Check canEdit() works for contains regardless of groups
+       function test_can_write_to_container() {
+               $user = new ElggUser();
+               $user->username = 'test_user_' . rand();
+               $user->name = 'test_user_name_' . rand();
+               $user->email = 'test@user.net';
+               $user->container_guid = 0;
+               $user->owner_guid = 0;
+               $user->save();
+
+               $object = new ElggObject();
+               $object->save();
+
+               $group = new ElggGroup();
+               $group->save();
+               
+               // disable access overrides because we're admin.
+               $ia = elgg_set_ignore_access(false);
+
+               $this->assertFalse(can_write_to_container($user->guid, $object->guid));
+               
+               global $elgg_test_user;
+               $elgg_test_user = $user;
+
+               // register hook to allow access
+               function can_write_to_container_test_hook($hook, $type, $value, $params) {
+                       global $elgg_test_user;
+
+                       if ($params['user']->getGUID() == $elgg_test_user->getGUID()) {
+                               return true;
+                       }
+               }
+               
+               register_plugin_hook('container_permissions_check', 'all', 'can_write_to_container_test_hook');
+               $this->assertTrue(can_write_to_container($user->guid, $object->guid));
+               unregister_plugin_hook('container_permissions_check', 'all', 'can_write_to_container_test_hook');
+
+               $this->assertFalse(can_write_to_container($user->guid, $group->guid));
+               $group->join($user);
+               $this->assertTrue(can_write_to_container($user->guid, $group->guid));
+
+               elgg_set_ignore_access($ia);
+
+               $user->delete();
+               $object->delete();
+               $group->delete();
+       }
+
+       function test_db_shutdown_links() {
+               global $DB_DELAYED_QUERIES, $test_results;
+               $DB_DELAYED_QUERIES = array();
+
+               function test_delayed_results($results) {
+                       global $test_results;
+                       $test_results = $results;
+               }
+
+               $q = 'SELECT 1 as test';
+
+               $links = array('read', 'write', get_db_link('read'), get_db_link('write'));
+
+               foreach ($links as $link) {
+                       $DB_DELAYED_QUERIES = array();
+
+                       $result = execute_delayed_query($q, $link, 'test_delayed_results');
+
+                       $this->assertTrue($result, "Failed with link = $link");
+                       $this->assertEqual(count($DB_DELAYED_QUERIES), 1);
+                       $this->assertEqual($DB_DELAYED_QUERIES[0]['q'], $q);
+                       $this->assertEqual($DB_DELAYED_QUERIES[0]['l'], $link);
+                       $this->assertEqual($DB_DELAYED_QUERIES[0]['h'], 'test_delayed_results');
+
+                       db_delayedexecution_shutdown_hook();
+
+                       $num_rows = mysql_num_rows($test_results);
+                       $this->assertEqual($num_rows, 1);
+                       $row = mysql_fetch_assoc($test_results);
+                       $this->assertEqual($row['test'], 1);
+               }
+
+               // test bad case
+               $DB_DELAYED_QUERIES = array();
+               $result = execute_delayed_query($q, 'not_a_link', 'test_delayed_results');
+               $this->assertFalse($result);
+               $this->assertEqual(array(), $DB_DELAYED_QUERIES);
+       }
 }