Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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 €
        }