You are here

uc_stock.test in Ubercart 7.3

Ubercart stock related tests.

File

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

/**
 * @file
 * Ubercart stock related tests.
 */
class UbercartStockTestCase extends UbercartTestHelper {
  public static function getInfo() {
    return array(
      'name' => 'Stock',
      'description' => 'Ensure that stock control functions properly.',
      'group' => 'Ubercart',
    );
  }

  /**
   * Overrides DrupalWebTestCase::setUp().
   */
  protected function setUp($modules = array(), $permissions = array()) {
    parent::setUp(array(
      'uc_stock',
    ), array(
      'administer product stock',
    ));
    $this
      ->drupalLogin($this->adminUser);
  }
  public function testProductStock() {
    $this
      ->drupalGet('node/' . $this->product->nid . '/edit/stock');
    $this
      ->assertText($this->product->title);
    $this
      ->assertText($this->product->model, 'Product SKU found.');
    $this
      ->assertNoFieldChecked('edit-stock-0-active', 'Stock tracking is not active.');
    $this
      ->assertFieldByName('stock[0][stock]', '0', 'Default stock level found.');
    $this
      ->assertFieldByName('stock[0][threshold]', '0', 'Default stock threshold found.');
    $stock = rand(1, 1000);
    $edit = array(
      'stock[0][active]' => 1,
      'stock[0][stock]' => $stock,
      'stock[0][threshold]' => rand(1, 100),
    );
    $this
      ->drupalPost(NULL, $edit, t('Save changes'));
    $this
      ->assertText('Stock settings saved.');
    $this
      ->assertTrue(uc_stock_is_active($this->product->model));
    $this
      ->assertEqual($stock, uc_stock_level($this->product->model));
    $stock = rand(1, 1000);
    uc_stock_set($this->product->model, $stock);
    $this
      ->drupalGet('node/' . $this->product->nid . '/edit/stock');
    $this
      ->assertFieldByName('stock[0][stock]', (string) $stock, 'Set stock level found.');
  }
  public function testStockDecrement() {
    $stock = rand(100, 1000);
    $edit = array(
      'stock[0][active]' => 1,
      'stock[0][stock]' => $stock,
    );
    $this
      ->drupalPost('node/' . $this->product->nid . '/edit/stock', $edit, t('Save changes'));
    $this
      ->assertText('Stock settings saved.');

    // Enable product quantity field.
    variable_set('uc_product_add_to_cart_qty', TRUE);
    $qty = rand(1, 100);
    $edit = array(
      'qty' => $qty,
    );
    $this
      ->drupalPost('node/' . $this->product->nid, $edit, t('Add to cart'));
    $this
      ->checkout();
    $this
      ->assertEqual($stock - $qty, uc_stock_level($this->product->model));
  }
  public function testStockThresholdMail() {
    $edit = array(
      'uc_stock_threshold_notification' => 1,
    );
    $this
      ->drupalPost('admin/store/settings/stock', $edit, 'Save configuration');
    $qty = rand(10, 100);
    $edit = array(
      'stock[0][active]' => 1,
      'stock[0][stock]' => $qty + 1,
      'stock[0][threshold]' => $qty,
    );
    $this
      ->drupalPost('node/' . $this->product->nid . '/edit/stock', $edit, 'Save changes');
    $this
      ->drupalPost('node/' . $this->product->nid, array(), 'Add to cart');
    $this
      ->checkout();
    $mail = $this
      ->drupalGetMails(array(
      'id' => 'uc_stock_threshold',
    ));
    $mail = array_pop($mail);
    $this
      ->assertTrue(strpos($mail['subject'], 'Stock threshold limit reached') !== FALSE, 'Threshold mail subject is correct.');
    $this
      ->assertTrue(strpos($mail['body'], $this->product->title) !== FALSE, 'Mail body contains product title.');
    $this
      ->assertTrue(strpos($mail['body'], $this->product->model) !== FALSE, 'Mail body contains SKU.');
    $this
      ->assertTrue(strpos($mail['body'], 'has reached ' . $qty) !== FALSE, 'Mail body contains quantity.');
  }

}

Classes

Namesort descending Description
UbercartStockTestCase @file Ubercart stock related tests.