public function testInactiveCoupon() { $inactivecoupon = OrderCoupon::create(array("Title" => "Not active", "Code" => "EE891574D6", "Type" => "Amount", "Amount" => 10, "Active" => 0)); $inactivecoupon->write(); $context = array("CouponCode" => $inactivecoupon->Code); $this->assertFalse($inactivecoupon->validateOrder($this->cart, $context), "Coupon is not set to active"); }
public function testMemberGroup() { $coupon = OrderCoupon::create(array("Title" => "Special Members Coupon", "Code" => "GROUPED", "Type" => "Percent", "Percent" => 0.9, "Active" => 1, "GroupID" => $this->objFromFixture("Group", "resellers")->ID)); $coupon->write(); $context = array("CouponCode" => $coupon->Code); $this->assertFalse($coupon->validateOrder($this->cart, $context), "Invalid for memberless order"); $context = array("CouponCode" => $coupon->Code, "Member" => $this->objFromFixture("Member", "bobjones")); $this->assertTrue($coupon->validateOrder($this->othercart, $context), "Valid because member is in resellers group"); }
public function testDates() { $unreleasedcoupon = OrderCoupon::create(array("Title" => "Unreleased \$10 off", "Code" => '0444444440', "Type" => "Amount", "Amount" => 10, "StartDate" => "2200-01-01 12:00:00")); $unreleasedcoupon->write(); $context = array("CouponCode" => $unreleasedcoupon->Code); $this->assertFalse($unreleasedcoupon->validateOrder($this->cart, $context), "Coupon is un released (start date has not arrived)"); $expiredcoupon = OrderCoupon::create(array("Title" => "Save lots", "Code" => "04994C332A", "Type" => "Percent", "Percent" => 0.8, "Active" => 1, "StartDate" => "", "EndDate" => "12/12/1990")); $expiredcoupon->write(); $context = array("CouponCode" => $expiredcoupon->Code); $this->assertFalse($expiredcoupon->validateOrder($this->cart, $context), "Coupon has expired (end date has passed)"); }
public function testProductsCoupon() { $coupon = OrderCoupon::create(array("Title" => "Selected products", "Code" => "PRODUCTS", "Percent" => 0.2)); $coupon->write(); $coupon->Products()->add($this->objFromFixture("Product", "tshirt")); $calculator = new Calculator($this->placedorder, array("CouponCode" => $coupon->Code)); $this->assertEquals($calculator->calculate(), 20); //add another product to coupon product list $coupon->Products()->add($this->objFromFixture("Product", "mp3player")); $this->assertEquals($calculator->calculate(), 100); $this->markTestIncomplete("Test variations also"); }
public function testMinOrderValue() { $coupon = OrderCoupon::create(array("Title" => "Orders 200 and more", "Code" => "200PLUS", "Type" => "Amount", "Amount" => 35, "ForItems" => 0, "ForCart" => 1, "MinOrderValue" => 200)); $coupon->write(); $context = array("CouponCode" => $coupon->Code); $this->assertFalse($coupon->validateOrder($this->cart, $context), "\$8 order isn't enough"); $this->assertTrue($coupon->validateOrder($this->othercart, $context), "\$200 is enough"); $this->assertTrue($coupon->validateOrder($this->placedorder, $context), "\$500 order is enough"); $calculator = new Calculator($this->cart, $context); $this->assertEquals(0, $calculator->calculate()); $calculator = new Calculator($this->othercart, $context); $this->assertEquals(35, $calculator->calculate()); $calculator = new Calculator($this->placedorder, $context); $this->assertEquals(35, $calculator->calculate()); }
function testCouponForm() { OrderCoupon::create(array("Title" => "40% off each item", "Code" => "5B97AA9D75", "Type" => "Percent", "Percent" => 0.4))->write(); $checkoutpage = $this->objFromFixture("CheckoutPage", "checkout"); $checkoutpage->publish("Stage", "Live"); $controller = new CheckoutPage_Controller($checkoutpage); $order = $this->objFromFixture("Order", "cart"); $form = new CouponForm($controller, "CouponForm", $order); $data = array("Code" => "5B97AA9D75"); $form->loadDataFrom($data); $this->assertTrue($form->validate()); $form->applyCoupon($data, $form); $this->assertEquals("5B97AA9D75", Session::get("cart.couponcode")); $form->removeCoupon(array(), $form); }
public function testZoneDiscount() { $coupon = OrderCoupon::create(array("Title" => "Zoned Coupon", "Type" => "Percent", "Percent" => 0.16)); $coupon->write(); $coupon->Zones()->add($this->objFromFixture('Zone', 'transtasman')); $coupon->Zones()->add($this->objFromFixture('Zone', 'special')); $address = $this->objFromFixture("Address", 'bukhp193eq'); $context = array("CouponCode" => $coupon->Code); $this->cart->ShippingAddressID = $address->ID; //set address $this->assertFalse($coupon->validateOrder($this->cart, $context), "check order is out of zone"); $address = $this->objFromFixture("Address", 'sau5024'); $this->othercart->ShippingAddressID = $address->ID; //set address $valid = $coupon->validateOrder($this->othercart, $context); $this->assertTrue($valid, "check order is in zone"); }
function testCouponAndDiscountItemLevel() { OrderDiscount::create(array("Title" => "10% off", "Type" => "Percent", "Percent" => 0.1))->write(); OrderCoupon::create(array("Title" => "\$10 off each item", "Code" => "TENDOLLARSOFF", "Type" => "Amount", "Amount" => 10))->write(); //total discount calculation //20 * socks($8) = 160 ...$10 off each ($8max) = 160 //10 * tshirt($25) = 250 ..$10 off each = 100 //2 * mp3player($200) = 400 ..10% off each = 40 //total discount: 300 $calculator = new Calculator($this->megacart, array('CouponCode' => 'TENDOLLARSOFF')); $this->assertEquals(300, $calculator->calculate(), "complex savings example"); //no coupon in context $calculator = new Calculator($this->megacart); $this->assertEquals(81, $calculator->calculate(), "complex savings example"); //write a test that combines discounts which sum to a greater discount than //the order subtotal }