diff options
Diffstat (limited to 'engine/tests/objects/objects.php')
| -rw-r--r-- | engine/tests/objects/objects.php | 306 | 
1 files changed, 306 insertions, 0 deletions
| diff --git a/engine/tests/objects/objects.php b/engine/tests/objects/objects.php new file mode 100644 index 000000000..263ab2414 --- /dev/null +++ b/engine/tests/objects/objects.php @@ -0,0 +1,306 @@ +<?php +/** + * Elgg Test ElggObject + * + * @package Elgg + * @subpackage Test + */ +class ElggCoreObjectTest extends ElggCoreUnitTest { + +	/** +	 * Called before each test object. +	 */ +	public function __construct() { +		parent::__construct(); +	} + +	/** +	 * Called before each test method. +	 */ +	public function setUp() { +		$this->entity = new ElggObjectTest(); +	} + +	/** +	 * Called after each test method. +	 */ +	public function tearDown() { +		$this->swallowErrors(); +		unset($this->entity); +	} + +	/** +	 * Called after each test object. +	 */ +	public function __destruct() { +		parent::__destruct(); +	} + +	public function testElggObjectConstructor() { +		$attributes = array(); +		$attributes['guid'] = NULL; +		$attributes['type'] = 'object'; +		$attributes['subtype'] = NULL; +		$attributes['owner_guid'] = elgg_get_logged_in_user_guid(); +		$attributes['container_guid'] = elgg_get_logged_in_user_guid(); +		$attributes['site_guid'] = NULL; +		$attributes['access_id'] = ACCESS_PRIVATE; +		$attributes['time_created'] = NULL; +		$attributes['time_updated'] = NULL; +		$attributes['last_action'] = NULL; +		$attributes['enabled'] = 'yes'; +		$attributes['tables_split'] = 2; +		$attributes['tables_loaded'] = 0; +		$attributes['title'] = NULL; +		$attributes['description'] = NULL; +		ksort($attributes); + +		$entity_attributes = $this->entity->expose_attributes(); +		ksort($entity_attributes); + +		$this->assertIdentical($entity_attributes, $attributes); +	} + +	public function testElggObjectSave() { +		// new object +		$this->AssertEqual($this->entity->getGUID(), 0); +		$guid = $this->entity->save(); +		$this->AssertNotEqual($guid, 0); + +		$entity_row = $this->get_entity_row($guid); +		$this->assertIsA($entity_row, 'stdClass'); + +		// update existing object +		$this->entity->title = 'testing'; +		$this->entity->description = 'ElggObject'; +		$this->assertEqual($this->entity->save(), $guid); + +		$object_row = $this->get_object_row($guid); +		$this->assertIsA($object_row, 'stdClass'); +		$this->assertIdentical($object_row->title, 'testing'); +		$this->assertIdentical($object_row->description, 'ElggObject'); + +		// clean up +		$this->entity->delete(); +	} + +	public function testElggObjectLoad() { +		// fail on wrong type +		try { +			$error = new ElggObjectTest(elgg_get_logged_in_user_guid()); +			$this->assertTrue(FALSE); +		} catch (Exception $e) { +			$this->assertIsA($e, 'InvalidClassException'); +			$message = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), elgg_get_logged_in_user_guid(), 'ElggObject'); +			$this->assertIdentical($e->getMessage(), $message); +		} +	} + +	public function testElggObjectConstructorByGUID() { +		$guid = $this->entity->save(); + +		// load a new object using guid +		$entity = new ElggObjectTest($guid); +		$this->assertIdentical($this->entity, $entity); + +		// clean up +		$this->entity->delete(); +	} + +	public function testElggObjectClone() { +		$this->entity->title = 'testing'; +		$this->entity->description = 'ElggObject'; +		$this->entity->var1 = "test"; +		$this->entity->var2 = 1; +		$this->entity->var3 = true; +		$this->entity->save(); + +		// add tag array +		$tag_string = 'tag1, tag2, tag3'; +		$tagarray = string_to_tag_array($tag_string); +		$this->entity->tags = $tagarray; + +		// a cloned ElggEntity has the guid reset +		$object = clone $this->entity; +		$this->assertIdentical(0, (int)$object->guid); + +		// make sure attributes were copied over +		$this->assertIdentical($object->title, 'testing'); +		$this->assertIdentical($object->description, 'ElggObject'); + +		$guid = $object->save(); +		$this->assertTrue($guid !== 0); +		$this->assertTrue($guid !== $this->entity->guid); + +		// test that metadata was transfered +		$this->assertIdentical($this->entity->var1, $object->var1); +		$this->assertIdentical($this->entity->var2, $object->var2); +		$this->assertIdentical($this->entity->var3, $object->var3); +		$this->assertIdentical($this->entity->tags, $object->tags); + +		// clean up +		$object->delete(); +		$this->entity->delete(); +	} + +	public function testElggObjectContainer() { +		$this->assertEqual($this->entity->getContainerGUID(), elgg_get_logged_in_user_guid()); + +		// create and save to group +		$group = new ElggGroup(); +		$guid = $group->save(); +		$this->assertTrue($this->entity->setContainerGUID($guid)); + +		// check container +		$this->assertEqual($this->entity->getContainerGUID(), $guid); +		$this->assertIdentical($group, $this->entity->getContainerEntity()); + +		// clean up +		$group->delete(); +	} + +	public function testElggObjectExportables() { +		$exportables = array( +			'guid', +			'type', +			'subtype', +			'time_created', +			'time_updated', +			'container_guid', +			'owner_guid', +			'site_guid', +			'title', +			'description' +		); + +		$this->assertIdentical($exportables, $this->entity->getExportableValues()); +	} + +	public function xtestElggObjectAccessOverrides() { +		// set entity to private access with no owner. +		$entity = $this->entity; +		$entity->access_id = ACCESS_PRIVATE; +		$entity->owner_guid = 0; +		$this->assertTrue($entity->save()); +		$guid = $entity->getGUID(); + +		var_dump($guid); +		// try to grab entity +		$entity = false; +		$entity = get_entity($guid); +		var_dump($entity); +		$this->assertFalse($entity); + +		$old = elgg_set_ignore_access(true); +	} + +	// see https://github.com/elgg/elgg/issues/1196 +	public function testElggEntityRecursiveDisableWhenLoggedOut() { +		$e1 = new ElggObject(); +		$e1->access_id = ACCESS_PUBLIC; +		$e1->owner_guid = 0; +		$e1->container_guid = 0; +		$e1->save(); +		$guid1 = $e1->getGUID(); + +		$e2 = new ElggObject(); +		$e2->container_guid = $guid1; +		$e2->access_id = ACCESS_PUBLIC; +		$e2->owner_guid = 0; +		$e2->save(); +		$guid2 = $e2->getGUID(); + +		// fake being logged out +		$user = $_SESSION['user']; +		unset($_SESSION['user']); +		$ia = elgg_set_ignore_access(true); + +		$this->assertTrue(disable_entity($guid1, null, true)); + +		// "log in" original user +		$_SESSION['user'] = $user; +		elgg_set_ignore_access($ia); + +		$this->assertFalse(get_entity($guid1)); +		$this->assertFalse(get_entity($guid2)); + +		$db_prefix = get_config('dbprefix'); +		$q = "SELECT * FROM {$db_prefix}entities WHERE guid = $guid1"; +		$r = get_data_row($q); +		$this->assertEqual('no', $r->enabled); + +		$q = "SELECT * FROM {$db_prefix}entities WHERE guid = $guid2"; +		$r = get_data_row($q); +		$this->assertEqual('no', $r->enabled); + +		access_show_hidden_entities(true); +		delete_entity($guid1); +		delete_entity($guid2); +		access_show_hidden_entities(false); +	} + +	public function testElggRecursiveDelete() { +		$types = array('ElggGroup', 'ElggObject', 'ElggUser', 'ElggSite'); +		$db_prefix = elgg_get_config('dbprefix'); + +		foreach ($types as $type) { +			$parent = new $type(); +			$this->assertTrue($parent->save()); +			 +			$child = new ElggObject(); +			$child->container_guid = $parent->guid; +			$this->assertTrue($child->save()); + +			$grandchild = new ElggObject(); +			$grandchild->container_guid = $child->guid; +			$this->assertTrue($grandchild->save()); + +			$this->assertTrue($parent->delete(true)); + +			$q = "SELECT * FROM {$db_prefix}entities WHERE guid = $parent->guid"; +			$r = get_data($q); +			$this->assertFalse($r); + +			$q = "SELECT * FROM {$db_prefix}entities WHERE guid = $child->guid"; +			$r = get_data($q); +			$this->assertFalse($r); + +			$q = "SELECT * FROM {$db_prefix}entities WHERE guid = $grandchild->guid"; +			$r = get_data($q); +			$this->assertFalse($r); +		} + +		// object that owns itself +		// can't check container_guid because of infinite loops in can_edit_entity() +		$obj = new ElggObject(); +		$obj->save(); +		$obj->owner_guid = $obj->guid; +		$obj->save(); + +		$q = "SELECT * FROM {$db_prefix}entities WHERE guid = $obj->guid"; +		$r = get_data_row($q); +		$this->assertEqual($obj->guid, $r->owner_guid); + +		$this->assertTrue($obj->delete(true)); + +		$q = "SELECT * FROM {$db_prefix}entities WHERE guid = $obj->guid"; +		$r = get_data_row($q); +		$this->assertFalse($r); +	} + +	protected function get_object_row($guid) { +		global $CONFIG; +		return get_data_row("SELECT * FROM {$CONFIG->dbprefix}objects_entity WHERE guid='$guid'"); +	} + +	protected function get_entity_row($guid) { +		global $CONFIG; +		return get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid='$guid'"); +	} +} + +class ElggObjectTest extends ElggObject { +	public function expose_attributes() { +		return $this->attributes; +	} +} | 
