Example #1
0
        public void AddProductToShoppingCart_Should_Return_False_If_Product_Not_Available_In_Stock()
        {
            //Act
            var request = new AddToShoppingCartRequest {
                ProductId = ObjectId.GenerateNewId().ToString(),
                Amount    = 2
            };
            var shoppingCartRepository = new Mock <IShoppingCartRepository>();
            var productRepositoryMock  = new Mock <IProductRepository>();
            var service = new ShoppingCartService(productRepositoryMock.Object, shoppingCartRepository.Object);

            // Act
            productRepositoryMock.Setup(x => x.GetByProductId(request.ProductId)).Returns(new Product()
            {
                Id                = request.ProductId,
                Name              = "Terrarium",
                Price             = 4.00,
                AvailableQuantity = 0
            });


            var response = service.AddProductToShoppingCart(request);

            // Assert
            Assert.IsFalse(Convert.ToBoolean(response));
        }
        public IActionResult AddProductToShoppingCart([FromBody] AddToShoppingCartRequest request)
        {
            if (request == null)
            {
                return(BadRequest("product can not be null!"));
            }

            if (string.IsNullOrEmpty(request.ProductId))
            {
                return(BadRequest("product id should be greater than zero!"));
            }

            var res = ShoppingCartService.AddProductToShoppingCart(request);

            return(Ok(res));
        }
Example #3
0
        public void AddProductToShoppingCart_Should_Return_False_If_Product_Is_Null()
        {
            //Act
            var request = new AddToShoppingCartRequest {
                ProductId = ObjectId.GenerateNewId().ToString(),
                Amount    = 2
            };
            var shoppingCartRepository = new Mock <IShoppingCartRepository>();
            var productRepositoryMock  = new Mock <IProductRepository>();
            var service = new ShoppingCartService(productRepositoryMock.Object, shoppingCartRepository.Object);

            // Act
            var response = service.AddProductToShoppingCart(request);

            // Assert
            Assert.IsFalse(Convert.ToBoolean(response));
        }
        public bool AddProductToShoppingCart(AddToShoppingCartRequest request)
        {
            string productId = request.ProductId;
            int    amount    = request.Amount;
            var    product   = productRepository.GetByProductId(productId);
            var    isAdded   = true;

            if (product == null || product.AvailableQuantity == 0 || amount == 0)
            {
                return(false);
            }

            var shoppingCartItem = shoppingCartRepository.GetShoppingCartByProductId(productId);

            //if this product is not in shopping cart
            if (shoppingCartItem == null)
            {
                shoppingCartItem = new ShoppingCart {
                    ProductId = product.Id,
                    Amount    = Math.Min(product.AvailableQuantity, amount)
                };
                //adds the product to the shopping cart as much as the amount available in stock
                shoppingCartRepository.Add(shoppingCartItem);
            }
            else
            {
                if (product.AvailableQuantity - shoppingCartItem.Amount - amount >= 0)
                {
                    shoppingCartItem.Amount += amount;
                }
                else
                {
                    shoppingCartItem.Amount += (product.AvailableQuantity - shoppingCartItem.Amount);
                    isAdded = false;
                }
                shoppingCartRepository.UpdateShoppingCart(shoppingCartItem);
            }
            return(isAdded);
        }