You are here

uc_product.test in Ubercart 7.3

Ubercart Product Tests

File

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

/**
 * @file
 * Ubercart Product Tests
 */
class UbercartProductTestCase extends UbercartTestHelper {
  public static function getInfo() {
    return array(
      'name' => 'Products',
      'description' => 'Ensure that the product content types provided function properly.',
      'group' => 'Ubercart',
    );
  }

  /**
   * Overrides DrupalWebTestCase::setUp().
   */
  protected function setUp($modules = array(), $permissions = array()) {
    parent::setUp(array(), array(
      'administer content types',
    ));
    $this
      ->drupalLogin($this->adminUser);
  }

  /**
   *
   */
  public function testProductNodeForm() {
    $this
      ->drupalGet('node/add/product');
    foreach (array(
      'model',
      'list_price',
      'cost',
      'sell_price',
      'shippable',
      'weight',
      'weight_units',
      'dim_length',
      'dim_width',
      'dim_height',
      'length_units',
      'pkg_qty',
      'ordering',
    ) as $field) {
      $this
        ->assertFieldByName($field, NULL);
    }
    $body_key = 'body[und][0][value]';

    // Make a node with those fields.
    $edit = array(
      'title' => $this
        ->randomName(32),
      $body_key => $this
        ->randomName(64),
      'model' => $this
        ->randomName(8),
      'list_price' => mt_rand(1, 200),
      'cost' => mt_rand(0, 100),
      'sell_price' => mt_rand(1, 150),
      'shippable' => mt_rand(0, 1),
      'weight' => mt_rand(1, 50),
      'weight_units' => array_rand(array(
        'lb' => t('Pounds'),
        'kg' => t('Kilograms'),
        'oz' => t('Ounces'),
        'g' => t('Grams'),
      )),
      'dim_length' => mt_rand(1, 50),
      'dim_width' => mt_rand(1, 50),
      'dim_height' => mt_rand(1, 50),
      'length_units' => array_rand(array(
        'in' => t('Inches'),
        'ft' => t('Feet'),
        'cm' => t('Centimeters'),
        'mm' => t('Millimeters'),
      )),
    );
    $this
      ->drupalPost('node/add/product', $edit, t('Save'));
    $this
      ->assertText(t('Product @title has been created.', array(
      '@title' => $edit['title'],
    )), t('Product created.'));
    $this
      ->assertText($edit[$body_key], t('Product body found.'));
    $this
      ->assertText(t('SKU: @model', array(
      '@model' => $edit['model'],
    )), t('Product model found.'));
    $this
      ->assertText(t('Price: @price', array(
      '@price' => uc_currency_format($edit['sell_price']),
    )), t('Product sell price found.'));
    $this
      ->assertNoUniqueText(uc_currency_format($edit['sell_price']), t('Price appears more than once.'));
    $elements = $this
      ->xpath('//body[contains(@class, "uc-product-node")]');
    $this
      ->assertEqual(count($elements), 1, t('Product page contains body CSS class.'));
  }

  /**
   *
   */
  public function testProductClassForm() {

    // Try making a new product class.
    $class = $this
      ->randomName(12);
    $type = strtolower($class);
    $edit = array(
      'pcid' => $class,
      'name' => $class,
      'description' => $this
        ->randomName(32),
    );
    $this
      ->drupalPost('admin/store/products/classes', $edit, t('Save'));
    $this
      ->assertText(t('Product class saved.'), t('Product class form submitted.'));
    $base = db_query('SELECT base FROM {node_type} WHERE type = :type', array(
      ':type' => $type,
    ))
      ->fetchField();
    $this
      ->assertEqual($base, 'uc_product', t('The new content type has been created in the database.'));

    // Change the machine name of an existing class.
    $new_type = strtolower($this
      ->randomName(12));
    $edit = array(
      'type' => $new_type,
    );
    $this
      ->drupalPost('admin/structure/types/manage/' . $type, $edit, 'Save content type');
    $this
      ->assertText('Machine name: ' . $new_type, 'Updated machine name found.');
    $this
      ->assertNoText('Machine name: ' . $type, 'Old machine name not found.');

    // Make an existing node type a product class.
    $type = $this
      ->drupalCreateContentType();
    $edit = array(
      'pcid' => $type->type,
      'name' => $type->name,
      'description' => $type->description,
    );
    $node = $this
      ->drupalCreateNode(array(
      'type' => $type->type,
    ));
    $this
      ->drupalPost('admin/store/products/classes', $edit, t('Save'));
    $this
      ->assertText(t('Product class saved.'), t('Product class form submitted.'));
    $base = db_query('SELECT base FROM {node_type} WHERE type = :type', array(
      ':type' => $type->type,
    ))
      ->fetchField();
    $this
      ->assertEqual($base, 'uc_product', t('The new content type has been taken over by uc_product.'));
    $this
      ->drupalPost('node/' . $node->nid, array(
      'qty' => '1',
    ), 'Add to cart');
    $this
      ->assertText($node->title . ' added to your shopping cart.');
  }
  public function testProductQuantity() {
    variable_set('uc_product_add_to_cart_qty', TRUE);

    // Check zero quantity message.
    $this
      ->drupalPost('node/' . $this->product->nid, array(
      'qty' => '0',
    ), 'Add to cart');
    $this
      ->assertText('The quantity cannot be zero.');

    // Check invalid quantity messages.
    $this
      ->drupalPost('node/' . $this->product->nid, array(
      'qty' => 'x',
    ), 'Add to cart');
    $this
      ->assertText('The quantity must be an integer.');
    $this
      ->drupalPost('node/' . $this->product->nid, array(
      'qty' => '1a',
    ), 'Add to cart');
    $this
      ->assertText('The quantity must be an integer.');

    // Check cart add message.
    $this
      ->drupalPost('node/' . $this->product->nid, array(
      'qty' => '1',
    ), 'Add to cart');
    $this
      ->assertText($this->product->title . ' added to your shopping cart.');

    // Check cart update message.
    $this
      ->drupalPost('node/' . $this->product->nid, array(
      'qty' => '1',
    ), 'Add to cart');
    $this
      ->assertText('Your item(s) have been updated.');
  }

}

Classes

Namesort descending Description
UbercartProductTestCase @file Ubercart Product Tests