aboutsummaryrefslogtreecommitdiff
path: root/engine/tests/objects
diff options
context:
space:
mode:
Diffstat (limited to 'engine/tests/objects')
-rw-r--r--engine/tests/objects/entities.php310
-rw-r--r--engine/tests/objects/filestore.php16
-rw-r--r--engine/tests/objects/metadata.php107
-rw-r--r--engine/tests/objects/objects.php196
-rw-r--r--engine/tests/objects/sites.php42
-rw-r--r--engine/tests/objects/users.php177
6 files changed, 549 insertions, 299 deletions
diff --git a/engine/tests/objects/entities.php b/engine/tests/objects/entities.php
index 336e2f30d..bac72079e 100644
--- a/engine/tests/objects/entities.php
+++ b/engine/tests/objects/entities.php
@@ -4,8 +4,6 @@
*
* @package Elgg
* @subpackage Test
- * @author Curverider Ltd
- * @link http://elgg.org/
*/
class ElggCoreEntityTest extends ElggCoreUnitTest {
/**
@@ -28,36 +26,41 @@ class ElggCoreEntityTest extends ElggCoreUnitTest {
*/
public function testElggEntityAttributes() {
$test_attributes = array();
- $test_attributes['guid'] = '';
- $test_attributes['type'] = '';
- $test_attributes['subtype'] = '';
- $test_attributes['owner_guid'] = get_loggedin_userid();
- $test_attributes['container_guid'] = get_loggedin_userid();
- $test_attributes['site_guid'] = 0;
+ $test_attributes['guid'] = NULL;
+ $test_attributes['type'] = NULL;
+ $test_attributes['subtype'] = NULL;
+ $test_attributes['owner_guid'] = elgg_get_logged_in_user_guid();
+ $test_attributes['container_guid'] = elgg_get_logged_in_user_guid();
+ $test_attributes['site_guid'] = NULL;
$test_attributes['access_id'] = ACCESS_PRIVATE;
- $test_attributes['time_created'] = '';
- $test_attributes['time_updated'] = '';
+ $test_attributes['time_created'] = NULL;
+ $test_attributes['time_updated'] = NULL;
+ $test_attributes['last_action'] = NULL;
$test_attributes['enabled'] = 'yes';
$test_attributes['tables_split'] = 1;
$test_attributes['tables_loaded'] = 0;
+ ksort($test_attributes);
- $this->assertIdentical($this->entity->expose_attributes(), $test_attributes);
+ $entity_attributes = $this->entity->expose_attributes();
+ ksort($entity_attributes);
+
+ $this->assertIdentical($entity_attributes, $test_attributes);
}
-
+
public function testElggEntityGetAndSetBaseAttributes() {
// explicitly set and get access_id
$this->assertIdentical($this->entity->get('access_id'), ACCESS_PRIVATE);
$this->assertTrue($this->entity->set('access_id', ACCESS_PUBLIC));
$this->assertIdentical($this->entity->get('access_id'), ACCESS_PUBLIC);
-
+
// check internal attributes array
$attributes = $this->entity->expose_attributes();
$this->assertIdentical($attributes['access_id'], ACCESS_PUBLIC);
-
+
// implicitly set and get access_id
$this->entity->access_id = ACCESS_PRIVATE;
$this->assertIdentical($this->entity->access_id, ACCESS_PRIVATE);
-
+
// unset access_id
unset($this->entity->access_id);
$this->assertIdentical($this->entity->access_id, '');
@@ -66,78 +69,85 @@ class ElggCoreEntityTest extends ElggCoreUnitTest {
$this->assertFalse($this->entity->set('guid', 'error'));
$this->entity->guid = 'error';
$this->assertNotEqual($this->entity->guid, 'error');
-
+
// fail on non-attribute
$this->assertNull($this->entity->get('non_existent'));
-
+
// consider helper methods
$this->assertIdentical($this->entity->getGUID(), $this->entity->guid );
$this->assertIdentical($this->entity->getType(), $this->entity->type );
$this->assertIdentical($this->entity->getSubtype(), $this->entity->subtype );
- $this->assertIdentical($this->entity->getOwner(), $this->entity->owner_guid );
+ $this->assertIdentical($this->entity->getOwnerGUID(), $this->entity->owner_guid );
$this->assertIdentical($this->entity->getAccessID(), $this->entity->access_id );
$this->assertIdentical($this->entity->getTimeCreated(), $this->entity->time_created );
$this->assertIdentical($this->entity->getTimeUpdated(), $this->entity->time_updated );
}
-
+
public function testElggEntityGetAndSetMetaData() {
// ensure metadata not set
$this->assertNull($this->entity->get('non_existent'));
$this->assertFalse(isset($this->entity->non_existent));
-
+
// create metadata
- $this->assertTrue($this->entity->non_existent = 'testing');
-
+ $this->entity->existent = 'testing';
+ $this->assertIdentical($this->entity->existent, 'testing');
+
// check metadata set
- $this->assertTrue(isset($this->entity->non_existent));
- $this->assertIdentical($this->entity->non_existent, 'testing');
- $this->assertIdentical($this->entity->getMetaData('non_existent'), 'testing');
-
+ $this->assertTrue(isset($this->entity->existent));
+ $this->assertIdentical($this->entity->getMetaData('existent'), 'testing');
+
// check internal metadata array
$metadata = $this->entity->expose_metadata();
- $this->assertIdentical($metadata['non_existent'], 'testing');
+ $this->assertIdentical($metadata['existent'], array('testing'));
}
public function testElggEnityGetAndSetAnnotations() {
$this->assertFalse(array_key_exists('non_existent', $this->entity->expose_annotations()));
- $this->assertFalse($this->entity->getAnnotations('non_existent'));
+ $this->assertIdentical($this->entity->getAnnotations('non_existent'), array());
// set and check temp annotation
$this->assertTrue($this->entity->annotate('non_existent', 'testing'));
- $this->assertIdentical($this->entity->getAnnotations('non_existent'), 'testing');
+ $this->assertIdentical($this->entity->getAnnotations('non_existent'), array('testing'));
$this->assertTrue(array_key_exists('non_existent', $this->entity->expose_annotations()));
// save entity and check for annotation
+ $this->entity->subtype = 'testing';
$this->save_entity();
$this->assertFalse(array_key_exists('non_existent', $this->entity->expose_annotations()));
$annotations = $this->entity->getAnnotations('non_existent');
$this->assertIsA($annotations[0], 'ElggAnnotation');
$this->assertIdentical($annotations[0]->name, 'non_existent');
$this->assertEqual($this->entity->countAnnotations('non_existent'), 1);
-
+
+ $this->assertIdentical($annotations, elgg_get_annotations(array('guid' => $this->entity->getGUID())));
+ $this->assertIdentical($annotations, elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site')));
+ $this->assertIdentical($annotations, elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site', 'subtype' => 'testing')));
+ $this->assertIdentical(FALSE, elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site', 'subtype' => 'fail')));
+
// clear annotation
- $this->assertTrue($this->entity->clearAnnotations());
+ $this->assertTrue($this->entity->deleteAnnotations());
$this->assertEqual($this->entity->countAnnotations('non_existent'), 0);
+ $this->assertIdentical(array(), elgg_get_annotations(array('guid' => $this->entity->getGUID())));
+ $this->assertIdentical(array(), elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site')));
+ $this->assertIdentical(array(), elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site', 'subtype' => 'testing')));
+
// clean up
$this->assertTrue($this->entity->delete());
+ remove_subtype('site', 'testing');
}
-
+
public function testElggEntityCache() {
global $ENTITY_CACHE;
- $ENTITY_CACHE = NULL;
-
- $this->assertNull($ENTITY_CACHE);
- initialise_entity_cache();
$this->assertIsA($ENTITY_CACHE, 'array');
}
-
+
public function testElggEntitySaveAndDelete() {
global $ENTITY_CACHE;
-
+
// unable to delete with no guid
$this->assertFalse($this->entity->delete());
-
+
// error on save
try {
$this->entity->save();
@@ -146,68 +156,248 @@ class ElggCoreEntityTest extends ElggCoreUnitTest {
$this->assertIsA($e, 'InvalidParameterException');
$this->assertIdentical($e->getMessage(), elgg_echo('InvalidParameterException:EntityTypeNotSet'));
}
-
+
// set elements
$this->entity->type = 'site';
$this->entity->non_existent = 'testing';
-
+
// save
$this->AssertEqual($this->entity->getGUID(), 0);
$guid = $this->entity->save();
$this->AssertNotEqual($guid, 0);
-
+
// check guid
$this->AssertEqual($this->entity->getGUID(), $guid);
$attributes = $this->entity->expose_attributes();
$this->AssertEqual($attributes['guid'], $guid);
$this->AssertIdentical($ENTITY_CACHE[$guid], $this->entity);
-
+
// check metadata
$metadata = $this->entity->expose_metadata();
$this->AssertFalse(in_array('non_existent', $metadata));
$this->AssertEqual($this->entity->get('non_existent'), 'testing');
-
+
// clean up with delete
- $this->assertTrue($this->entity->delete());
+ $this->assertIdentical(true, $this->entity->delete());
}
-
+
public function testElggEntityDisableAndEnable() {
global $CONFIG;
-
+
// ensure enabled
$this->assertTrue($this->entity->isEnabled());
-
- // false on disable
+
+ // false on disable because it's not saved yet.
$this->assertFalse($this->entity->disable());
-
+
// save and disable
$this->save_entity();
+
+ // add annotations and metadata to check if they're disabled.
+ $annotation_id = create_annotation($this->entity->guid, 'test_annotation_' . rand(), 'test_value_' . rand());
+ $metadata_id = create_metadata($this->entity->guid, 'test_metadata_' . rand(), 'test_value_' . rand());
+
$this->assertTrue($this->entity->disable());
-
+
// ensure disabled by comparing directly with database
$entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$this->entity->guid}'");
$this->assertIdentical($entity->enabled, 'no');
-
+
+ $annotation = get_data_row("SELECT * FROM {$CONFIG->dbprefix}annotations WHERE id = '$annotation_id'");
+ $this->assertIdentical($annotation->enabled, 'no');
+
+ $metadata = get_data_row("SELECT * FROM {$CONFIG->dbprefix}metadata WHERE id = '$metadata_id'");
+ $this->assertIdentical($metadata->enabled, 'no');
+
// re-enable for deletion to work
$this->assertTrue($this->entity->enable());
+
+ // check enabled
+ // check annotations and metadata enabled.
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$this->entity->guid}'");
+ $this->assertIdentical($entity->enabled, 'yes');
+
+ $annotation = get_data_row("SELECT * FROM {$CONFIG->dbprefix}annotations WHERE id = '$annotation_id'");
+ $this->assertIdentical($annotation->enabled, 'yes');
+
+ $metadata = get_data_row("SELECT * FROM {$CONFIG->dbprefix}metadata WHERE id = '$metadata_id'");
+ $this->assertIdentical($metadata->enabled, 'yes');
+
+ $this->assertTrue($this->entity->delete());
+ }
+
+ public function testElggEntityRecursiveDisableAndEnable() {
+ global $CONFIG;
+
+ $this->save_entity();
+ $obj1 = new ElggObject();
+ $obj1->container_guid = $this->entity->getGUID();
+ $obj1->save();
+ $obj2 = new ElggObject();
+ $obj2->container_guid = $this->entity->getGUID();
+ $obj2->save();
+
+ // disable $obj2 before disabling the container
+ $this->assertTrue($obj2->disable());
+
+ // disable entities container by $this->entity
+ $this->assertTrue($this->entity->disable());
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$obj1->guid}'");
+ $this->assertIdentical($entity->enabled, 'no');
+
+ // enable entities that were disabled with the container (but not $obj2)
+ $this->assertTrue($this->entity->enable());
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$obj1->guid}'");
+ $this->assertIdentical($entity->enabled, 'yes');
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$obj2->guid}'");
+ $this->assertIdentical($entity->enabled, 'no');
+
+ // cleanup
+ $this->assertTrue($obj2->enable());
+ $this->assertTrue($obj2->delete());
+ $this->assertTrue($obj1->delete());
+ $this->assertTrue($this->entity->delete());
+ }
+
+ public function testElggEntityMetadata() {
+ // let's delete a non-existent metadata
+ $this->assertFalse($this->entity->deleteMetadata('important'));
+
+ // let's add the metadata
+ $this->entity->important = 'indeed!';
+ $this->assertIdentical('indeed!', $this->entity->important);
+ $this->entity->less_important = 'true, too!';
+ $this->assertIdentical('true, too!', $this->entity->less_important);
+ $this->save_entity();
+
+ // test deleting incorrectly
+ // @link https://github.com/elgg/elgg/issues/2273
+ $this->assertNull($this->entity->deleteMetadata('impotent'));
+ $this->assertEqual($this->entity->important, 'indeed!');
+
+ // get rid of one metadata
+ $this->assertEqual($this->entity->important, 'indeed!');
+ $this->assertTrue($this->entity->deleteMetadata('important'));
+ $this->assertNull($this->entity->important);
+
+ // get rid of all metadata
+ $this->assertTrue($this->entity->deleteMetadata());
+ $this->assertNull($this->entity->less_important);
+
+ // clean up database
$this->assertTrue($this->entity->delete());
}
-
+
public function testElggEntityExportables() {
$exportables = array(
'guid',
'type',
'subtype',
'time_created',
+ 'time_updated',
'container_guid',
- 'owner_guid',
+ 'owner_guid',
+ 'site_guid'
);
-
+
$this->assertIdentical($exportables, $this->entity->getExportableValues());
}
- protected function save_entity($type='site')
- {
+ public function testElggEntityMultipleMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = array('brett', 'bryan', 'brad');
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+
+ $this->assertEqual($md, $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ public function testElggEntitySingleElementArrayMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = array('test');
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+
+ $this->assertEqual($md[0], $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ public function testElggEntityAppendMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = 'test';
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+ $this->entity->setMetaData($name, 'test2', '', true);
+
+ $this->assertEqual(array('test', 'test2'), $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ public function testElggEntitySingleElementArrayAppendMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = 'test';
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+ $this->entity->setMetaData($name, array('test2'), '', true);
+
+ $this->assertEqual(array('test', 'test2'), $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ public function testElggEntityArrayAppendMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = array('brett', 'bryan', 'brad');
+ $md2 = array('test1', 'test2', 'test3');
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+ $this->entity->setMetaData($name, $md2, '', true);
+
+ $this->assertEqual(array_merge($md, $md2), $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ protected function save_entity($type='site') {
$this->entity->type = $type;
$this->assertNotEqual($this->entity->save(), 0);
}
@@ -216,13 +406,13 @@ class ElggCoreEntityTest extends ElggCoreUnitTest {
// ElggEntity is an abstract class with no abstact methods.
class ElggEntityTest extends ElggEntity {
public function __construct() {
- $this->initialise_attributes();
+ $this->initializeAttributes();
}
-
+
public function expose_attributes() {
return $this->attributes;
}
-
+
public function expose_metadata() {
return $this->temp_metadata;
}
diff --git a/engine/tests/objects/filestore.php b/engine/tests/objects/filestore.php
index e20137187..9732f0af4 100644
--- a/engine/tests/objects/filestore.php
+++ b/engine/tests/objects/filestore.php
@@ -4,8 +4,6 @@
*
* @package Elgg
* @subpackage Test
- * @author Curverider Ltd
- * @link http://elgg.org/
*/
class ElggCoreFilestoreTest extends ElggCoreUnitTest {
@@ -50,12 +48,8 @@ class ElggCoreFilestoreTest extends ElggCoreUnitTest {
$user = $this->createTestUser();
$created = date('Y/m/d', $user->time_created);
- // check matrix with username
- $user_dir = $this->filestore->make_file_matrix($user->username);
- $this->assertIdentical($user_dir, "$created/$user->guid/");
-
// check matrix with guid
- $guid_dir = $this->filestore->make_file_matrix($user->guid);
+ $guid_dir = $this->filestore->makeFileMatrix($user->guid);
$this->assertIdentical($guid_dir, "$created/$user->guid/");
// clean up user
@@ -100,11 +94,7 @@ class ElggCoreFilestoreTest extends ElggCoreUnitTest {
}
class ElggDiskFilestoreTest extends ElggDiskFilestore {
- public function make_file_matrix($filename) {
- return parent::make_file_matrix($filename);
- }
-
- public function user_file_matrix($guid) {
- return parent::user_file_matrix($guid);
+ public function makeFileMatrix($guid) {
+ return parent::makeFileMatrix($guid);
}
}
diff --git a/engine/tests/objects/metadata.php b/engine/tests/objects/metadata.php
deleted file mode 100644
index bc6523279..000000000
--- a/engine/tests/objects/metadata.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-/**
- * Elgg Test ElggMetadata
- *
- * @package Elgg
- * @subpackage Test
- * @author Curverider Ltd
- * @link http://elgg.org/
- */
-class ElggCoreMetadataTest extends ElggCoreUnitTest {
- protected $metastrings;
-
- /**
- * Called before each test method.
- */
- public function setUp() {
- $this->metastrings = array();
- $this->object = new ElggObject();
- }
-
- /**
- * Called after each test method.
- */
- public function tearDown() {
- // do not allow SimpleTest to interpret Elgg notices as exceptions
- $this->swallowErrors();
-
- unset($this->object);
- }
-
- public function testGetMetastringById() {
- foreach (array('metaUnitTest', 'metaunittest', 'METAUNITTEST') as $string) {
- $this->create_metastring($string);
- }
-
- // lookup metastring id
- $cs_ids = get_metastring_id('metaUnitTest', TRUE);
- $this->assertEqual($cs_ids, $this->metastrings['metaUnitTest']);
-
- // lookup all metastrings, ignoring case
- $cs_ids = get_metastring_id('metaUnitTest', FALSE);
- $this->assertEqual(count($cs_ids), 3);
- $this->assertEqual(count($cs_ids), count($this->metastrings));
- foreach ($cs_ids as $string )
- {
- $this->assertTrue(in_array($string, $this->metastrings));
- }
-
- // clean up
- $this->delete_metastrings();
- }
-
- public function testElggGetEntitiesFromMetadata() {
- global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
- $METASTRINGS_CACHE = $METASTRINGS_DEADNAME_CACHE = array();
-
- $this->object->title = 'Meta Unit Test';
- $this->object->save();
- $this->create_metastring('metaUnitTest');
- $this->create_metastring('tested');
-
- $this->assertTrue(create_metadata($this->object->guid, 'metaUnitTest', 'tested'));
-
- // check value with improper case
- $options = array('metadata_names' => 'metaUnitTest', 'metadata_values' => 'Tested', 'limit' => 10, 'metadata_case_sensitive' => TRUE);
- $this->assertFalse(elgg_get_entities_from_metadata($options));
-
- // compare forced case with ignored case
- $options = array('metadata_names' => 'metaUnitTest', 'metadata_values' => 'tested', 'limit' => 10, 'metadata_case_sensitive' => TRUE);
- $case_true = elgg_get_entities_from_metadata($options);
- $this->assertIsA($case_true, 'array');
-
- $options = array('metadata_names' => 'metaUnitTest', 'metadata_values' => 'Tested', 'limit' => 10, 'metadata_case_sensitive' => FALSE);
- $case_false = elgg_get_entities_from_metadata($options);
- $this->assertIsA($case_false, 'array');
-
- $this->assertIdentical($case_true, $case_false);
-
- // check deprecated get_entities_from_metadata() function
- $deprecated = get_entities_from_metadata('metaUnitTest', 'tested', '', '', 0, 10, 0, '', 0, FALSE, TRUE);
- $this->assertIdentical($deprecated, $case_true);
-
- // check entity list
- //$this->dump(list_entities_from_metadata('metaUnitTest', 'Tested', '', '', 0, 10, TRUE, TRUE, TRUE, FALSE));
-
- // clean up
- $this->delete_metastrings();
- $this->object->delete();
- }
-
-
- protected function create_metastring($string) {
- global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
- $METASTRINGS_CACHE = $METASTRINGS_DEADNAME_CACHE = array();
-
- mysql_query("INSERT INTO {$CONFIG->dbprefix}metastrings (string) VALUES ('$string')");
- $this->metastrings[$string] = mysql_insert_id();
- }
-
- protected function delete_metastrings() {
- global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
- $METASTRINGS_CACHE = $METASTRINGS_DEADNAME_CACHE = array();
-
- $strings = implode(', ', $this->metastrings);
- mysql_query("DELETE FROM {$CONFIG->dbprefix}metastrings WHERE id IN ($strings)");
- }
-}
diff --git a/engine/tests/objects/objects.php b/engine/tests/objects/objects.php
index 8209917bf..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,75 +114,74 @@ 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',
'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;
+ 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);
@@ -189,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'");
diff --git a/engine/tests/objects/sites.php b/engine/tests/objects/sites.php
index 696ae3da1..a01a661e3 100644
--- a/engine/tests/objects/sites.php
+++ b/engine/tests/objects/sites.php
@@ -4,8 +4,6 @@
*
* @package Elgg
* @subpackage Test
- * @author Curverider Ltd
- * @link http://elgg.org/
*/
class ElggCoreSiteTest extends ElggCoreUnitTest {
@@ -20,7 +18,7 @@ class ElggCoreSiteTest extends ElggCoreUnitTest {
* Called before each test method.
*/
public function setUp() {
- $this->site = new ElggSiteTest;
+ $this->site = new ElggSiteTest();
}
/**
@@ -38,33 +36,37 @@ class ElggCoreSiteTest extends ElggCoreUnitTest {
parent::__destruct();
}
- /**
- * A basic test that will be called and fail.
- */
public function testElggSiteConstructor() {
$attributes = array();
- $attributes['guid'] = '';
+ $attributes['guid'] = NULL;
$attributes['type'] = 'site';
- $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['name'] = '';
- $attributes['description'] = '';
- $attributes['url'] = '';
+ $attributes['name'] = NULL;
+ $attributes['description'] = NULL;
+ $attributes['url'] = NULL;
+ ksort($attributes);
- $this->assertIdentical($this->site->expose_attributes(), $attributes);
+ $entity_attributes = $this->site->expose_attributes();
+ ksort($entity_attributes);
+
+ $this->assertIdentical($entity_attributes, $attributes);
}
-
+
public function testElggSiteSaveAndDelete() {
- $this->assertTrue($this->site->save());
- $this->assertTrue($this->site->delete());
+ $guid = $this->site->save();
+ $this->assertIsA($guid, 'int');
+ $this->assertTrue($guid > 0);
+ $this->assertIdentical(true, $this->site->delete());
}
}
diff --git a/engine/tests/objects/users.php b/engine/tests/objects/users.php
index c03091a91..8a1033ac4 100644
--- a/engine/tests/objects/users.php
+++ b/engine/tests/objects/users.php
@@ -4,8 +4,6 @@
*
* @package Elgg
* @subpackage Test
- * @author Curverider Ltd
- * @link http://elgg.org/
*/
class ElggCoreUserTest extends ElggCoreUnitTest {
@@ -14,7 +12,7 @@ class ElggCoreUserTest extends ElggCoreUnitTest {
*/
public function __construct() {
parent::__construct();
-
+
// all code should come after here
}
@@ -31,7 +29,7 @@ class ElggCoreUserTest extends ElggCoreUnitTest {
public function tearDown() {
// do not allow SimpleTest to interpret Elgg notices as exceptions
$this->swallowErrors();
-
+
unset($this->user);
}
@@ -43,42 +41,48 @@ class ElggCoreUserTest extends ElggCoreUnitTest {
parent::__destruct();
}
- /**
- * A basic test that will be called and fail.
- */
public function testElggUserConstructor() {
$attributes = array();
- $attributes['guid'] = '';
+ $attributes['guid'] = NULL;
$attributes['type'] = 'user';
- $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['name'] = '';
- $attributes['username'] = '';
- $attributes['password'] = '';
- $attributes['salt'] = '';
- $attributes['email'] = '';
- $attributes['language'] = '';
- $attributes['code'] = '';
+ $attributes['name'] = NULL;
+ $attributes['username'] = NULL;
+ $attributes['password'] = NULL;
+ $attributes['salt'] = NULL;
+ $attributes['email'] = NULL;
+ $attributes['language'] = NULL;
+ $attributes['code'] = NULL;
$attributes['banned'] = 'no';
-
- $this->assertIdentical($this->user->expose_attributes(), $attributes);
+ $attributes['admin'] = 'no';
+ $attributes['prev_last_action'] = NULL;
+ $attributes['last_login'] = NULL;
+ $attributes['prev_last_login'] = NULL;
+ ksort($attributes);
+
+ $entity_attributes = $this->user->expose_attributes();
+ ksort($entity_attributes);
+
+ $this->assertIdentical($entity_attributes, $attributes);
}
-
+
public function testElggUserLoad() {
// new object
$object = new ElggObject();
$this->AssertEqual($object->getGUID(), 0);
$guid = $object->save();
$this->AssertNotEqual($guid, 0);
-
+
// fail on wrong type
try {
$error = new ElggUserTest($guid);
@@ -88,15 +92,15 @@ class ElggCoreUserTest extends ElggCoreUnitTest {
$message = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $guid, 'ElggUser');
$this->assertIdentical($e->getMessage(), $message);
}
-
+
// clean up
$object->delete();
}
-
+
public function testElggUserConstructorByGuid() {
- $user = new ElggUser(get_loggedin_userid());
+ $user = new ElggUser(elgg_get_logged_in_user_guid());
$this->assertIdentical($user, $_SESSION['user']);
-
+
// fail with garbage
try {
$error = new ElggUserTest(array('invalid'));
@@ -107,57 +111,134 @@ class ElggCoreUserTest extends ElggCoreUnitTest {
$this->assertIdentical($e->getMessage(), $message);
}
}
-
+
public function testElggUserConstructorByDbRow() {
- $row = $this->fetchUser(get_loggedin_userid());
+ $row = $this->fetchUser(elgg_get_logged_in_user_guid());
$user = new ElggUser($row);
$this->assertIdentical($user, $_SESSION['user']);
}
-
+
public function testElggUserConstructorByUsername() {
- $row = $this->fetchUser(get_loggedin_userid());
+ $row = $this->fetchUser(elgg_get_logged_in_user_guid());
$user = new ElggUser($row->username);
$this->assertIdentical($user, $_SESSION['user']);
}
-
+
public function testElggUserSave() {
// new object
$this->AssertEqual($this->user->getGUID(), 0);
$guid = $this->user->save();
$this->AssertNotEqual($guid, 0);
-
+
// clean up
$this->user->delete();
}
-
+
public function testElggUserDelete() {
$guid = $this->user->save();
-
+
// delete object
- $this->assertTrue($this->user->delete());
-
+ $this->assertIdentical(true, $this->user->delete());
+
// check GUID not in database
$this->assertFalse($this->fetchUser($guid));
}
-
+
public function testElggUserNameCache() {
- // Trac #1305
-
+ // issue https://github.com/elgg/elgg/issues/1305
+
// very unlikely a user would have this username
$name = (string)time();
$this->user->username = $name;
-
+
$guid = $this->user->save();
-
- $user = get_user_by_username($name);
- $user->delete();
+
+ $user = get_user_by_username($name);
+ $user->delete();
$user = get_user_by_username($name);
$this->assertFalse($user);
}
-
+
+ public function testGetUserByUsernameAcceptsUrlEncoded() {
+ $username = (string)time();
+ $this->user->username = $username;
+ $guid = $this->user->save();
+
+ // percent encode first letter
+ $first_letter = $username[0];
+ $first_letter = str_pad('%' . dechex(ord($first_letter)), 2, '0', STR_PAD_LEFT);
+ $username = $first_letter . substr($username, 1);
+
+ $user = get_user_by_username($username);
+ $this->assertTrue((bool) $user);
+ $this->assertEqual($guid, $user->guid);
+
+ $this->user->delete();
+ }
+
+ public function testElggUserMakeAdmin() {
+ global $CONFIG;
+
+ // need to save user to have a guid
+ $guid = $this->user->save();
+
+ $this->assertTrue($this->user->makeAdmin());
+
+ $q = "SELECT admin FROM {$CONFIG->dbprefix}users_entity WHERE guid = $guid";
+ $r = mysql_query($q);
+
+ $admin = mysql_fetch_assoc($r);
+ $this->assertEqual($admin['admin'], 'yes');
+
+ $this->user->delete();
+ }
+
+ public function testElggUserRemoveAdmin() {
+ global $CONFIG;
+
+ // need to save user to have a guid
+ $guid = $this->user->save();
+
+ $this->assertTrue($this->user->removeAdmin());
+
+ $q = "SELECT admin FROM {$CONFIG->dbprefix}users_entity WHERE guid = $guid";
+ $r = mysql_query($q);
+
+ $admin = mysql_fetch_assoc($r);
+ $this->assertEqual($admin['admin'], 'no');
+
+ $this->user->delete();
+ }
+
+ public function testElggUserIsAdmin() {
+ // need to grab a real user with a guid and everything.
+ $guid = $this->user->save();
+
+ $this->assertTrue($this->user->makeAdmin());
+
+ // this is testing the function, not the SQL.
+ // that's been tested above.
+ $this->assertTrue($this->user->isAdmin());
+
+ $this->user->delete();
+ }
+
+ public function testElggUserIsNotAdmin() {
+ // need to grab a real user with a guid and everything.
+ $guid = $this->user->save();
+
+ $this->assertTrue($this->user->removeAdmin());
+
+ // this is testing the function, not the SQL.
+ // that's been tested above.
+ $this->assertFalse($this->user->isAdmin());
+
+ $this->user->delete();
+ }
+
protected function fetchUser($guid) {
global $CONFIG;
-
+
return get_data_row("SELECT * FROM {$CONFIG->dbprefix}users_entity WHERE guid = '$guid'");
}
}