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
 }