You are here

uuid_services.user_services.test in Universally Unique IDentifier 7

Test the UUID User Services integration.

File

uuid_services/uuid_services.user_services.test
View source
<?php

/**
 * @file
 * Test the UUID User Services integration.
 */

/**
 * Test the UUID User Services integration.
 */
class UuidUserServicesTest extends ServicesWebTestCase {

  /**
   * The endpoint configuration.
   *
   * @var object
   */
  protected $endpoint = NULL;

  /**
   * {@inheritdoc}
   */
  public static function getInfo() {
    return array(
      'name' => 'UUID User Services tests',
      'description' => 'Test the user services resource UUID methods and actions.',
      'group' => 'UUID',
    );
  }

  /**
   * {@inheritdoc}
   */
  public function setUp(array $modules = array()) {
    parent::setUp(array(
      'ctools',
      'services',
      'rest_server',
      'uuid_services',
    ));
    $this->endpoint = $this
      ->saveNewEndpoint();
  }

  /**
   * {@inheritdoc}
   */
  public function saveNewEndpoint() {
    $edit = $this
      ->populateEndpointFAPI();
    $endpoint = new stdClass();
    $endpoint->disabled = FALSE;
    $endpoint->api_version = 3;
    $endpoint->name = $edit['name'];
    $endpoint->server = $edit['server'];
    $endpoint->path = $edit['path'];
    $endpoint->authentication = array(
      'services' => 'services',
    );
    $endpoint->server_settings = array(
      'formatters' => array(
        'json' => TRUE,
        'bencode' => TRUE,
        'rss' => TRUE,
        'plist' => TRUE,
        'xmlplist' => TRUE,
        'php' => TRUE,
        'yaml' => TRUE,
        'jsonp' => FALSE,
        'xml' => FALSE,
      ),
      'parsers' => array(
        'application/x-yaml' => TRUE,
        'application/json' => TRUE,
        'application/vnd.php.serialized' => TRUE,
        'application/plist' => TRUE,
        'application/plist+xml' => TRUE,
        'application/x-www-form-urlencoded' => TRUE,
        'multipart/form-data' => TRUE,
      ),
    );
    $endpoint->resources = array(
      'user' => array(
        'operations' => array(
          'create' => array(
            'enabled' => 1,
          ),
          'retrieve' => array(
            'enabled' => 1,
          ),
          'update' => array(
            'enabled' => 1,
          ),
          'delete' => array(
            'enabled' => 1,
          ),
          'index' => array(
            'enabled' => 1,
          ),
        ),
      ),
    );
    $endpoint->debug = 1;
    $endpoint->export_type = FALSE;
    services_endpoint_save($endpoint);
    $endpoint = services_endpoint_load($endpoint->name);
    $this
      ->assertTrue($endpoint->name == $edit['name'], 'Endpoint successfully created');
    return $endpoint;
  }

  /**
   * Tests user Retrieve.
   */
  public function testUserRetrieve() {
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer services',
      'administer users',
    ));
    $this
      ->drupalLogin($admin_user);
    $other_user = $this
      ->drupalCreateUser();

    // Verify user is found.
    $response = $this
      ->servicesGet($this->endpoint->path . '/user/' . $other_user->uuid);
    $this
      ->assertTrue($other_user->uuid == $response['body']->uuid, 'Successfully received User info');
  }

  /**
   * Tests users Update their own account.
   */
  public function testUserUpdate() {
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer services',
      'administer users',
      'administer permissions',
    ));
    $this
      ->drupalLogin($admin_user);
    $other_user = $this
      ->drupalCreateUser();
    $update = array(
      'uuid' => $other_user->uuid,
      'roles' => array(
        '2' => 'authenticated user',
        '3' => 'administrator',
      ),
      'status' => 1,
      'pass' => $other_user->pass,
    );
    $this
      ->servicesPut($this->endpoint->path . '/user/' . $other_user->uuid, $update);
    $user_after_update = user_load($other_user->uid, TRUE);
    $this
      ->assertTrue(in_array('administrator', $user_after_update->roles), 'Administrator role successfully added');
  }

  /**
   * Tests user Update another account fail with no permissions.
   */
  public function testUserUpdatePermFail() {
    $user = $this
      ->drupalCreateUser();
    $this
      ->drupalLogin($user);
    $other_user = $this
      ->drupalCreateUser();
    $update = array(
      'uuid' => $other_user->uuid,
      'name' => 'test_edit',
      'roles' => array(
        '2' => 'authenticated user',
        '3' => 'administrator',
      ),
      'status' => 1,
      'pass' => $other_user->pass,
    );
    $response = $this
      ->servicesPut($this->endpoint->path . '/user/' . $other_user->uuid, $update);
    $user_after_update = user_load($other_user->uid, TRUE);
    $this
      ->assertNotEqual($update['name'], $user_after_update->name, 'User name was not updated without the needed permissions');
    $this
      ->assertFalse(in_array('administrator', $user_after_update->roles), 'Administrator role was not added without the needed permissions');
    $this
      ->assertTrue($response['code'] == 403, 'Updating the user failed without the needed permissions');
  }

  /**
   * Tests users Update their own account fail with no permissions.
   */
  public function testUserOwnUpdatePermFail() {
    $user = $this
      ->drupalCreateUser([
      'access user profiles',
    ]);
    $this
      ->drupalLogin($user);
    $user = user_load($user->uid, TRUE);
    $update = array(
      'uuid' => $user->uuid,
      'roles' => array(
        '2' => 'authenticated user',
        '3' => 'administrator',
      ),
      'status' => 1,
      'pass' => $user->pass,
    );
    $this
      ->servicesPut($this->endpoint->path . '/user/' . $user->uuid, $update);
    $user_after_update = user_load($user->uid, TRUE);
    $this
      ->assertFalse(in_array('administrator', $user_after_update->roles), 'Administrator role was not added without the needed permissions');
    $this
      ->assertEqual($user->roles, $user_after_update->roles, 'Existing roles persist after update.');
  }

  /**
   * Tests user Delete.
   */
  public function testUserDelete() {
    $admin_user = $this
      ->drupalCreateUser(array(
      'administer services',
      'administer users',
    ));
    $this
      ->drupalLogin($admin_user);
    $other_user = $this
      ->drupalCreateUser();
    $this
      ->servicesDelete($this->endpoint->path . '/user/' . $other_user->uuid);
    $user_after_update = user_load($other_user->uid, TRUE);
    $this
      ->assertTrue(empty($user_after_update), 'User was deleted');
  }

  /**
   * Tests user Delete fail with no permissions.
   */
  public function testUserDeletePermFail() {
    $user = $this
      ->drupalCreateUser();
    $this
      ->drupalLogin($user);
    $other_user = $this
      ->drupalCreateUser();
    $response = $this
      ->servicesDelete($this->endpoint->path . '/user/' . $other_user->uuid);
    $user_after_update = user_load($other_user->uid, TRUE);
    $this
      ->assertTrue(!empty($user_after_update), 'User was not deleted without the needed permissions');
    $this
      ->assertTrue($response['code'] == 403, 'Deleting the user failed without the needed permissions');
  }

}

Classes

Namesort descending Description
UuidUserServicesTest Test the UUID User Services integration.