/** * Tests totals of items that share amount discounts * * @covers ::discountAmount * @covers ::taxAmount * @covers ::total * @covers ::totalAfterTax * @covers ::totalAfterDiscount * @uses Blesta\Pricing\Collection\ItemPriceCollection * @uses Blesta\Pricing\Type\ItemPrice * @uses Blesta\Pricing\Modifier\DiscountPrice * @uses Blesta\Pricing\Modifier\TaxPrice * @uses Blesta\Pricing\Type\UnitPrice * @uses Blesta\Pricing\Modifier\AbstractPriceModifier::__construct */ public function testMultipleDiscountTotals() { // Test two items with the same discount amounts $collection = new ItemPriceCollection(); $discount1 = new DiscountPrice(5, 'amount'); $discount2 = new DiscountPrice(10, 'amount'); $item1 = new ItemPrice(10, 2); $item1->setDiscount($discount1); $item1->setDiscount($discount2); $item2 = new ItemPrice(100, 1); $item1->setDiscount($discount1); $item1->setDiscount($discount2); $collection->append($item1)->append($item2); $this->assertEquals(0, $collection->taxAmount()); $this->assertEquals(15, $collection->discountAmount()); $this->assertEquals(105, $collection->totalAfterDiscount()); $this->assertEquals(120, $collection->totalAfterTax()); $this->assertEquals(105, $collection->total()); // Test multiple items with varying taxes/discounts $collection->remove($item1)->remove($item2); $this->assertEquals(0, $collection->count()); $discount3 = new DiscountPrice(50, 'amount'); $tax = new TaxPrice(20, 'exclusive'); $item3 = new ItemPrice(10, 1); $item3->setDiscount(new DiscountPrice(10, 'percent')); $item3->setDiscount($discount3); $item3->setTax(new TaxPrice(10, 'exclusive')); $item3->setTax($tax); $item4 = new ItemPrice(1000, 2); $item4->setDiscount($discount3); $item4->setTax($tax); $collection->append($item3)->append($item4); $this->assertEquals(391.8, $collection->taxAmount()); $this->assertEquals(51, $collection->discountAmount()); $this->assertEquals(1959, $collection->totalAfterDiscount()); $this->assertEquals(2401.8, $collection->totalAfterTax()); $this->assertEquals(2350.8, $collection->total()); }
/** * @covers ::resetDiscounts * @covers ::resetDiscountSubtotal * @uses Blesta\Pricing\Type\ItemPrice::__construct * @uses Blesta\Pricing\Type\ItemPrice::resetDiscountSubtotal * @uses Blesta\Pricing\Type\ItemPrice::subtotal * @uses Blesta\Pricing\Type\ItemPrice::setDiscount * @uses Blesta\Pricing\Type\UnitPrice::__construct * @uses Blesta\Pricing\Type\UnitPrice::setPrice * @uses Blesta\Pricing\Type\UnitPrice::setQty * @uses Blesta\Pricing\Type\UnitPrice::setKey * @uses Blesta\Pricing\Type\UnitPrice::total */ public function testResetDiscounts() { $discountMock = $this->getMockBuilder('Blesta\\Pricing\\Modifier\\DiscountPrice')->disableOriginalConstructor()->getMock(); $discountMock->expects($this->once())->method('reset'); $item = new ItemPrice(10); $item->setDiscount($discountMock); $item->resetDiscounts(); }