uc_product_power_tools.test in Ubercart Product Power Tools 7
Ubercart Product Power Tools Tests
File
tests/uc_product_power_tools.testView source
<?php
/**
* @file
* Ubercart Product Power Tools Tests
*/
class UbercartProductPowerToolsTestCase extends UbercartTestHelper {
public static function getInfo() {
return array(
'name' => 'Product Power Tools',
'description' => 'Ensure Product Power Tools module functions properly.',
'group' => 'Ubercart',
);
}
/**
* Overrides DrupalWebTestCase::setUp().
*/
public function setUp($modules = array(), $permissions = array()) {
parent::setUp(array(
'uc_stock',
'uc_shipping',
'uc_product_power_tools',
'token',
), array(
'administer content types',
'administer product power tools settings',
));
$this
->drupalLogin($this->adminUser);
$edit = array(
'classes[product]' => 1,
);
$this
->drupalPost('admin/store/products/power-tools', $edit, t('Update'));
$this
->assertText('Power Tools Class Settings updated.', 'Product Power Tools enabled for Product content type.');
// Allow the default quantity to be set.
variable_set('uc_product_add_to_cart_qty', TRUE);
}
public function testProductPowerToolsNodeForm() {
// Default settings
$edit = array(
'asku' => '0',
'asku_pattern' => '',
'cost_settings' => '0.000',
'costonoff' => '0',
'dq_settings' => '1',
'dqonoff' => '0',
'height' => '0.000',
'length' => '0',
'length_units' => 'in',
'lp_settings' => '0.000',
'lponoff' => '0',
'lpos_settings' => '0',
'lposonoff' => '0',
'pq_settings' => '1',
'pqonoff' => '0',
'product_class' => 'product',
'ship_settings' => '0',
'sp_settings' => '0.000',
'sponoff' => '0',
'stock_settings' => '0',
'stock_threshold' => '0',
'stockonoff' => '0',
'weight' => '0',
'weight_units' => 'lb',
'width' => '0',
);
$this
->validateSettings($edit);
// Begin "Show Auto SKU Generation" tests.
// Disable (show but do not allow editing) SKU field and Automatically Generate from replacement pattern below:
$edit = array(
'asku' => 3,
'asku_pattern' => '[node:title]-test',
);
$title = $this
->randomName(32);
$overrides = array(
'title' => $title,
);
$expected = array(
'model' => $title . '-test',
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->assertEqual(1, 1, '1 is equal');
$this
->drupalGet('node/add/product');
$disabled_field = $this
->xpath('//input[@id=:id and @disabled="disabled"]', array(
':id' => 'edit-model',
));
$this
->assertTrue($disabled_field, t('The SKU cannot be changed.'));
// Hide SKU field and Automatically Generate from replacement pattern below:
$edit['asku'] = 1;
$title = $this
->randomName(32);
$overrides = array(
'title' => $title,
);
$expected = array(
'model' => $title . '-test',
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->assertEqual(1, 1, '2 is equal');
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-model', '', 'The edit-model field is not on the page');
// Show SKU field, but for new products give the option to Automatically Generate from replacement pattern below:
$edit['asku'] = 2;
$title = $this
->randomName(32);
$overrides = array(
'title' => $title,
);
$expected = array(
'model' => $title . '-test',
);
// Check auto SKU.
$this
->validateSettings($edit, $overrides, $expected);
$this
->assertEqual(1, 1, '3 is equal');
// Check regular submission.
$expected = array();
$overrides = array();
$this
->validateSettings($edit, $overrides, $expected);
$this
->assertEqual(1, 1, '4 is equal');
// Begin "List Price" tests.
// Hide List Price field & Use Sell Price Value entered on product form.
$edit = array(
'asku' => 0,
'lponoff' => 1,
);
$sell_price = mt_rand(1, 150);
$overrides = array(
'sell_price' => $sell_price,
);
$expected = array(
'list_price' => $sell_price,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->assertEqual(1, 1, '5 is equal');
$overrides = array();
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-sell-price', '', 'The edit-sell-price field is not on the page');
// Hide List Price field & Use default value below:
$list_price = mt_rand(1, 150);
$edit = array(
'lponoff' => 2,
'lp_settings' => $list_price,
);
$expected = array(
'list_price' => $list_price,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-list-price', '', 'The edit-list-price field is not on the page');
// Show List Price field & Use default value below:
$edit = array(
'lponoff' => 3,
'lp_settings' => $list_price,
);
$this
->validateSettings($edit, $overrides, $expected);
// Test a normal submission with these settings.
$expected = array();
$this
->validateSettings($edit, $overrides, $expected);
// Begin "Cost" tests.
// Hide Cost field & Use default value below:
$cost = mt_rand(1, 150);
$edit = array(
'lponoff' => 0,
'costonoff' => 1,
'cost_settings' => $cost,
);
$expected = array(
'cost' => $cost,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-cost', '', 'The edit-cost field is not on the page');
// Show Cost field & Use default value below:
$edit['costonoff'] = 2;
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertFieldById('edit-cost', $cost, 'The edit-cost field is on the page');
// Test a normal submission with these settings.
$expected = array();
$this
->validateSettings($edit, $overrides, $expected);
// Begin "Sell price" tests.
// Hide Sell price field & Use default value below:
$sell_price = mt_rand(1, 150);
$edit = array(
'costonoff' => 0,
'sponoff' => 1,
'sp_settings' => $sell_price,
);
$expected = array(
'sell_price' => $sell_price,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-sell-price', '', 'The edit-sell-price field is not on the page');
// Show Sell price field & Use default value below:
$edit['sponoff'] = 2;
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertFieldById('edit-sell-price', $sell_price, 'The edit-sell-price field is on the page');
// Test a normal submission with these settings.
$expected = array();
$this
->validateSettings($edit, $overrides, $expected);
// Begin "Default Quantity" tests.
// Hide Default Quantity field & Use default value below:
$default_qty = mt_rand(1, 100);
$edit = array(
'sponoff' => 0,
'dqonoff' => 1,
'dq_settings' => $default_qty,
);
$expected = array(
'default_qty' => $default_qty,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-default-qty', '', 'The edit-default-qty field is not on the page');
// Show Default Quantity field & Use default value below:
$edit = array(
'dqonoff' => 2,
'dq_settings' => $default_qty,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertFieldById('edit-default-qty', '', 'The edit-default-qty field is on the page');
// Test a normal submission with these settings.
$expected = array();
$this
->validateSettings($edit, $overrides, $expected);
// Begin "Default Package Quantity" tests.
// Hide Default Package Quantity field & Use default value below:
$pkg_qty = mt_rand(1, 100);
$edit = array(
'dqonoff' => 0,
'pqonoff' => 1,
'pq_settings' => $pkg_qty,
);
$expected = array(
'pkg_qty' => $pkg_qty,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-pkg-qty', '', 'The edit-pkg-qty field is not on the page');
// Show Default Quantity field & Use default value below:
$edit = array(
'pqonoff' => 2,
'pq_settings' => $pkg_qty,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertFieldById('edit-pkg-qty', '', 'The edit-pkg-qty field is on the page');
// Test a normal submission with these settings.
$expected = array();
$this
->validateSettings($edit, $overrides, $expected);
// Begin "List Position" tests.
// Hide List Position field & Use default value below:
$lpos = mt_rand(-25, 25);
$edit = array(
'pqonoff' => 0,
'lposonoff' => 1,
'lpos_settings' => $lpos,
);
$expected = array(
'ordering' => $lpos,
);
$this
->validateSettings($edit, $overrides, $expected);
// Begin "Shipping" tests.
// Product is Shippable. Hide checkbox, but show other shipping fields on product entry form & use default values below:
$length = mt_rand(1, 50);
$width = mt_rand(1, 50);
$height = mt_rand(1, 50);
$length_units = array_rand(array(
'in' => t('Inches'),
'ft' => t('Feet'),
'cm' => t('Centimeters'),
'mm' => t('Millimeters'),
));
$weight = mt_rand(1, 50);
$weight_units = array_rand(array(
'lb' => t('Pounds'),
'kg' => t('Kilograms'),
'oz' => t('Ounces'),
'g' => t('Grams'),
));
$edit = array(
'lposonoff' => 0,
'ship_settings' => 1,
'length' => $length,
'width' => $width,
'height' => $height,
'length_units' => $length_units,
'weight' => $weight,
'weight_units' => $weight_units,
);
$expected = array(
'shippable' => 1,
'dim_length' => $length,
'dim_width' => $width,
'dim_height' => $height,
'length_units' => $length_units,
'weight' => $weight,
'weight_units' => $weight_units,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-shippable', '', 'The edit-shippable field is not on the page');
$this
->assertFieldById('edit-weight--2', '', 'The edit-weight--2 field is on the page');
$this
->assertFieldById('edit-dim-length', '', 'The edit-dim-length field is on the page');
// Product is Shippable. Hide checkbox & all shipping fields on product entry form & use default values below:
$edit = array(
'ship_settings' => 5,
);
$expected = array(
'shippable' => 1,
'dim_length' => $length,
'dim_width' => $width,
'dim_height' => $height,
'length_units' => $length_units,
'weight' => $weight,
'weight_units' => $weight_units,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-shippable', '', 'The edit-shippable field is not on the page');
$this
->assertNoFieldById('edit-weight--2', '', 'The edit-weight--2 field is not on the page');
$this
->assertNoFieldById('edit-dim-length', '', 'The edit-dim-length field is not on the page');
// Product is NOT Shippable. Hide checkbox, but show other shipping fields on product entry form & use default values below:
$edit = array(
'ship_settings' => 2,
);
$expected = array(
'shippable' => 0,
'dim_length' => $length,
'dim_width' => $width,
'dim_height' => $height,
'length_units' => $length_units,
'weight' => $weight,
'weight_units' => $weight_units,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-shippable', '', 'The edit-shippable field is not on the page');
$this
->assertFieldById('edit-weight--2', '', 'The edit-weight--2 field is on the page');
$this
->assertFieldById('edit-dim-length', '', 'The edit-dim-length field is on the page');
// Product is NOT Shippable. Hide checkbox & all shipping fields on product entry form
$edit = array(
'ship_settings' => 3,
'length' => $length,
'width' => $width,
'height' => $height,
'length_units' => $length_units,
'weight' => $weight,
'weight_units' => $weight_units,
);
$expected = array(
'shippable' => 0,
'dim_length' => $length,
'dim_width' => $width,
'dim_height' => $height,
'length_units' => $length_units,
'weight' => $weight,
'weight_units' => $weight_units,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertNoFieldById('edit-shippable', '', 'The edit-shippable field is not on the page');
$this
->assertNoFieldById('edit-weight--2', '', 'The edit-weight--2 field is not on the page');
$this
->assertNoFieldById('edit-dim-length', '', 'The edit-dim-length field is not on the page');
// Show checkbox but hide all shipping fields on product entry form
$edit = array(
'ship_settings' => 4,
'length' => $length,
'width' => $width,
'height' => $height,
'length_units' => $length_units,
'weight' => $weight,
'weight_units' => $weight_units,
);
$expected = array(
'dim_length' => $length,
'dim_width' => $width,
'dim_height' => $height,
'length_units' => $length_units,
'weight' => $weight,
'weight_units' => $weight_units,
);
$this
->validateSettings($edit, $overrides, $expected);
$this
->drupalGet('node/add/product');
$this
->assertFieldById('edit-shippable', '', 'The edit-shippable field is on the page');
$this
->assertNoFieldById('edit-weight--2', '', 'The edit-weight--2 field is not on the page');
$this
->assertNoFieldById('edit-dim-length', '', 'The edit-dim-length field is not on the page');
// Begin "Stock" tests.
// Set stock level using default value below
$stock_settings = mt_rand(1, 100);
$stock_threshold = mt_rand(100, 200);
$edit = array(
'ship_settings' => 0,
'stockonoff' => 1,
'stock_settings' => $stock_settings,
'stock_threshold' => $stock_threshold,
);
// Generate title so we can later get node ID by title.
$title = $this
->randomName(32);
$overrides = array(
'title' => $title,
);
$expected = array();
$expected['stock_settings'] = $stock_settings;
$expected['stock_threshold'] = $stock_threshold;
$this
->validateSettings($edit, $overrides, $expected);
$node = $this
->drupalGetNodeByTitle($edit['title']);
$this
->drupalGet('node/' . $node->nid . '/edit/stock');
$this
->assertFieldById('edit-stock-0-stock', $stock_settings);
$this
->assertFieldById('edit-stock-0-threshold', $stock_threshold);
}
/**
* Helper function to set up given settings, submit a new product node and
* check that node is valid.
*
* @param array $edit
* @param array $overrides
* @param array $expected Values that are expected from automatic submission.
*/
protected function validateSettings($edit = array(), $overrides = array(), $expected = array()) {
$this
->drupalPost('admin/store/products/power-tools/product', $edit, t('Submit'));
$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',
'default_qty',
'pkg_qty',
'ordering',
) as $field) {
if (!isset($expected[$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),
'default_qty' => mt_rand(1, 100),
'pkg_qty' => mt_rand(1, 100),
'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'),
)),
'ordering' => mt_rand(-25, 25),
);
foreach ($overrides as $override_name => $override_value) {
$edit[$override_name] = $override_value;
}
// If we are expecting a certain value, unset it from the form submissions.
foreach (array_keys($expected) as $unset_name) {
unset($edit[$unset_name]);
}
$this
->drupalPost('node/add/product', $edit, t('Save'));
$this
->assertText(t('Product @title has been created.', array(
'@title' => $edit['title'],
)), t('Product created.'));
$model = isset($expected['model']) ? $expected['model'] : $edit['model'];
$this
->assertText(t('SKU: @model', array(
'@model' => $model,
)), t('Product model found.'));
$sell_price = isset($expected['sell_price']) ? $expected['sell_price'] : $edit['sell_price'];
$this
->assertText(t('Price: @price', array(
'@price' => uc_currency_format($sell_price),
)), t('Product sell price found.'));
$list_price = isset($expected['list_price']) ? $expected['list_price'] : $edit['list_price'];
$this
->assertText(t('List price: @price', array(
'@price' => uc_currency_format($list_price),
)), t('Product list price found.'));
$cost = isset($expected['cost']) ? $expected['cost'] : $edit['cost'];
$this
->assertText(t('Cost: @price', array(
'@price' => uc_currency_format($cost),
)), t('Product cost found.'));
$weight = isset($expected['weight']) ? $expected['weight'] : $edit['weight'];
$weight_units = isset($expected['weight_units']) ? $expected['weight_units'] : $edit['weight_units'];
$this
->assertText(t('Weight: @weight', array(
'@weight' => uc_weight_format($weight, $weight_units),
)), t('Product weight found.'));
$length = isset($expected['dim_length']) ? $expected['dim_length'] : $edit['dim_length'];
$width = isset($expected['dim_width']) ? $expected['dim_width'] : $edit['dim_width'];
$height = isset($expected['dim_height']) ? $expected['dim_height'] : $edit['dim_height'];
$length_units = isset($expected['length_units']) ? $expected['length_units'] : $edit['length_units'];
$dimensions = uc_length_format($length, $length_units) . ' × ' . uc_length_format($width, $length_units) . ' × ' . uc_length_format($height, $length_units);
$this
->assertText(t('Dimensions: @dimensions', array(
'@dimensions' => $dimensions,
)), t('Product dimensions found.'));
$node = $this
->drupalGetNodeByTitle($edit['title']);
$default_qty = isset($expected['default_qty']) ? $expected['default_qty'] : $edit['default_qty'];
$this
->assertEqual($node->default_qty, $default_qty, t('Default quantity found.'));
$pkg_qty = isset($expected['pkg_qty']) ? $expected['pkg_qty'] : $edit['pkg_qty'];
$this
->assertEqual($node->pkg_qty, $pkg_qty, t('Package quantity found.'));
}
}
Classes
Name | Description |
---|---|
UbercartProductPowerToolsTestCase | @file Ubercart Product Power Tools Tests |