Source of file OrderCouponTest.php
Size: 4,401 Bytes - Last Modified: 2021-12-23T10:25:05+00:00
/var/www/docs.ssmods.com/process/src/tests/OrderCouponTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | <?php namespace SilverShop\Discounts\Tests; use SilverShop\Discounts\Calculator; use SilverStripe\Dev\SapphireTest; use SilverShop\Tests\ShopTest; use SilverStripe\Core\Config\Config; use SilverShop\Discounts\Model\OrderCoupon; use SilverShop\Page\Product; use SilverShop\Model\Order; class OrderCouponTest extends SapphireTest { protected static $fixture_file = [ 'shop.yml' ]; public function setUp() { parent::setUp(); ShopTest::setConfiguration(); Config::inst()->update(OrderCoupon::class, 'minimum_code_length', null); $this->socks = $this->objFromFixture(Product::class, 'socks'); $this->socks->publishRecursive(); $this->tshirt = $this->objFromFixture(Product::class, 'tshirt'); $this->tshirt->publishRecursive(); $this->mp3player = $this->objFromFixture(Product::class, 'mp3player'); $this->mp3player->publishRecursive(); $this->unpaid = $this->objFromFixture(Order::class, 'unpaid'); $this->cart = $this->objFromFixture(Order::class, 'cart'); $this->othercart = $this->objFromFixture(Order::class, 'othercart'); } public function testMinimumLengthCode() { Config::inst()->update(OrderCoupon::class, 'minimum_code_length', 8); $coupon = new OrderCoupon(); $coupon->Code = '1234567'; $result = $coupon->validate(); self::assertContains('INVALIDMINLENGTH', $result->getMessages()); $coupon = new OrderCoupon(); $result = $coupon->validate(); self::assertNotContains('INVALIDMINLENGTH', $result->getMessages(), 'Leaving the Code field generates a code'); $coupon = new OrderCoupon(['Code' => '12345678']); $result = $coupon->validate(); self::assertNotContains('INVALIDMINLENGTH', $result->getMessages()); Config::inst()->update(OrderCoupon::class, 'minimum_code_length', null); $coupon = new OrderCoupon(['Code' => '1']); $result = $coupon->validate(); self::assertNotContains('INVALIDMINLENGTH', $result->getMessages()); } public function testPercent() { $coupon = OrderCoupon::create( [ 'Title' => '40% off each item', 'Code' => '5B97AA9D75', 'Type' => 'Percent', 'Percent' => 0.40, 'StartDate' => '2000-01-01 12:00:00', 'EndDate' => '2200-01-01 12:00:00' ] ); $coupon->write(); $context = ['CouponCode' => $coupon->Code]; $this->assertTrue($coupon->validateOrder($this->cart, $context), $coupon->getMessage()); $this->assertEquals(4, $coupon->getDiscountValue(10), '40% off value'); $this->assertEquals(200, $this->calc($this->unpaid, $coupon), '40% off order'); } public function testAmount() { $coupon = OrderCoupon::create( [ 'Title' => '$10 off each item', 'Code' => 'TENDOLLARSOFF', 'Type' => 'Amount', 'Amount' => 10, 'Active' => 1 ] ); $coupon->write(); $context = ['CouponCode' => $coupon->Code]; $this->assertTrue($coupon->validateOrder($this->cart, $context), $coupon->getMessage()); $this->assertEquals($coupon->getDiscountValue(1000), 10, '$10 off fixed value'); $this->assertTrue($coupon->validateOrder($this->unpaid, $context), $coupon->getMessage()); $this->assertEquals(60, $this->calc($this->unpaid, $coupon), '$10 off each item: $60 total'); //TODO: test amount that is greater than item value } public function testInactiveCoupon() { $inactivecoupon = OrderCoupon::create( [ 'Title' => 'Not active', 'Code' => 'EE891574D6', 'Type' => 'Amount', 'Amount' => 10, 'Active' => 0 ] ); $inactivecoupon->write(); $context = ['CouponCode' => $inactivecoupon->Code]; $this->assertFalse($inactivecoupon->validateOrder($this->cart, $context), 'Coupon is not set to active'); } protected function getCalculator($order, $coupon) { return new Calculator($order, ['CouponCode' => $coupon->Code]); } protected function calc($order, $coupon) { return $this->getCalculator($order, $coupon)->calculate(); } } |