예제 #1
0
        private Order <OrderItem> ValidateCreateOrder(string paramOrderInputString)
        {
            TimeOfDayEnum timeOfDay = TimeOfDayEnum.None;

            if (this.ValidteOrderInput(paramOrderInputString))
            {
                var timeOfDayInputString = paramOrderInputString.ToLower().Split(Constants.InputSeparator)[0].Trim();

                if (!timeOfDayInputString.All(char.IsDigit))
                {
                    timeOfDay = this.ValidteTimeOfDayInput(timeOfDayInputString);
                }
            }

            if (timeOfDay == TimeOfDayEnum.None)
            {
                return new Order <OrderItem> {
                           OrderNumber = this.OrderSequence, RowOrderData = paramOrderInputString, Items = new List <OrderItem>(), IsValid = false
                }
            }
            ;

            var currentOrder = this.CreateOrder(timeOfDay, paramOrderInputString.Remove(0, paramOrderInputString.IndexOf(Constants.InputSeparator) + 1));

            currentOrder.RowOrderData = paramOrderInputString;

            return(currentOrder);
        }
예제 #2
0
        public void ValidteTimeOfDayInputTest_InValid_2()
        {
            Restaurant    target = new Restaurant();
            string        paramOrderTimeOfDayInputString = "1";
            TimeOfDayEnum expected = TimeOfDayEnum.None;
            TimeOfDayEnum actual;

            actual = target.ValidteTimeOfDayInput(paramOrderTimeOfDayInputString);
            Assert.AreEqual(expected, actual); //Assert.AreNotEqual(expected, TimeOfDayEnum.Morning);
        }
예제 #3
0
        public void ValidteTimeOfDayInputTest_Valid_1()
        {
            Restaurant    target = new Restaurant();
            string        paramOrderTimeOfDayInputString = TimeOfDayEnum.Morning.ToString().ToLower();
            TimeOfDayEnum expected = TimeOfDayEnum.Morning;
            TimeOfDayEnum actual;

            actual = target.ValidteTimeOfDayInput(paramOrderTimeOfDayInputString);
            Assert.AreEqual(expected, actual);
        }
예제 #4
0
        public void ValidateDishTest_InValid_1()
        {
            Restaurant    target         = new Restaurant();
            TimeOfDayEnum paramTimeOfDay = TimeOfDayEnum.Morning;
            DishTypeEnum  paramDishType  = DishTypeEnum.Desert;
            DishEnum      expected       = DishEnum.None;
            DishEnum      actual;

            actual = target.ValidateDish(paramTimeOfDay, paramDishType);
            Assert.AreEqual(expected, actual);
        }
예제 #5
0
        /// <summary>
        /// Validate and return Dish for specified Time of Day and Dish Type
        /// </summary>
        /// <param name="paramTimeOfDay">Time of Day Enumeration</param>
        /// <param name="paramDishType">Dish Type Enumeration</param>
        /// <returns>Dish Enumeration</returns>
        public DishEnum ValidateDish(TimeOfDayEnum paramTimeOfDay, DishTypeEnum paramDishType)
        {
            DishEnum dish     = DishEnum.None;
            var      foodItem = this.Menu.Items.Find(item => item.MealType == paramTimeOfDay && item.DishType == paramDishType);

            if (foodItem != null)
            {
                dish = foodItem.Dish;
            }

            return(dish);
        }
예제 #6
0
        /// <summary>
        /// Validate and return Time of Day
        /// </summary>
        /// <param name="paramOrderTimeOfDayInputString">Time of Day string value</param>
        /// <returns>Time of Day Enumeration</returns>
        public TimeOfDayEnum ValidteTimeOfDayInput(string paramOrderTimeOfDayInputString)
        {
            TimeOfDayEnum timeOfDay = TimeOfDayEnum.None;

            return(!string.IsNullOrWhiteSpace(paramOrderTimeOfDayInputString) && !paramOrderTimeOfDayInputString.All(char.IsDigit) && Enum.TryParse(paramOrderTimeOfDayInputString.Trim().ToLower(), true, out timeOfDay) && Enum.IsDefined(typeof(TimeOfDayEnum), timeOfDay) ? timeOfDay : TimeOfDayEnum.None); //Can be optimized.
        }
예제 #7
0
        private Order <OrderItem> CreateOrder(TimeOfDayEnum paramTimeOfDay, string paramOrderItemsInputString)
        {
            //var currentOrderItemsInputString = paramOrderInputString.Remove(0, paramOrderInputString.IndexOf(Constants.InputSeparator) + 1);
            var  currentOrderItemsInputArray = paramOrderItemsInputString.Split(Constants.InputSeparator).ToList();
            var  currentOrderItemList        = new List <OrderItem>();
            bool isValidOrder = true;

            foreach (var currentDishItemString in currentOrderItemsInputArray)
            {
                if (string.IsNullOrWhiteSpace(currentDishItemString))
                {
                    continue;
                }
                var dishType = DishTypeEnum.None; var dish = DishEnum.None; var updateOnly = false;

                dishType = this.ValidateDishTypeInput(currentDishItemString);

                if (dishType == DishTypeEnum.None)
                {
                    isValidOrder = false; //Process for error and abort the order registration
                }
                if (isValidOrder)
                {
                    dish = this.ValidateDish(paramTimeOfDay, dishType);
                }

                if (isValidOrder && dish == DishEnum.None)
                {
                    isValidOrder = false; //Process for error and abort the order registration
                }
                if (isValidOrder)
                {
                    var existingItem = currentOrderItemList.Find(item => item.MealType == paramTimeOfDay && item.DishType == dishType && item.Dish == dish);  //Find existing item
                    if (existingItem != null)
                    {
                        var menuItem = this.Menu.Items.Find(item => item.MealType == paramTimeOfDay && item.DishType == dishType && item.Dish == dish);  //Check if the item allows multiple quantity
                        if (menuItem.MaximumQuantity > 1)
                        {
                            existingItem.Quantity++;
                            updateOnly = true;
                        }
                        else
                        {
                            isValidOrder = false; //Process for error and abort the order registration
                        }
                    }
                }

                if (!updateOnly)
                {
                    currentOrderItemList.Add(new OrderItem()
                    {
                        MealType = paramTimeOfDay, DishType = dishType, Dish = dish, Quantity = 1, IsValid = isValidOrder
                    });
                }

                if (!isValidOrder)
                {
                    break;
                }
            }

            return(new Order <OrderItem> {
                OrderNumber = this.OrderSequence, Items = currentOrderItemList.ToList(), IsValid = isValidOrder
            });
        }