public void should_apply_a_ten_percent_discount_on_the_reduced_tax_items_of_a_take_away_bill() { var dish = new ADish().Build(); var order = new AnOrder() .TakeAway() .With(1, dish) .Build(); var menu = new Mock <IRepository <Dish> >(); menu.Setup(m => m.Get(dish.Id)).Returns(new Billing.ADish(dish.Id).Priced(10m).WithReducedTax().Build()); var taxConfiguration = new ATaxConfiguration().Build(); var cashRegister = new ACashRegister(menu.Object, taxConfiguration).Build(); var bill = cashRegister.Calculate(order); var discount = bill.Discounts.First(); Check.That(discount.Key.Rate).Equals(0.10m); Check.That(discount.Value).Equals(1m); Check.That(bill.Total).Equals(9m); var tenPercentTaxAmount = bill.Taxes[taxConfiguration.Get("RED").TaxConfiguration[0]]; Check.That(tenPercentTaxAmount).Equals(0.82m); }
public void should_not_alter_lines_amount_when_a_take_away_discount_is_applied() { var dish = new ADish().Build(); var order = new AnOrder() .TakeAway() .With(1, dish) .Build(); var menu = new Mock <IRepository <Dish> >(); menu.Setup(m => m.Get(dish.Id)).Returns(new Billing.ADish(dish.Id).Priced(10m).WithReducedTax().Build()); var cashRegister = new ACashRegister(menu.Object).Build(); var bill = cashRegister.Calculate(order); Check.That(bill.Lines.First().Amount).Equals(10m); }
public void should_not_apply_the_ten_percent_discount_on_regular_tax_products_in_take_away_bills() { var dish = new ADish().Build(); var order = new AnOrder() .TakeAway() .With(1, dish) .Build(); var menu = new Mock <IRepository <Dish> >(); menu.Setup(m => m.Get(dish.Id)).Returns(new Billing.ADish(dish.Id).Priced(10m).WithRegularTax().Build()); var cashRegister = new ACashRegister(menu.Object).Build(); var bill = cashRegister.Calculate(order); Check.That(bill.Discounts).IsEmpty(); Check.That(bill.Total).Equals(10m); }
public void should_not_charge_for_an_order_with_only_free_dishes() { var dish1 = new ADish("1").Build(); var dish2 = new ADish("2").Build(); var order = new AnOrder() .TakeAway() .With(1, true, dish1) .With(1, true, dish2) .Build(); var menu = new Mock <IRepository <Dish> >(); menu.Setup(m => m.Get(dish1.Id)).Returns(new Billing.ADish(dish1.Id).Priced(15m).WithRegularTax().Build()); menu.Setup(m => m.Get(dish2.Id)).Returns(new Billing.ADish(dish2.Id).Priced(8m).WithRegularTax().Build()); var cashRegister = new ACashRegister(menu.Object).Build(); var bill = cashRegister.Calculate(order); Check.That(bill.Discounts).IsEmpty(); Check.That(bill.Total).Equals(0m); }
public void should_not_apply_discount_for_on_site_bills() { var dish = new ADish().Build(); var order = new AnOrder() .OnSite("1", 2) .With(1, dish) .Build(); var menu = new Mock <IRepository <Dish> >(); menu.Setup(m => m.Get(dish.Id)).Returns(new Billing.ADish(dish.Id).Priced(10m).Build()); var taxConfiguration = new ATaxConfiguration().Build(); var cashRegister = new ACashRegister(menu.Object, taxConfiguration).Build(); var bill = cashRegister.Calculate(order); Check.That(bill.Total).Equals(10m); var tenPercentTaxAmount = bill.Taxes[taxConfiguration.Get("RED").TaxConfiguration[0]]; Check.That(tenPercentTaxAmount).Equals(0.91m); }
public void should_calculate_bill_tax_from_the_sum_of_lines_amount() { var cocktail = new ADish("Cocktail").Build(); var order = new AnOrder() .With(1, cocktail) .With(1, cocktail) .With(1, cocktail) .Build(); var menu = new Mock <IRepository <Dish> >(); menu.Setup(m => m.Get(cocktail.Id)).Returns(new Billing.ADish(cocktail.Id).Priced(5m).OfType("Alcool").Build()); // Tax (20%) of 0,83 € var taxConfiguration = new ATaxConfiguration().Build(); var cashRegister = new ACashRegister(menu.Object, taxConfiguration).Build(); var bill = cashRegister.Calculate(order); var tax_amount = bill.Taxes[taxConfiguration.Get("REG").TaxConfiguration[0]]; Check.That(tax_amount).Equals(2.5m); // instead of 2,49 € }