public static OrderBuilderTestContext CreateDefault()
        {
            var result = new OrderBuilderTestContext();

            result.Hamburger = new MenuItem {
                Name = "Hamburger", Id = 5
            };
            result.HamburgerPortion = new MenuItemPortion {
                MenuItemId = 5, Id = 2, Name = "Standard", Price = 5
            };
            result.Hamburger.Portions.Add(result.HamburgerPortion);
            result.BigHamburger = new MenuItemPortion {
                MenuItemId = 5, Id = 4, Name = "Big", Price = 8
            };
            result.Hamburger.Portions.Add(result.BigHamburger);
            result.HappyHourPriceTag       = "HH";
            result.HamburgerHappyHourPrice = 5;
            result.Department = new Department {
                Id = 5, TicketTypeId = 3, WarehouseId = 8
            };
            result.AccountTransactionType = new AccountTransactionType {
                Id = 15
            };
            return(result);
        }
        public void OrderBuilder_CreateOrder_DefaultPortionAssigned()
        {
            var testContext = OrderBuilderTestContext.CreateDefault();
            var order       = OrderBuilder.Create()
                              .WithDepartment(testContext.Department)
                              .ForMenuItem(testContext.Hamburger)
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.AreEqual(testContext.HamburgerPortion.Name, order.PortionName);
        }
        public void OrderBuilder_CreateMenuItem_UpdatesOrderPrice()
        {
            var testContext = OrderBuilderTestContext.CreateDefault();
            var order       = OrderBuilder.Create()
                              .CreateMenuItem("Tost").AddPortion("Küçük", 4.5m).Do()
                              .WithDepartment(testContext.Department)
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.AreEqual(4.5m, order.Price);
        }
        public void OrderBuilder_UpdateAccountTransactionType_AccountTransactionTypeAssigned()
        {
            var testContext = OrderBuilderTestContext.CreateDefault();
            var order       = OrderBuilder.Create()
                              .ForMenuItem(testContext.Hamburger)
                              .WithDepartment(testContext.Department)
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.AreEqual(testContext.AccountTransactionType.Id, order.AccountTransactionTypeId);
        }
        public void OrderBuilder_CreateOrder_IsDefaultQuantity()
        {
            var testContext = OrderBuilderTestContext.CreateDefault();
            var order       = OrderBuilder.Create()
                              .WithDepartment(testContext.Department)
                              .ForMenuItem(testContext.Hamburger)
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.AreEqual(1, order.Quantity);
        }
        public void OrderBuilder_CreateOrder_UserNameAssigned()
        {
            var testContext = OrderBuilderTestContext.CreateDefault();
            var order       = OrderBuilder.Create()
                              .WithDepartment(testContext.Department)
                              .ForMenuItem(testContext.Hamburger)
                              .WithUserName("Waiter")
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.AreEqual("Waiter", order.CreatingUserName);
        }
        public void OrderBuilder_AssignProductTimer_ProductTimerAssigned()
        {
            var testContext = OrderBuilderTestContext.CreateDefault().WithProductTimer();
            var order       = OrderBuilder.Create()
                              .ForMenuItem(testContext.Hamburger)
                              .WithDepartment(testContext.Department)
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .WithProductTimer(testContext.ProductTimer)
                              .Build();

            Assert.AreEqual(testContext.ProductTimer.Id, order.ProductTimerValue.ProductTimerId);
        }
        public void OrderBuilder_AddTaxTemplates_TaxTemplatesAdded()
        {
            var testContext = OrderBuilderTestContext.CreateDefault().With18PTaxTemplate();
            var order       = OrderBuilder.Create()
                              .ForMenuItem(testContext.Hamburger)
                              .WithDepartment(testContext.Department)
                              .AddTaxTemplate(testContext.TaxTemplate)
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.True(order.TaxValues.Any());
        }
        public void OrderBuilder_CreateOrderWithPriceTag_UpdatesPrice()
        {
            var testContext = OrderBuilderTestContext.CreateDefault().WithHappyHourPrice();
            var order       = OrderBuilder.Create()
                              .WithDepartment(testContext.Department)
                              .ForMenuItem(testContext.Hamburger)
                              .WithPriceTag(testContext.HappyHourPriceTag)
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.AreEqual(testContext.HappyHourPriceTag, order.PriceTag);
            Assert.AreEqual(testContext.HamburgerHappyHourPrice, order.Price);
        }
        public void OrderBuilder_CreateOrderWithPriceTag_SkipsNonExistedPriceTag()
        {
            var testContext = OrderBuilderTestContext.CreateDefault();
            var order       = OrderBuilder.Create()
                              .WithDepartment(testContext.Department)
                              .ForMenuItem(testContext.Hamburger)
                              .WithPriceTag("HH")
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.AreEqual("", order.PriceTag);
            Assert.AreEqual(testContext.HamburgerPortion.Price, order.Price);
        }
        public void OrderBuilder_CreateMenuItemWithDoublePortions_PriceCorrect()
        {
            var testContext = OrderBuilderTestContext.CreateDefault();
            var tost        = MenuItemBuilder.Create("Tost").AddPortion("Küçük", 4.5m).AddPortion("Büyük", 8).Build();
            var order       = OrderBuilder.Create()
                              .ForMenuItem(tost)
                              .WithPortion(tost.Portions[1])
                              .WithDepartment(testContext.Department)
                              .WithAccountTransactionType(testContext.AccountTransactionType)
                              .Build();

            Assert.AreEqual(8m, order.Price);
        }