You are here

uc_roles.test in Ubercart 7.3

Role assignment product feature tests.

File

uc_roles/tests/uc_roles.test
View source
<?php

/**
 * @file
 * Role assignment product feature tests.
 */

/**
 * Tests the role purchase functionality.
 */
class UbercartRolesTestCase extends UbercartTestHelper {
  public static function getInfo() {
    return array(
      'name' => 'Roles',
      'description' => 'Ensures that the purchase of roles functions correctly.',
      'group' => 'Ubercart',
    );
  }

  /**
   * Overrides DrupalWebTestCase::setUp().
   */
  protected function setUp($modules = array(), $permissions = array()) {
    $modules = array(
      'uc_payment',
      'uc_payment_pack',
      'uc_roles',
    );

    // Needed to see/modify roles on the /user/%/edit page.
    $permissions = array(
      'administer permissions',
      'administer users',
      'view all role expirations',
    );
    parent::setUp($modules, $permissions);
  }
  public function testRolePurchaseCheckout() {

    // Add role assignment to the test product.
    $rid = $this
      ->drupalCreateRole(array(
      'access content',
    ));
    $this
      ->drupalLogin($this->adminUser);
    $this
      ->drupalPost('node/' . $this->product->nid . '/edit/features', array(
      'feature' => 'role',
    ), t('Add'));
    $edit = array(
      'uc_roles_role' => $rid,
      'end_override' => TRUE,
      'uc_roles_expire_relative_duration' => 1,
      'uc_roles_expire_relative_granularity' => 'day',
    );
    $this
      ->drupalPost(NULL, $edit, t('Save feature'));

    // Check out with the test product.
    $this
      ->drupalPost('node/' . $this->product->nid, array(), t('Add to cart'));
    $order = $this
      ->checkout();
    uc_payment_enter($order->order_id, 'other', $order->order_total);

    // Test that the role was granted.
    $account = user_load($order->uid);
    $this
      ->assertTrue(isset($account->roles[$rid]), 'Existing user was granted role.');

    // Test that the email is correct.
    $mail = $this
      ->findMail('/Ubercart: ' . preg_quote($account->roles[$rid]) . ' role granted/');

    // Delete the user.
    user_delete($order->uid);

    // Run cron to ensure deleted users are handled correctly.
    $this
      ->drupalLogout();
    $this
      ->cronRun();
  }
  public function testRoleAdminDelete() {

    // Add role assignment to the test product.
    $rid = $this
      ->drupalCreateRole(array(
      'access content',
    ));
    $this
      ->drupalLogin($this->adminUser);
    $this
      ->drupalPost('node/' . $this->product->nid . '/edit/features', array(
      'feature' => 'role',
    ), t('Add'));
    $edit = array(
      'uc_roles_role' => $rid,
      'end_override' => TRUE,
      'uc_roles_expire_relative_duration' => 1,
      'uc_roles_expire_relative_granularity' => 'day',
    );
    $this
      ->drupalPost(NULL, $edit, t('Save feature'));

    // Check out with the test product.
    $this
      ->drupalPost('node/' . $this->product->nid, array(), t('Add to cart'));
    $order = $this
      ->checkout();
    uc_payment_enter($order->order_id, 'other', $order->order_total);

    // Test that the role was granted.
    $account = user_load($order->uid);
    $this
      ->assertTrue(isset($account->roles[$rid]), 'Existing user was granted role.');

    // Test that the role appears on the user edit page.
    $this
      ->drupalGet('user/' . $order->uid . '/edit');
    $this
      ->assertText('Ubercart roles', 'Ubercart roles fieldset found.');
    $this
      ->assertNoText('There are no pending expirations for roles this user.', 'User has a role expiration.');

    // Delete the role using the Drupal user edit page
    // by unchecking the role and submitting the form.
    $this
      ->drupalPost('user/' . $order->uid . '/edit', array(
      'roles[' . $rid . ']' => FALSE,
    ), t('Save'));

    // Test that the role was removed.
    $account = user_load($order->uid, TRUE);
    $this
      ->assertFalse(isset($account->roles[$rid]), 'Role was removed from user.');

    // Test that the role expiration data was removed.
    $this
      ->assertText('There are no pending expirations for roles this user.', 'User has no role expirations.');
  }

}

Classes

Namesort descending Description
UbercartRolesTestCase Tests the role purchase functionality.