/** @test */
 public function should_calculate_the_tax_for_basket_fixture_seven()
 {
     $basket = $this->fixtures->seven();
     $total = $this->meta->generate($basket);
     $this->assertEquals(new Money(21065, new Currency('GBP')), $total);
 }
 /** @test */
 public function should_calculate_the_number_of_taxable_products_for_basket_fixture_seven()
 {
     $basket = $this->fixtures->seven();
     $total = $this->meta->generate($basket);
     $this->assertEquals(6, $total);
 }
 /** @test */
 public function should_process_basket_fixture_seven()
 {
     $order = $this->processor->process($this->fixtures->seven());
     $meta = $order->meta();
     $products = $order->products();
     $this->assertInstanceOf('PhilipBrown\\Basket\\Order', $order);
     $this->assertEquals(new Money(8796, new Currency('GBP')), $meta['delivery']);
     $this->assertEquals(new Money(2820, new Currency('GBP')), $meta['discount']);
     $this->assertEquals(6, $meta['products_count']);
     $this->assertEquals(new Money(114121, new Currency('GBP')), $meta['subtotal']);
     $this->assertEquals(6, $meta['taxable']);
     $this->assertEquals(new Money(21065, new Currency('GBP')), $meta['tax']);
     $this->assertEquals(new Money(135186, new Currency('GBP')), $meta['total']);
     $this->assertEquals(new Money(108145, new Currency('GBP')), $meta['value']);
     $this->assertEquals('5', $products[0]['sku']);
     $this->assertEquals('Sega Mega Drive', $products[0]['name']);
     $this->assertEquals(new Money(4950, new Currency('GBP')), $products[0]['price']);
     $this->assertEquals(new UnitedKingdomValueAddedTax(), $products[0]['rate']);
     $this->assertEquals(1, $products[0]['quantity']);
     $this->assertEquals(false, $products[0]['freebie']);
     $this->assertEquals(true, $products[0]['taxable']);
     $this->assertEquals(new Money(0, new Currency('GBP')), $products[0]['delivery']);
     $this->assertEquals(new Collection(), $products[0]['coupons']);
     $this->assertEquals(new Collection(), $products[0]['tags']);
     $this->assertEquals(new ValueDiscount(new Money(1500, new Currency('GBP'))), $products[0]['discount']);
     $this->assertEquals(null, $products[0]['category']);
     $this->assertEquals(new Money(4950, new Currency('GBP')), $products[0]['total_value']);
     $this->assertEquals(new Money(1500, new Currency('GBP')), $products[0]['total_discount']);
     $this->assertEquals(new Money(0, new Currency('GBP')), $products[0]['total_delivery']);
     $this->assertEquals(new Money(690, new Currency('GBP')), $products[0]['total_tax']);
     $this->assertEquals(new Money(3450, new Currency('GBP')), $products[0]['subtotal']);
     $this->assertEquals(new Money(4140, new Currency('GBP')), $products[0]['total']);
     $this->assertEquals('6', $products[1]['sku']);
     $this->assertEquals('Aeron Chair', $products[1]['name']);
     $this->assertEquals(new Money(89999, new Currency('GBP')), $products[1]['price']);
     $this->assertEquals(new UnitedKingdomValueAddedTax(), $products[1]['rate']);
     $this->assertEquals(1, $products[1]['quantity']);
     $this->assertEquals(false, $products[1]['freebie']);
     $this->assertEquals(true, $products[1]['taxable']);
     $this->assertEquals(new Money(6000, new Currency('GBP')), $products[1]['delivery']);
     $this->assertEquals(new Collection(), $products[1]['coupons']);
     $this->assertEquals(new Collection(), $products[1]['tags']);
     $this->assertEquals(null, $products[1]['discount']);
     $this->assertEquals(null, $products[1]['category']);
     $this->assertEquals(new Money(89999, new Currency('GBP')), $products[1]['total_value']);
     $this->assertEquals(new Money(0, new Currency('GBP')), $products[1]['total_discount']);
     $this->assertEquals(new Money(6000, new Currency('GBP')), $products[1]['total_delivery']);
     $this->assertEquals(new Money(18000, new Currency('GBP')), $products[1]['total_tax']);
     $this->assertEquals(new Money(95999, new Currency('GBP')), $products[1]['subtotal']);
     $this->assertEquals(new Money(113999, new Currency('GBP')), $products[1]['total']);
     $this->assertEquals('7', $products[2]['sku']);
     $this->assertEquals('Kettlebell', $products[2]['name']);
     $this->assertEquals(new Money(3299, new Currency('GBP')), $products[2]['price']);
     $this->assertEquals(new UnitedKingdomValueAddedTax(), $products[2]['rate']);
     $this->assertEquals(4, $products[2]['quantity']);
     $this->assertEquals(false, $products[2]['freebie']);
     $this->assertEquals(true, $products[2]['taxable']);
     $this->assertEquals(new Money(699, new Currency('GBP')), $products[2]['delivery']);
     $this->assertEquals(new Collection(), $products[2]['coupons']);
     $this->assertEquals(new Collection(), $products[2]['tags']);
     $this->assertEquals(new PercentageDiscount(10), $products[2]['discount']);
     $this->assertEquals(null, $products[2]['category']);
     $this->assertEquals(new Money(13196, new Currency('GBP')), $products[2]['total_value']);
     $this->assertEquals(new Money(1320, new Currency('GBP')), $products[2]['total_discount']);
     $this->assertEquals(new Money(2796, new Currency('GBP')), $products[2]['total_delivery']);
     $this->assertEquals(new Money(2375, new Currency('GBP')), $products[2]['total_tax']);
     $this->assertEquals(new Money(14672, new Currency('GBP')), $products[2]['subtotal']);
     $this->assertEquals(new Money(17047, new Currency('GBP')), $products[2]['total']);
 }