You are here

public function UbercartProductPowerToolsTestCase::testProductPowerToolsNodeForm in Ubercart Product Power Tools 7

File

tests/uc_product_power_tools.test, line 35
Ubercart Product Power Tools Tests

Class

UbercartProductPowerToolsTestCase
@file Ubercart Product Power Tools Tests

Code

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);
}