View source
<?php
require_once 'ServicesWebTestCase.php';
class ServicesResourceUsertests extends ServicesWebtestCase {
protected $privileged_user = NULL;
protected $endpoint = NULL;
public function setUp() {
parent::setUp('autoload', 'ctools', 'services', 'rest_server', 'inputstream');
$this->endpoint = $this
->saveNewEndpoint();
$this->privileged_user = $this
->drupalCreateUser(array(
'administer users',
'access user profiles',
));
$this->regular_user = $this
->drupalCreateUser(array(
'access user profiles',
));
$this
->drupalLogin($this->privileged_user);
}
public static function getInfo() {
return array(
'name' => t('Resource User'),
'description' => t('Test the resource User methods and actions.'),
'group' => t('Services'),
);
}
function testCreateUser() {
$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', $user);
$account = $response['body'];
$this
->assertTrue(!empty($account['uid']), t('User has been create successfully.'), 'UserResource: Create');
$user_load = user_load($account['uid']);
$this
->assertTrue(!empty($user_load), t('Newly created user has been loaded successfully.'), 'UserResource: Create');
$user = array();
$user['name'] = $this
->randomName();
$user['pass'] = user_password();
$user['status'] = 1;
$response = $this
->servicesPost($this->endpoint->path . '/user', $user);
$this
->assertTrue(strpos($response['status'], 'E-mail address field is required') !== FALSE, t('It is not possible to create user without email.'), 'UserResource: Create');
}
function testCreateUserLegacy() {
$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', array(
'account' => $user,
));
$account = $response['body'];
$this
->assertTrue(!empty($account['uid']), t('User has been create successfully.'), 'UserResource: Create (Legacy)');
$user_load = user_load($account['uid']);
$this
->assertTrue(!empty($user_load), t('Newly created user has been loaded successfully.'), 'UserResource: Create (Legacy)');
$user = array();
$user['name'] = $this
->randomName();
$user['pass'] = user_password();
$user['status'] = 1;
$response = $this
->servicesPost($this->endpoint->path . '/user', array(
'account' => $user,
));
$this
->assertTrue(strpos($response['status'], 'E-mail address field is required') !== FALSE, t('It is not possible to create user without email.'), 'UserResource: Create (Legacy)');
}
function testRegisterUser() {
$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', $user);
$code = $response['code'];
$this
->assertEqual($code, '401', t('Verify permission denied 401'), 'UserResource: Create');
$this
->drupalLogout();
$response = $this
->servicesPost($this->endpoint->path . '/user/register', $user);
$account = $response['body'];
$this
->assertTrue(!empty($account['uid']), t('User has been create successfully.'), 'UserResource: Create');
$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);
}
function testRegisterUserLegacy() {
$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,
));
$code = $response['code'];
$this
->assertEqual($code, '401', t('Verify permission denied 401'), 'UserResource: Create (Legacy)');
$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 (Legacy)');
$user_load = user_load($account['uid']);
$this
->assertTrue(!empty($user_load), t('Newly created user has been loaded successfully.'), 'UserResource: Create (Legacy)');
$this
->drupalLogin($this->privileged_user);
}
function testRetrieveUser() {
$response = $this
->servicesGET($this->endpoint->path . '/user/' . $this->privileged_user->uid);
$account = $response['body'];
$users_are_the_same = $account->name == $this->privileged_user->name && ($account->mail = $this->privileged_user->mail) && ($account->roles = $this->privileged_user->roles);
$this
->assertTrue($users_are_the_same, t('Retrieved user is the same as created.'), 'UserResource: Retrieve');
}
function testUpdateUserRolesWithRegularAccount() {
$account = $this
->drupalCreateUser();
$this
->drupalLogout();
$this
->drupalLogin($this->regular_user);
$updated_account = array(
'mail' => $this
->randomName() . '@example.com',
'pass' => $this
->randomString(),
'roles' => array(
3 => 'adminstrator',
),
);
$response = $this
->servicesPut($this->endpoint->path . '/user/' . $account->uid, $updated_account);
$user_load = user_load($account->uid);
$testtext = 'Access denied for user ' . $this->regular_user->uid . ' "' . $this->regular_user->name - '"';
$this
->assertEqual($response['body'], $testtext, 'Regular user CANNOT update roles', 'UserResource: Update');
}
function testUpdateUserOwnUserRoles() {
$account = $this
->drupalCreateUser();
$this
->drupalLogout();
$this
->drupalLogin($account);
$role_name = $this
->randomName();
$role_rid = $this
->drupalCreateRole(array(
'administer users',
), $role_name);
$user_load_before = user_load($account->uid);
$updated_account = array(
'uid' => $account->uid,
'name' => $account->name,
'mail' => $account->mail,
'roles' => array(
$role_rid => $role_name,
),
);
$response = $this
->servicesPut($this->endpoint->path . '/user/' . $account->uid, $updated_account);
$user_load_after = user_load($account->uid, TRUE);
$this
->assertEqual($response['code'], 200, 'Update will should appear to succeed as the roles will be ignored', 'UserResource');
$this
->assertEqual($response['body']['roles'], $user_load_before->roles, 'Response shows roles unchanged', 'UserResource');
$this
->assertEqual($user_load_before->roles, $user_load_after->roles, 'User roles have not been changed', 'UserResource');
}
function testUpdateUser() {
$account = $this
->drupalCreateUser();
$updated_account = array(
'uid' => $account->uid,
'name' => $account->name,
'roles' => $account->roles,
'mail' => $this
->randomName() . '@example.com',
);
$response = $this
->servicesPut($this->endpoint->path . '/user/' . $account->uid, $updated_account);
$user_load = user_load($account->uid);
$this
->assertEqual($updated_account['mail'], $user_load->mail, t('User details have been updated successfully'), 'UserResource: Update');
}
function testUpdateUserLegacy() {
$account = $this
->drupalCreateUser();
$updated_account = array(
'uid' => $account->uid,
'name' => $account->name,
'roles' => $account->roles,
'mail' => $this
->randomName() . '@example.com',
);
$response = $this
->servicesPut($this->endpoint->path . '/user/' . $account->uid, array(
'data' => $updated_account,
));
$user_load = user_load($account->uid);
$this
->assertEqual($updated_account['mail'], $user_load->mail, t('User details have been updated successfully'), 'UserResource: Update (Legacy)');
}
function testDeleteUser() {
$account = $this
->drupalCreateUser();
$response = $this
->servicesDelete($this->endpoint->path . '/user/' . $account->uid);
$user_load = user_load($account->uid);
$this
->assertTrue(empty($user_load), t('User has been deleted successfully.'), 'UserResource: Delete');
}
function testUserLogin() {
$account = $this
->drupalCreateUser();
$this
->drupalLogout();
$response = $this
->servicesPost($this->endpoint->path . '/user/login', array(
'username' => $account->name,
'password' => $account->pass_raw,
));
$response_data = $response['body'];
$proper_answer = isset($response_data->sessid) && isset($response_data->user) && $response_data->user->name == $account->name;
$this
->assertTrue($proper_answer, t('User successfully logged in.'), 'UserResource: Login');
$this->session_id = $response_data->sessid;
$this->session_name = $response_data->session_name;
$this->loggedInUser = $response_data->user;
$account2 = $this
->drupalCreateUser();
$response = $this
->servicesPost($this->endpoint->path . '/user/login', array(
'username' => $account2->name,
'password' => $account2->pass_raw,
));
$this
->assertTrue(strpos($response['status'], 'Already logged in as ' . $account->name) !== FALSE, t('Session is properly opened for logged in user.'), 'UserResource: Login');
$this
->drupalLogout();
$response = $this
->servicesPost($this->endpoint->path . '/user/login', array(
'username' => $account->name,
'password' => $this
->randomString(),
));
$this
->assertTrue(strpos($response['status'], 'Wrong username or password') !== FALSE, t('User cannot login with wrong username / password.'), 'UserResource: Login');
$response = $this
->servicesPost($this->endpoint->path . '/user/login', array(
'user' => $account->name,
'password' => $this
->randomString(),
));
$this
->assertTrue(strpos($response['status'], 'Missing required argument username') !== FALSE, t('Found missing requirment'), 'UserResource: Login');
}
function testUserLogout() {
$response = $this
->servicesPost($this->endpoint->path . '/user/logout');
$this
->drupalLogout();
$this
->assertText(t('You are not authorized to access this page'), t('User logout successfully.'), 'UserResource: Logout');
$this
->drupalLogin($this->privileged_user);
$response = $this
->servicesPost($this->endpoint->path . '/user/logout');
$response = $this
->servicesPost($this->endpoint->path . '/user/logout');
$this
->assertTrue(strpos($response['status'], 'User is not logged in'), t('User cannot logout when is anonymous'), 'UserResource: Logout');
}
function testUserIndex() {
$accounts = array();
for ($i = 0; $i < 5; $i++) {
$account = $this
->drupalCreateUser();
$accounts[$account->uid] = $account;
}
$accounts_copy = $accounts;
$response = $this
->servicesGet($this->endpoint->path . '/user', array(
'fields' => 'uid,name,mail',
));
$response_accounts = $response['body'];
foreach ($response_accounts as $response_account) {
if ($response_account->uid < 2) {
continue;
}
if (isset($accounts[$response_account->uid])) {
$saved_account = $accounts[$response_account->uid];
if ($response_account->name == $saved_account->name && $response_account->mail == $saved_account->mail) {
unset($accounts_copy[$response_account->uid]);
}
}
}
$this
->assertTrue(empty($accounts_copy), t('Users were listed properly.'), 'UserResource: Index');
$accounts_copy = $accounts;
$account = array_pop($accounts_copy);
$response = $this
->servicesGet($this->endpoint->path . '/user', array(
'parameters' => array(
'name' => $account->name,
),
));
$response_accounts = $response['body'];
$response_account = current($response['body']);
$proper_answer = count($response_accounts) == 1 && $response_account->name == $account->name;
$this
->assertTrue($proper_answer, t('User was listed by name properly.'), 'UserResource: Index');
$response = $this
->servicesGet($this->endpoint->path . '/user', array(
'parameters' => array(
'uid' => implode(',', array_keys($accounts)),
),
));
$response_accounts = $response['body'];
$accounts_copy = $accounts;
foreach ($response_accounts as $response_account) {
if (isset($accounts[$response_account->uid])) {
$saved_account = $accounts[$response_account->uid];
if ($response_account->name == $saved_account->name && $response_account->mail == $saved_account->mail) {
unset($accounts_copy[$response_account->uid]);
}
}
}
$this
->assertTrue(empty($accounts_copy), t('Users were listed properly.'), 'UserResource: Index');
}
}