aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/users.php10
-rw-r--r--engine/tests/objects/users.php157
2 files changed, 167 insertions, 0 deletions
diff --git a/engine/lib/users.php b/engine/lib/users.php
index 29a2dd42f..a15330501 100644
--- a/engine/lib/users.php
+++ b/engine/lib/users.php
@@ -1535,3 +1535,13 @@ function users_settings_save() {
//register actions *************************************************************
register_elgg_event_handler('init','system','users_init',0);
register_elgg_event_handler('pagesetup','system','users_pagesetup',0);
+
+/**
+ * Runs unit tests for ElggObject
+ */
+register_plugin_hook('unit_test', 'system', 'users_test');
+function users_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = "{$CONFIG->path}engine/tests/objects/users.php";
+ return $value;
+} \ No newline at end of file
diff --git a/engine/tests/objects/users.php b/engine/tests/objects/users.php
new file mode 100644
index 000000000..5c88e4ece
--- /dev/null
+++ b/engine/tests/objects/users.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Elgg Test ElggUser
+ *
+ * @package Elgg
+ * @subpackage Test
+ * @author Curverider Ltd
+ * @link http://elgg.org/
+ */
+class ElggCoreUserTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+
+ // all code should come after here
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->user = new ElggUserTest();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+
+ unset($this->user);
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ // all code should go above here
+ parent::__destruct();
+ }
+
+ /**
+ * A basic test that will be called and fail.
+ */
+ public function testElggUserConstructor() {
+ $attributes = array();
+ $attributes['guid'] = '';
+ $attributes['type'] = 'user';
+ $attributes['subtype'] = '';
+ $attributes['owner_guid'] = get_loggedin_userid();
+ $attributes['container_guid'] = get_loggedin_userid();
+ $attributes['site_guid'] = 0;
+ $attributes['access_id'] = ACCESS_PRIVATE;
+ $attributes['time_created'] = '';
+ $attributes['time_updated'] = '';
+ $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['banned'] = 'no';
+
+ $this->assertIdentical($this->user->expose_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);
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidClassException');
+ $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());
+ $this->assertIdentical($user, $_SESSION['user']);
+
+ // fail with garbage
+ try {
+ $error = new ElggUserTest(array('invalid'));
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $message = sprintf(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ $this->assertIdentical($e->getMessage(), $message);
+ }
+ }
+
+ public function testElggUserConstructorByDbRow() {
+ $row = $this->fetchUser(get_loggedin_userid());
+ $user = new ElggUser($row);
+ $this->assertIdentical($user, $_SESSION['user']);
+ }
+
+ public function testElggUserConstructorByUsername() {
+ $row = $this->fetchUser(get_loggedin_userid());
+ $user = new ElggUser($row->username);
+ $this->assertIdentical($user, $_SESSION['user']);
+ }
+
+ public function testElggUserConstructorByObject() {
+ $obj = new ElggUser(get_loggedin_userid());
+ $user = new ElggUser($obj);
+ $this->assertIdentical($obj, $user);
+ $this->assertIdentical($user, $_SESSION['user']);
+
+ // fail on non-user object
+ $object = new ElggObject();
+ $object->save();
+
+ try {
+ $error = new ElggUserTest($object);
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $message = sprintf(elgg_echo('InvalidParameterException:NonElggUser'));
+ $this->assertIdentical($e->getMessage(), $message);
+ }
+
+ $object->delete();
+ }
+
+
+ protected function fetchUser($guid) {
+ global $CONFIG;
+
+ return get_data_row("SELECT * FROM {$CONFIG->dbprefix}users_entity WHERE guid = '$guid'");
+ }
+}
+
+class ElggUserTest extends ElggUser {
+ public function expose_attributes() {
+ return $this->attributes;
+ }
+}