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 addOrder(AnOrder _order)
        {
            //try
            //{
            AnOrder dbEntry = db.AnOrders.Add(_order);

            if (dbEntry != null)
            {
                dbEntry.customer_name = _order.customer_name;
                dbEntry.description   = _order.description;
                dbEntry.state_id      = _order.state_id;
                dbEntry.created_at    = _order.created_at;
            }
            //Если нет - создаем запись
            else
            {
                db.AnOrders.Add(_order);
            }
            db.SaveChanges();
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine(ex.Message);
            //}
        }
Exemple #3
0
        public AnOrder SaveOrder(AnOrder _order)
        {
            AnOrder result = null;

            try
            {
                AnOrder dbEntry = db.AnOrders.Find(_order.id);
                //Если запись о проекте существует - обновляем ее данные
                if (dbEntry != null)
                {
                    dbEntry.customer_name = _order.customer_name;
                    dbEntry.description   = _order.description;
                }
                //Если нет - создаем запись
                else
                {
                    db.AnOrders.Add(_order);
                }
                db.SaveChanges();
                result = db.AnOrders.Find(_order.id);
            }
            catch (Exception ex)
            {
            }
            return(result);
        }
Exemple #4
0
        public void should_be_identifiable_by_id()
        {
            var id    = 1;
            var order = new AnOrder(id).Build();

            Check.That(order.Id).Equals(id);
        }
Exemple #5
0
        public void should_group_amounts_by_tax_in_the_bill()
        {
            var beer    = "Beer";
            var wine    = "Wine";
            var starter = "Starter";
            var dessert = "Dessert";

            var order = new AnOrder()
                        .With(1, new ADish(beer).Build())
                        .With(1, new ADish(wine).Build())
                        .With(1, new ADish(starter).Build())
                        .With(1, new ADish(dessert).Build())
                        .Build();

            var menu = new Mock <IRepository <Dish> >();

            menu.Setup(m => m.Get(beer)).Returns(new Billing.ADish(beer).Priced(6m).OfType("Alcool").Build());         // Tax (20%) of 1 €
            menu.Setup(m => m.Get(wine)).Returns(new Billing.ADish(wine).Priced(12m).OfType("Alcool").Build());        // Tax (20%) of 2 €
            menu.Setup(m => m.Get(starter)).Returns(new Billing.ADish(starter).Priced(11m).OfType("Starter").Build()); // Tax (10%) of 1 €
            menu.Setup(m => m.Get(dessert)).Returns(new Billing.ADish(dessert).Priced(11m).OfType("Dessert").Build()); // Tax (10%) of 1 €

            var taxConfiguration = new ATaxConfiguration().Build();
            var cashRegister     = new ACashRegister(menu.Object, taxConfiguration).Build();

            var bill = cashRegister.Calculate(order);

            var tenPercentTaxAmount = bill.Taxes[taxConfiguration.Get("RED").TaxConfiguration[0]];

            Check.That(tenPercentTaxAmount).Equals(2m);
            var twentyPercentTaxAmount = bill.Taxes[taxConfiguration.Get("REG").TaxConfiguration[0]];

            Check.That(twentyPercentTaxAmount).Equals(3m);
        }
        public void Http200WhenOrderIsFound()
        {
            var orderId           = 1;
            var tcs               = "tcs";
            var fiveEuros         = 5m;
            var two               = 2;
            var tacos             = "tacos";
            var orderWithTwoTacos = new AnOrder(orderId).With(two, new ADish(tcs).Named(tacos).Build()).Build();

            orderBook.Setup(o => o.Get(orderId)).Returns(orderWithTwoTacos);

            var billForOrderWithTwoTacos = new ABill(orderId).With(fiveEuros * two).Build();

            cashRegister.Setup(cr => cr.Calculate(It.IsAny <Order>())).Returns(billForOrderWithTwoTacos);

            var orderBookController = CreateOrderBookController(orderBook.Object, null, room.Object, cashRegister.Object, calendar.Object);

            var result = orderBookController.Get(orderId).Result;

            Check.That(result).IsInstanceOf <OkObjectResult>();
            var okResult = (OkObjectResult)result;

            Check.That(okResult.Value).IsInstanceOf <global::MaiDan.Api.DataContracts.Responses.DetailedOrder>();
            var retrievedOrder = (global::MaiDan.Api.DataContracts.Responses.DetailedOrder)okResult.Value;

            Check.That(retrievedOrder.Id).Equals(orderWithTwoTacos.Id);
            Check.That(retrievedOrder.Lines.First().Quantity).Equals(two);
            Check.That(retrievedOrder.Lines.First().DishName).Equals(tacos);
            Check.That(retrievedOrder.Lines.First().Amount).Equals(2 * fiveEuros);
        }
