public void Calculate_Specialized_Equipment_Rent_Price() { var equipmentService = new Mock <IEquipmentApiService>(); var basketService = new Mock <IBasketApiService>(); var customerService = new Mock <ICustomerApiService>(); var cacheMemory = new Mock <IMemoryCache>(); BasketItemVM heavyItem = new BasketItemVM() { CustomerId = 1, Day = 10, Equipment = new EquipmentVM() { Id = 5, Name = "Bosch Jackhammer", Type = EquiptmentType.Specialize } }; var result = new BasketController(equipmentService.Object, basketService.Object, customerService.Object, cacheMemory.Object) .CalculateRentPrice(heavyItem); Assert.Equal(460, result.Price); Assert.Equal(1, result.Point); }
public void Calculate_Regular_Equipment_Rent_Price() { var equipmentService = new Mock <IEquipmentApiService>(); var basketService = new Mock <IBasketApiService>(); var customerService = new Mock <ICustomerApiService>(); var cacheMemory = new Mock <IMemoryCache>(); BasketItemVM heavyItem = new BasketItemVM() { CustomerId = 1, Day = 10, Equipment = new EquipmentVM() { Id = 2, Name = "Kamaz Truck", Type = EquiptmentType.Regular } }; var result = new BasketController(equipmentService.Object, basketService.Object, customerService.Object, cacheMemory.Object) .CalculateRentPrice(heavyItem); Assert.Equal(540, result.Price); Assert.Equal(1, result.Point); }
public void Calculate_Heavy_Equipment_Rent_Price() { var equipmentService = new Mock <IEquipmentApiService>(); var basketService = new Mock <IBasketApiService>(); var customerService = new Mock <ICustomerApiService>(); var cacheMemory = new Mock <IMemoryCache>(); BasketItemVM heavyItem = new BasketItemVM() { CustomerId = 1, Day = 10, Equipment = new EquipmentVM() { Id = 1, Name = "Caterpillar Bulldozer", Type = EquiptmentType.Heavy } }; var result = new BasketController(equipmentService.Object, basketService.Object, customerService.Object, cacheMemory.Object) .CalculateRentPrice(heavyItem); Assert.Equal(700, result.Price); Assert.Equal(2, result.Point); }
/// <summary> /// Calculating rent price for every item which added to customer basket /// </summary> /// <param name="basketItem">Model includes customerId, equipment index at basket grid</param> /// <returns>Basket Item Model</returns> public BasketItemVM CalculateRentPrice(BasketItemVM basketItem) { switch (basketItem.Equipment.Type) { case EquiptmentType.Heavy: basketItem.Price = PriceOfRentals.OneTimeRentalFee + PriceOfRentals.PremiumDailyFee * basketItem.Day; basketItem.Point = 2; break; case EquiptmentType.Regular: basketItem.Price = PriceOfRentals.OneTimeRentalFee + (basketItem.Day <= 2 ? PriceOfRentals.PremiumDailyFee * basketItem.Day : PriceOfRentals.PremiumDailyFee * 2 + PriceOfRentals.RegularDailyFee * (basketItem.Day - 2)); basketItem.Point = 1; break; case EquiptmentType.Specialize: basketItem.Price = basketItem.Day <= 3 ? PriceOfRentals.PremiumDailyFee * basketItem.Day : PriceOfRentals.PremiumDailyFee * 3 + PriceOfRentals.RegularDailyFee * (basketItem.Day - 3); basketItem.Point = 1; break; default: break; } return(basketItem); }
/// <summary> /// Adding equipment to customer basket and calculating it's price considering rental days. Saving it memorycache. /// </summary> /// <param name="model">Basket item model includes customerId, day, price and equipment</param> /// <returns>Adding result</returns> public JsonResult AddEquipmentToBasket(BasketItemVM model) { ServiceResult AddEquipmentToBasketResult = new ServiceResult() { Type = ResultType.UnKnown, Message = "Something went wrong" }; try { var result = CalculateRentPrice(model); var hasCustomerBasket = memoryCache.TryGetValue(model.CustomerId, out BasketVM customerBasket); if (!hasCustomerBasket) { customerBasket = new BasketVM() { CustomerId = model.CustomerId, BasketItems = new List <BasketItemVM>() }; memoryCache.Set(model.CustomerId, customerBasket); } customerBasket.BasketItems.Add(new BasketItemVM() { CustomerId = model.CustomerId, Day = model.Day, Point = result.Point, Price = result.Price, Equipment = new EquipmentVM { Id = model.Equipment.Id, Name = model.Equipment.Name, Type = model.Equipment.Type } }); AddEquipmentToBasketResult.Type = ResultType.Success; AddEquipmentToBasketResult.Message = "Item Added To Basket Succesfully"; } catch { AddEquipmentToBasketResult.Type = ResultType.Error; AddEquipmentToBasketResult.Message = "Error Occured While Adding Equiptment To Basket"; } return(Json(AddEquipmentToBasketResult)); }