uc_coupon.test in Ubercart Discount Coupons 7.3
Ubercart Discount Coupon Tests.
File
tests/uc_coupon.testView source
<?php
/**
* @file
* Ubercart Discount Coupon Tests.
*/
/**
* SimpleTests for Ubercart Discount Coupons
*/
class UcCouponTestCase extends UbercartTestHelper {
public static function getInfo() {
return array(
'name' => 'Discount Coupons',
'description' => 'Test discount coupons.',
'group' => 'Ubercart',
);
}
/**
* Overrides DrupalWebTestCase::setUp().
*/
function setUp() {
$modules = array(
'uc_coupon',
'uc_payment',
'uc_payment_pack',
);
$permissions = array(
'manage store coupons',
);
parent::setUp($modules, $permissions);
$this
->drupalLogin($this->adminUser);
}
function createCoupon($edit = array()) {
$edit += array(
'code' => $this
->randomName(8),
'name' => $this
->randomName(20),
'discount' => mt_rand(1, 50) . '%',
'status' => 1,
);
$form_state = array(
'values' => $edit,
);
drupal_form_submit('uc_coupon_add_form', $form_state);
$cid = db_query('SELECT cid FROM {uc_coupons} WHERE code = :code', array(
':code' => trim(strtoupper($edit['code'])),
))
->fetchField();
$this
->assertTrue($cid, 'Coupon was created successfully');
if (!$cid) {
debug(form_get_errors(), 'Form errors:');
}
$coupon = uc_coupon_load($cid);
return $coupon;
}
public function applyCoupons($coupons, $products = array(), $total = NULL) {
foreach ($products as $product) {
$this
->drupalPost('node/' . $product->nid, array(), t('Add to cart'));
$this
->assertRaw($product->title, 'Product appears on cart page');
}
foreach ($coupons as $coupon) {
$this
->drupalPost('cart', array(
'code' => $coupon->code,
), t('Apply to order'));
if ($total !== FALSE) {
$this
->assertRaw('Coupon ' . $coupon->code, 'Applied coupon code appears on cart page.');
}
else {
$this
->assertNoRaw('Coupon ' . $coupon->code, 'Invalid coupon code does not appear on cart page.');
}
}
if ($total === FALSE) {
$this
->assertNoRaw(uc_currency_format($total), 'Invalid discount was not applied to total.');
}
elseif (!is_null($total)) {
$this
->assertRaw(uc_currency_format($total), 'Discounted total is correct on cart page.');
}
}
// Our own version of the checkout sequence, optionally checking for coupons.
function checkout($coupons = array(), $total = FALSE) {
$total = uc_currency_format($total);
$this
->drupalPost('cart', array(
'items[0][qty]' => 1,
), t('Checkout'));
foreach ($coupons as $coupon) {
$this
->assertRaw('Coupon ' . $coupon->code, "Coupon {$coupon->code} appears on checkout page.");
}
if ($total !== FALSE) {
$this
->assertRaw($total, "The order total of {$total} is correct on the checkout page");
}
$edit = $this
->populateCheckoutForm();
$this
->drupalPost(NULL, $edit, t('Review order'));
foreach ($coupons as $coupon) {
$this
->assertRaw('Coupon ' . $coupon->code, "Coupon {$coupon->code} appears on review page.");
}
if ($total !== FALSE) {
$this
->assertRaw($total, "The order total of {$total} is correct on the review page");
}
// Complete the review page.
$this
->drupalPost(NULL, array(), t('Submit order'));
$order_id = db_query("SELECT order_id FROM {uc_orders} WHERE delivery_first_name = :name", array(
':name' => $edit['panes[delivery][delivery_first_name]'],
))
->fetchField();
if ($order_id) {
$order = uc_order_load($order_id);
if ($total !== FALSE) {
$this
->assertEqual(uc_currency_format(uc_order_get_total($order)), $total, 'Saved order total is correct');
}
}
else {
$this
->fail(t('No order was created.'));
$order = FALSE;
}
return $order;
}
public function testGiftCertificate() {
$coupon = $this
->createCoupon(array(
'discount' => '100',
'store_credit' => 1,
));
$product = $this
->createProduct(array(
'sell_price' => '75',
));
$this
->applyCoupons(array(
$coupon,
), array(
$product,
), 0);
$this
->assertText('Subtotal: $0.00');
$order = $this
->checkout();
uc_order_update_status($order->order_id, 'payment_received');
$this
->applyCoupons(array(
$coupon,
), array(
$product,
), 50);
}
public function testCoupon() {
$coupon = $this
->createCoupon(array(
'discount' => '100',
));
$product = $this
->createProduct(array(
'sell_price' => '150',
));
$total = $product->sell_price - $coupon->value;
$this
->applyCoupons(array(
$coupon,
), array(
$product,
), $total);
$order = $this
->checkout(array(
$coupon,
), $total);
// Try again to make sure the default usage limit works.
uc_order_update_status($order->order_id, 'payment_received');
$this
->applyCoupons(array(
$coupon,
), array(
$product,
), FALSE);
// Clear the usage limit and try again.
$coupon->max_uses = 0;
uc_coupon_save($coupon);
$this
->applyCoupons(array(
$coupon,
), array(), $total);
}
}
Classes
Name | Description |
---|---|
UcCouponTestCase | SimpleTests for Ubercart Discount Coupons |