From fb6efd171b5d4508635786fb0efe2cb3c1dec54c Mon Sep 17 00:00:00 2001 From: Kyle Browning Date: Thu, 28 Apr 2011 16:35:06 -0700 Subject: [PATCH] Issue [#1134872] tedbow, kylebrowning, glennpratt Create register action for user resource --- resources/user_resource.inc | 27 ++++++++++++++- servers/rest_server/includes/RESTServer.inc | 2 +- .../functional/ServicesResourceUserTests.test | 33 +++++++++++++++++++ tests/functional/ServicesWebTestCase.php | 3 ++ 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/resources/user_resource.inc b/resources/user_resource.inc index 83d4e24..85311a2 100644 --- a/resources/user_resource.inc +++ b/resources/user_resource.inc @@ -38,7 +38,6 @@ function _user_resource_definition() { ), ), ), - 'update' => array( 'help' => 'Updates a user', 'callback' => '_user_resource_update', @@ -143,6 +142,24 @@ function _user_resource_definition() { 'callback' => '_user_resource_logout', 'access callback' => 'services_access_menu', ), + + 'register' => array( + 'help' => 'Registers a user. (anonymous only)', + 'callback' => '_user_resource_create', + 'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/user_resource'), + 'access callback' => '_user_resource_access', + 'access arguments' => array('register'), + 'access arguments append' => TRUE, + 'args' => array( + array( + 'name' => 'account', + 'type' => 'array', + 'description' => 'The user data', + 'source' => 'data', + 'optional' => FALSE, + ), + ), + ), ), ), ); @@ -441,6 +458,14 @@ function _user_resource_access($op = 'view', $args = array()) { return ($user->uid == $account->uid || user_access('administer users')); case 'create': return user_access('administer users'); + case 'register': + //Verify user is not logged in, and verify that visitors can create accounts. + if (!$user->uid && variable_get('user_register', 1) != 0) { + return TRUE; + } + else { + return FALSE; + } case 'delete': $account = user_load($args[0]); if (!$account->uid) { diff --git a/servers/rest_server/includes/RESTServer.inc b/servers/rest_server/includes/RESTServer.inc index 0d0b6f9..0556cff 100755 --- a/servers/rest_server/includes/RESTServer.inc +++ b/servers/rest_server/includes/RESTServer.inc @@ -231,7 +231,7 @@ class RESTServer { elseif (!isset($info['optional']) || !$info['optional']) { return services_error(t('Missing required argument !arg', array( '!arg' => $info['name'], - )), 401); + )), 406); } else { $arguments[$i] = NULL; diff --git a/tests/functional/ServicesResourceUserTests.test b/tests/functional/ServicesResourceUserTests.test index 3a50697..8af9876 100644 --- a/tests/functional/ServicesResourceUserTests.test +++ b/tests/functional/ServicesResourceUserTests.test @@ -78,6 +78,39 @@ class ServicesResourceUsertests extends ServicesWebtestCase { $this->assertTrue(strpos($response['status'], 'E-mail address field is required') !== FALSE, t('It is not possible to create user without email.'), 'UserResource: Create'); } + /** + * Test register method. + * + * Register user, load user. + */ + function testRegisterUser() { + // Create user. + $user = array(); + $user['name'] = $this->randomName(); + $user['mail'] = $user['name'] . '@example.com'; + $user['pass'] = user_password(); + $user['status'] = 1; + + $response = $this->servicesPost($this->endpoint->path . '/user/register', array('account' => $user)); + + //Verify logged in users cannnot create accounts + $code = $response['code']; + $this->assertEqual($code, '401', t('Verify permission denied 401'), 'UserResource: Create'); + + //Verify logged out state can create users + $this->drupalLogout(); + + $response = $this->servicesPost($this->endpoint->path . '/user/register', array('account' => $user)); + $account = $response['body']; + + $this->assertTrue(!empty($account['uid']), t('User has been create successfully.'), 'UserResource: Create'); + + // Load user. + $user_load = user_load($account['uid']); + $this->assertTrue(!empty($user_load), t('Newly created user has been loaded successfully.'), 'UserResource: Create'); + $this->drupalLogin($this->privileged_user); + } + /** * Test retrieve method. */ diff --git a/tests/functional/ServicesWebTestCase.php b/tests/functional/ServicesWebTestCase.php index 5d983ff..780f825 100644 --- a/tests/functional/ServicesWebTestCase.php +++ b/tests/functional/ServicesWebTestCase.php @@ -272,6 +272,9 @@ public function saveNewEndpoint() { 'logout' => array( 'enabled' => 1, ), + 'register' => array( + 'enabled' => 1, + ), ), ), 'comment' => array(