From 6634ccf99ca8fcdf94ee5ab099fc81ccea669d2f Mon Sep 17 00:00:00 2001 From: nickw Date: Fri, 23 Oct 2009 20:14:26 +0000 Subject: Creating a unit test for ElggUser git-svn-id: http://code.elgg.org/elgg/trunk@3576 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/users.php | 10 +++ engine/tests/objects/users.php | 157 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 engine/tests/objects/users.php 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 @@ +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; + } +} -- cgit v1.2.3