diff options
Diffstat (limited to 'engine/tests/regression')
| -rw-r--r-- | engine/tests/regression/trac_bugs.php | 87 | 
1 files changed, 87 insertions, 0 deletions
diff --git a/engine/tests/regression/trac_bugs.php b/engine/tests/regression/trac_bugs.php index 6f98c67bd..23d6d1dc6 100644 --- a/engine/tests/regression/trac_bugs.php +++ b/engine/tests/regression/trac_bugs.php @@ -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); +	}  }  | 
