/**
  * 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());
 }
示例#2
0
 /**
  * @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();
 }