Exemple #7
0
        public void should_not_be_equal_when_lines_are_not_the_same()
        {
            var order1 = new AnOrder(1).With(1, new Dish("RW", "Red wine")).Build();
            var order2 = new AnOrder(1).With(2, new Dish("WW", "White wine")).Build();

            var isEqual = order1.Equals(order2);

            Check.That(isEqual).IsFalse();
        }
Exemple #8
0
        public void should_not_be_equal_when_id_is_not_the_same()
        {
            var order1 = new AnOrder(1).Build();
            var order2 = new AnOrder(2).Build();

            var isEqual = order1.Equals(order2);

            Check.That(isEqual).IsFalse();
        }
Exemple #9
0
        public void can_add_directly_quantity_and_dish_to_an_order()
        {
            var order = new AnOrder().Build();
            var line  = new Line(0, 2, false, new Dish("B", "Burgers"));

            order = order.Add(2, false, new Dish("B", "Burgers"));

            Check.That(order.Lines).Contains(line);
        }
Exemple #10
0
        public void can_add_line_to_an_order()
        {
            var order = new AnOrder().Build();
            var line  = new Line(1, 2, false, new Dish("B", "Burgers"));

            order = order.Add(line);

            Check.That(order.Lines).Contains(line);
        }
Exemple #11
0
        public void should_print_a_bill_from_an_order()
        {
            var cashRegister = new ACashRegister().Build();
            var order        = new AnOrder().Build();

            var bill = cashRegister.Calculate(order);

            Check.That(bill.Id).Equals(order.Id);
        }
Exemple #12
0
        public void should_not_print_a_lineless_order()
        {
            var order = new AnOrder()
                        .Build();

            var cashRegister = new ACashRegister().Build();

            Check.ThatCode(() => cashRegister.Print(order)).Throws <InvalidOperationException>();
        }
Exemple #13
0
        public void should_be_equal_when_id_and_lines_are_the_same()
        {
            var glassOfWine = new Dish("RW", "Red wine");
            var order1      = new AnOrder(1).With(1, glassOfWine).Build();
            var order2      = new AnOrder(1).With(1, glassOfWine).Build();

            var isEqual = order1.Equals(order2);

            Check.That(isEqual).IsTrue();
        }
 private void AddItem()
 {
     if (OrderItem.GoodsName != "" &&
         OrderItem.Quantity >= 1 &&
         OrderItem.Price > 0)
     {
         AnOrder.AddItem(OrderItem);
         label6.Text = OrderItem.ToString();
     }
     return;
 }
Exemple #15
0
        public void should_not_be_equal_when_table_is_not_the_same()
        {
            var id             = 1;
            int numberOfGuests = 2;

            var order1 = new AnOrder(id).OnSite("T1", numberOfGuests).Build();
            var order2 = new AnOrder(id).OnSite("T2", numberOfGuests).Build();

            var isEqual = order1.Equals(order2);

            Check.That(isEqual).IsFalse();
        }
Exemple #16
0
        public void should_not_be_equal_when_number_of_guests_are_not_the_same()
        {
            var   id    = 1;
            Table table = new Table("T1");

            var order1 = new AnOrder(id).OnSite(table, 1).Build();
            var order2 = new AnOrder(id).OnSite(table, 2).Build();

            var isEqual = order1.Equals(order2);

            Check.That(isEqual).IsFalse();
        }
Exemple #17
0
 private void AddItem()
 {
     if (OrderItem.GoodsName != "" &&
         OrderItem.Quantity.GetType() == typeof(int) &&
         OrderItem.Quantity >= 1 &&
         OrderItem.Price > 0)
     {
         AnOrder.AddItem(OrderItem);
     }
     label6.Text = OrderItem.ToString();
     return;
 }
        public void Http500WhenPriceIsNotConfiguredForDetailedOrder()
        {
            orderBook.Setup(o => o.Get(It.IsAny <string>())).Returns((global::MaiDan.Ordering.Domain.Order)null);
            var dishId = "mistery";
            var dish   = new Billing.ADish(dishId).Build();
            var order  = new AnOrder().With(2, new ADish(dishId).Build()).Build();

            orderBook.Setup(o => o.Get(It.IsAny <object>())).Returns(order);
            cashRegister.Setup(cr => cr.Calculate(It.IsAny <Order>())).Throws(new InvalidOperationException());
            var orderBookController = CreateOrderBookController(orderBook.Object, null, room.Object, cashRegister.Object, null);

            Check.ThatCode(() => orderBookController.Get(1)).Throws <InvalidOperationException>();
        }
