aboutsummaryrefslogtreecommitdiff
path: root/engine/tests/objects/objects.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/tests/objects/objects.php')
-rw-r--r--engine/tests/objects/objects.php194
1 files changed, 143 insertions, 51 deletions
diff --git a/engine/tests/objects/objects.php b/engine/tests/objects/objects.php
index dd4beb075..263ab2414 100644
--- a/engine/tests/objects/objects.php
+++ b/engine/tests/objects/objects.php
@@ -4,8 +4,6 @@
*
* @package Elgg
* @subpackage Test
- * @author Curverider Ltd
- * @link http://elgg.org/
*/
class ElggCoreObjectTest extends ElggCoreUnitTest {
@@ -40,70 +38,75 @@ class ElggCoreObjectTest extends ElggCoreUnitTest {
public function testElggObjectConstructor() {
$attributes = array();
- $attributes['guid'] = '';
+ $attributes['guid'] = NULL;
$attributes['type'] = 'object';
- $attributes['subtype'] = '';
- $attributes['owner_guid'] = get_loggedin_userid();
- $attributes['container_guid'] = get_loggedin_userid();
- $attributes['site_guid'] = 0;
+ $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'] = '';
- $attributes['time_updated'] = '';
+ $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'] = '';
- $attributes['description'] = '';
+ $attributes['title'] = NULL;
+ $attributes['description'] = NULL;
+ ksort($attributes);
- $this->assertIdentical($this->entity->expose_attributes(), $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(get_loggedin_userid());
+ $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'), get_loggedin_userid(), 'ElggObject');
+ $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';
@@ -111,54 +114,51 @@ class ElggCoreObjectTest extends ElggCoreUnitTest {
$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->getContainer(), get_loggedin_userid());
-
- // fals when container not a group
- $this->assertFalse($this->entity->getContainerEntity());
-
+ $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->setContainer($guid));
-
+ $this->assertTrue($this->entity->setContainerGUID($guid));
+
// check container
- $this->assertEqual($this->entity->getContainer(), $guid);
+ $this->assertEqual($this->entity->getContainerGUID(), $guid);
$this->assertIdentical($group, $this->entity->getContainerEntity());
-
+
// clean up
$group->delete();
}
-
+
public function testElggObjectExportables() {
$exportables = array(
'guid',
@@ -172,16 +172,16 @@ class ElggCoreObjectTest extends ElggCoreUnitTest {
'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;
+ 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());
+ $this->assertTrue($entity->save());
$guid = $entity->getGUID();
var_dump($guid);
@@ -191,16 +191,108 @@ class ElggCoreObjectTest extends ElggCoreUnitTest {
var_dump($entity);
$this->assertFalse($entity);
- $old = elgg_set_ignore_access(true);
+ $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'");