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); }
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); }
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); }
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); }
/// <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); }
/// <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. }
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 }); }