public async Task <ActionResult> AddProductToShoppingCartAsync(AddProductToShoppingCart request, int userId) { var shoppingCart = await _cartRepository.GetShoppingCartAsync(request.ShoppingCartId); if (shoppingCart.UserId != userId) { return(new UnauthorizedResult()); } if (!shoppingCart.IsActive) { throw new Exception("Shopping Cart is not active."); } var product = await _productRepository.GetProductAsync(request.ProductId); if (product.Quantity < request.Quantity) { throw new Exception("Not enough items"); } await _cartRepository.AddShoppingCartProductAsync(shoppingCart, product, request.Quantity); return(new NoContentResult()); }
public async Task AddProductToShoppingCartAsync_ValidProduct_AddedProduct() { var userId = 1; var shoppingCartId = 2; var productId = 3; var request = new AddProductToShoppingCart { ProductId = productId, Quantity = 5, ShoppingCartId = shoppingCartId, }; var cartEntity = new ShoppingCart { Id = shoppingCartId, IsActive = true, UserId = userId }; var productEntity = new Product { Id = productId, Description = "Test_Description", Name = "Test_Name", Price = 2.56, Quantity = 100 }; var callToGetShoppingCart = A.CallTo(() => _cartRepository.GetShoppingCartAsync(shoppingCartId)); callToGetShoppingCart.Returns(cartEntity); var callToGetProduct = A.CallTo(() => _productRepository.GetProductAsync(productId)); callToGetProduct.Returns(productEntity); var callToAddProduct = A.CallTo(() => _cartRepository.AddShoppingCartProductAsync(cartEntity, productEntity, request.Quantity)); await _cartService.AddProductToShoppingCartAsync(request, userId); callToGetShoppingCart.MustHaveHappenedOnceExactly(); callToGetProduct.MustHaveHappenedOnceExactly(); callToAddProduct.MustHaveHappenedOnceExactly(); }