コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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));
        }