Exemple #19
0
        public void should_be_equal_when_orders_are_the_same()
        {
            var   id             = 1;
            Table table          = new Table("T1");
            int   numberOfGuests = 2;

            var order1 = new AnOrder(id).OnSite(table, numberOfGuests).Build();
            var order2 = new AnOrder(id).OnSite(table, numberOfGuests).Build();

            var isEqual = order1.Equals(order2);

            Check.That(isEqual).IsTrue();
        }
Exemple #20
0
        public void DelOrder(int _orderId)
        {
            try
            {
                AnOrder anOrder = db.AnOrders.Find(_orderId);
                db.AnOrders.Remove(anOrder);
                db.SaveChanges();
            }

            catch (Exception ex)
            {
            }
        }
Exemple #21
0
        public void can_update_lines()
        {
            var initialLine = new Line(1, 1, false, new Dish("T", "Taco"));
            var order       = new AnOrder().With(initialLine).Build();

            var updatedLine = new Line(1, 1, false, new Dish("B", "Burrito"));

            order.Update(new List <Line> {
                updatedLine
            });

            Check.That(order.Lines).Contains(updatedLine);
            Check.That(order.Lines).Not.Contains(initialLine);
        }
        public void AddOrder(AnOrder _order)
        {
            AnOrder dbEntry = db.AnOrders.Add(_order);

            if (dbEntry != null)
            {
                dbEntry.customer_name = _order.customer_name;
                dbEntry.description   = _order.description;
                dbEntry.state_id      = _order.state_id;
                dbEntry.created_at    = _order.created_at;
            }
            //Если нет - создаем запись
            else
            {
                db.AnOrders.Add(_order);
            }
            db.SaveChanges();
        }
Exemple #23
0
        public void should_calculate_bill_total()
        {
            var order = new AnOrder()
                        .With(1, new ADish("1").Build())
                        .With(2, new ADish("2").Build())
                        .Build();

            var menu = new Mock <IRepository <Dish> >();

            menu.Setup(m => m.Get("1")).Returns(new Billing.ADish("1").Priced(5m).Build());
            menu.Setup(m => m.Get("2")).Returns(new Billing.ADish("2").Priced(10m).Build());

            var cashRegister = new ACashRegister(menu.Object).Build();

            var bill = cashRegister.Calculate(order);

            Check.That(bill.Total).Equals(25m);
        }
Exemple #24
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 #25
0
        public void should_calculate_lines_amount_using_the_menu()
        {
            var order = new AnOrder()
                        .With(1, new ADish("1").Build())
                        .With(2, new ADish("2").Build())
                        .Build();

            var menu = new Mock <IRepository <Dish> >();

            menu.Setup(m => m.Get("1")).Returns(new Billing.ADish("1").Priced(5m).Build());
            menu.Setup(m => m.Get("2")).Returns(new Billing.ADish("2").Priced(10m).Build());

            var cashRegister = new ACashRegister(menu.Object).Build();

            var bill = cashRegister.Calculate(order);

            Check.That(bill.Lines.ElementAt(0).Amount).Equals(5m);
            Check.That(bill.Lines.ElementAt(1).Amount).Equals(20m);
        }
Exemple #26
0
        public void should_determine_tax_as_regular_when_dish_is_of_type_alcohol()
        {
            var order = new AnOrder()
                        .With(1, new ADish("1").Build())
                        .Build();

            var taxRateAt20Percent = 0.20m;
            var menu      = new Mock <IRepository <Dish> >();
            var fiveEuros = 5m;

            menu.Setup(m => m.Get("1")).Returns(new Billing.ADish("1").Priced(fiveEuros).OfType("Alcool").Build());

            var cashRegister = new ACashRegister(menu.Object).Build();

            var bill = cashRegister.Calculate(order);

            //S'assurer que la taxe est bien celle normale (par l'id?), pas au montant seulement
            Check.That(bill.Lines.ElementAt(0).TaxRate.Rate).Equals(taxRateAt20Percent);
        }
Exemple #27
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 #28
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 #29
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 #30
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 €
        }