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());
        }
Beispiel #2
0
        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();
        }