You are here

public function UbercartAttributeTestCase::testProductAttribute in Ubercart 7.3

Tests attributes applied to a product.

File

uc_attribute/tests/uc_attribute.test, line 718
Ubercart Attribute Tests.

Class

UbercartAttributeTestCase
SimpleTests for the Ubercart Attributes API.

Code

public function testProductAttribute() {
  $product = $this
    ->createProduct();
  $attribute = self::createAttribute(array(
    'display' => 2,
    'required' => TRUE,
  ));
  for ($i = 0; $i < 3; $i++) {
    $option = self::createAttributeOption(array(
      'aid' => $attribute->aid,
    ));
    $adjustment = self::createProductAdjustment(array(
      'combination' => serialize(array(
        $attribute->aid => $option->oid,
      )),
      'nid' => $product->nid,
    ));
    $option->model = $adjustment->model;
    $attribute->options[$option->oid] = $option;
  }
  uc_attribute_subject_save($attribute, 'product', $product->nid, TRUE);

  // Product node display.
  $this
    ->drupalGet('node/' . $product->nid);
  $this
    ->assertText($attribute->label, 'Attribute label found for product');
  $this
    ->assertText($attribute->description, 'Attribute description found for product');
  foreach ($attribute->options as $option) {
    $this
      ->assertText($option->name, 'Option name found for product');
    $this
      ->assertText(uc_currency_format($option->price), 'Option price adjustment found for product');
  }

  // Test required attribute.
  $this
    ->drupalPost(NULL, array(), 'Add to cart');
  $this
    ->assertText($attribute->label . ' field is required', 'Required attribute message found.');

  // Cart display.
  $price = uc_currency_format($product->sell_price + $option->price);
  $edit = array(
    'attributes[' . $attribute->aid . ']' => $option->oid,
  );
  $this
    ->drupalPost(NULL, $edit, 'Add to cart');
  $this
    ->assertText($attribute->label . ': ' . $option->name, 'Attribute and selected option found in cart');
  $this
    ->assertText($price, 'Adjusted price found in cart');

  // Checkout display.
  $this
    ->drupalPost(NULL, array(), 'Checkout');
  $this
    ->assertText($attribute->label . ': ' . $option->name, 'Attribute and selected option found at checkout');
  $this
    ->assertText($price, 'Adjusted price found at checkout');
  $this
    ->checkout();

  // Admin order display.
  $cost = uc_currency_format($product->cost + $option->cost);
  $this
    ->drupalGet('admin/store/orders/1');
  $this
    ->assertText($attribute->label . ': ' . $option->name, 'Attribute and selected option found in admin order display');
  $this
    ->assertText($option->model, 'Adjusted SKU found in admin order display');
  $this
    ->assertText($cost, 'Adjusted cost found in admin order display');
  $this
    ->assertText($price, 'Adjusted price found in admin order display');

  // Invoice display.
  $this
    ->drupalGet('admin/store/orders/1/invoice');
  $this
    ->assertText($attribute->label . ': ' . $option->name, 'Attribute and selected option found on invoice');
  $this
    ->assertText('SKU: ' . $option->model, 'Adjusted SKU found on invoice');
  $this
    ->assertText($price, 'Adjusted price found on invoice');
}