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()); }
public function testCategoryDiscount() { $discount = OrderDiscount::create(array("Title" => "5% off clothing", "Type" => "Percent", "Percent" => 0.05)); $discount->write(); $discount->Categories()->add($this->objFromFixture("ProductCategory", "clothing")); $this->assertTrue($discount->validateOrder($this->cart), "Order contains a t-shirt. " . $discount->getMessage()); $calculator = new Calculator($this->cart); $this->assertEquals($calculator->calculate(), 0.4, "5% discount for socks in cart"); $this->assertFalse($discount->validateOrder($this->othercart), "Order does not contain clothing"); $calculator = new Calculator($this->othercart); $this->assertEquals($calculator->calculate(), 0, "No discount, because no product in category"); $discount->Categories()->removeAll(); $discount->Categories()->add($this->objFromFixture("ProductCategory", "kites")); $this->assertTrue($discount->validateOrder($this->kitecart), "Order contains a kite. " . $discount->getMessage()); $calculator = new Calculator($this->kitecart); $this->assertEquals($calculator->calculate(), 1.75, "5% discount for kite in cart"); }
function testProductDiscount() { $discount = OrderDiscount::create(array("Title" => "20% off each selected products", "Percent" => 0.2, "Active" => 1, "ExactProducts" => 1)); $discount->write(); //selected products $discount->Products()->add($this->socks); $discount->Products()->add($this->tshirt); //should work for megacart //20 * socks($8) = 160 ...20% off each = 32 //10 * tshirt($25) = 250 ..20% off each = 50 //2 * mp3player($200) = 400 ..nothing off = 0 //total discount: 82 $calculator = new Calculator($this->megacart); $this->assertEquals(82, $calculator->calculate(), "20% off selected products"); //no discount for cart $calculator = new Calculator($this->cart); $this->assertEquals(0, $calculator->calculate(), "20% off selected products"); //no discount for modifiedcart $calculator = new Calculator($this->modifiedcart); $this->assertEquals(0, $calculator->calculate(), "20% off selected products"); //partial match $discount->ExactProducts = 0; $discount->write(); //total discount: 82 $calculator = new Calculator($this->megacart); $this->assertEquals(82, $calculator->calculate(), "20% off selected products"); //discount for cart: 32 (just socks) $calculator = new Calculator($this->cart); $this->assertEquals(1.6, $calculator->calculate(), "20% off selected products"); //no discount for modified cart $calculator = new Calculator($this->modifiedcart); $this->assertEquals(0, $calculator->calculate(), "20% off selected products"); //get individual item discounts $discount = $this->objFromFixture("Product_OrderItem", "megacart_socks")->Discounts()->first(); $this->assertEquals(32, $discount->DiscountAmount); $this->markTestIncomplete("Test variations also"); }
public function testShippingAndCartLevels() { if (!class_exists('ShippingFrameworkModifier')) { return; } $order = $this->othercart; //$200 $shipping = new ShippingFrameworkModifier(array('Amount' => 30, 'OrderID' => $order->ID)); $shipping->write(); $order->Modifiers()->add($shipping); //order total is $230 $discount = OrderDiscount::create(array("Title" => "\$10 off entire order", "Type" => "Amount", "Amount" => 10, "ForShipping" => 1, "ForItems" => 0, "ForCart" => 1)); $discount->write(); $calculator = new Calculator($order); $this->assertTrue($discount->validateOrder($order), "Discount is valid"); $this->assertEquals(10, $calculator->calculate(), "\$10 is maximum discount"); }