public async Task UpdateShoppingCartItemsAsync_WhenCalledWithClearCartShoppingCartActionWithEmptyShoppingCart_ReturnsFalse()
        {
            // Arrange
            int pieId = 1;
            var pie   = SeedPieData(pieId);
            var shoppingCartAction = new Models.ShoppingCartAction {
                PieId = pieId, Action = "CLEAR_CART", Quantity = 1
            };

            mockPieService.Setup(m => m.GetPieAsync(shoppingCartAction.PieId)).ReturnsAsync(pie);
            mockShoppingCartService.Setup(m => m.ClearShoppingCartAsync()).ReturnsAsync(0);

            // Act
            var result = await sut.UpdateShoppingCartItemsAsync(shoppingCartAction);

            // Assert
            var actionResult   = Assert.IsAssignableFrom <ActionResult <bool> >(result);
            var okObjectResult = Assert.IsAssignableFrom <OkObjectResult>(actionResult.Result);
            var model          = Assert.IsAssignableFrom <bool>(okObjectResult.Value);

            Assert.False(model);

            mockPieService.Verify(m => m.GetPieAsync(shoppingCartAction.PieId), Times.Never);
            mockShoppingCartService.Verify(m => m.ClearShoppingCartAsync(), Times.Once);
        }
        public async Task UpdateShoppingCartItemsAsync_WhenCalledWithRemoveItemShoppingCartActionAndPieIdInShoppingCart_ReturnsTrue()
        {
            // Arrange
            int pieId = 1;
            var pie   = SeedPieData(pieId);
            var shoppingCartAction = new Models.ShoppingCartAction {
                PieId = pieId, Action = "REMOVE_ITEM", Quantity = 1
            };

            mockPieService.Setup(m => m.GetPieAsync(shoppingCartAction.PieId)).ReturnsAsync(pie);
            mockShoppingCartService.Setup(m => m.RemoveShoppingCartItemAsync(shoppingCartAction.PieId)).ReturnsAsync(1);

            // Act
            var result = await sut.UpdateShoppingCartItemsAsync(shoppingCartAction);

            // Assert
            var actionResult   = Assert.IsAssignableFrom <ActionResult <bool> >(result);
            var okObjectResult = Assert.IsAssignableFrom <OkObjectResult>(actionResult.Result);
            var model          = Assert.IsAssignableFrom <bool>(okObjectResult.Value);

            Assert.True(model);

            mockPieService.Verify(m => m.GetPieAsync(shoppingCartAction.PieId), Times.Once);
            mockShoppingCartService.Verify(m => m.RemoveShoppingCartItemAsync(shoppingCartAction.PieId), Times.Once);
        }
        public async Task UpdateShoppingCartItemsAsync_WhenCalledWithDecreaseItemQuantityShoppingCartActionAndPieIdNotInShoppingCart_ReturnsFalse()
        {
            // Arrange
            int pieId = 1;
            var pie   = SeedPieData(pieId);
            var shoppingCartAction = new Models.ShoppingCartAction {
                PieId = pieId, Action = "DECREASE_ITEM_QUANTITY", Quantity = 1
            };

            mockPieService.Setup(m => m.GetPieAsync(shoppingCartAction.PieId)).ReturnsAsync(pie);
            mockShoppingCartService.Setup(m => m.DecreaseShoppingCartItemQuantityAsync(shoppingCartAction.PieId, shoppingCartAction.Quantity)).ReturnsAsync(0);

            // Act
            var result = await sut.UpdateShoppingCartItemsAsync(shoppingCartAction);

            // Assert
            var actionResult   = Assert.IsAssignableFrom <ActionResult <bool> >(result);
            var okObjectResult = Assert.IsAssignableFrom <OkObjectResult>(actionResult.Result);
            var model          = Assert.IsAssignableFrom <bool>(okObjectResult.Value);

            Assert.False(model);

            mockPieService.Verify(m => m.GetPieAsync(shoppingCartAction.PieId), Times.Once);
            mockShoppingCartService.Verify(m => m.DecreaseShoppingCartItemQuantityAsync(shoppingCartAction.PieId, shoppingCartAction.Quantity), Times.Once);
        }
        public async Task UpdateShoppingCartItemsAsync_WhenCalledWithInvalidShoppingCartAction_ReturnsBadRequest()
        {
            // Arrange
            int pieId = 1;
            var pie   = SeedPieData(pieId);
            var shoppingCartAction = new Models.ShoppingCartAction {
                PieId = pieId, Action = "Invalid_Action", Quantity = 1
            };

            mockPieService.Setup(m => m.GetPieAsync(shoppingCartAction.PieId)).ReturnsAsync(pie);

            // Act
            var result = await sut.UpdateShoppingCartItemsAsync(shoppingCartAction);

            // Assert
            var actionResult           = Assert.IsAssignableFrom <ActionResult <bool> >(result);
            var badRequestObjectResult = Assert.IsAssignableFrom <BadRequestObjectResult>(actionResult.Result);

            Assert.Equal(ErrorMessage.InvalidData(Constant.BadRequest, typeof(Models.ShoppingCartAction), Constant.Action, shoppingCartAction.Action), badRequestObjectResult.Value);

            mockPieService.Verify(m => m.GetPieAsync(shoppingCartAction.PieId), Times.Never);
        }
        public async Task UpdateShoppingCartItemsAsync_WhenCalledWithInvalidPieId_ReturnsBadRequest()
        {
            // Arrange
            int pieId = 7;
            var pie   = default(Entities.Pie);
            var shoppingCartAction = new Models.ShoppingCartAction {
                PieId = pieId, Action = "INCREASE_ITEM_QUANTITY", Quantity = 1
            };

            mockPieService.Setup(m => m.GetPieAsync(shoppingCartAction.PieId)).ReturnsAsync(pie);

            // Act
            var result = await sut.UpdateShoppingCartItemsAsync(shoppingCartAction);

            // Assert
            var actionResult           = Assert.IsAssignableFrom <ActionResult <bool> >(result);
            var badRequestObjectResult = Assert.IsAssignableFrom <BadRequestObjectResult>(actionResult.Result);

            Assert.Equal(ErrorMessage.InvalidData(Constant.BadRequest, typeof(Models.Pie), Constant.Id, shoppingCartAction.PieId.ToString()), badRequestObjectResult.Value);

            mockPieService.Verify(m => m.GetPieAsync(shoppingCartAction.PieId), Times.Once);
        }
Exemple #6
0
        public async Task <ActionResult <bool> > UpdateShoppingCartItemsAsync(Models.ShoppingCartAction shoppingCartAction)
        {
            int count = 0;

            if (shoppingCartAction.Action.ToUpperInvariant() == "CLEAR_CART")
            {
                count = await shoppingCartService.ClearShoppingCartAsync();
            }
            else if (shoppingCartAction.Action.ToUpperInvariant() == "INCREASE_ITEM_QUANTITY" ||
                     shoppingCartAction.Action.ToUpperInvariant() == "DECREASE_ITEM_QUANTITY" ||
                     shoppingCartAction.Action.ToUpperInvariant() == "REMOVE_ITEM")
            {
                var pie = await pieService.GetPieAsync(shoppingCartAction.PieId);

                if (pie == null)
                {
                    return(BadRequest(ErrorMessage.InvalidData(Constant.BadRequest, typeof(Models.Pie), Constant.Id, shoppingCartAction.PieId.ToString())));
                }

                if (shoppingCartAction.Action.ToUpperInvariant() == "INCREASE_ITEM_QUANTITY")
                {
                    count = await shoppingCartService.IncreaseShoppingCartItemQuantityAsync(shoppingCartAction.PieId, shoppingCartAction.Quantity);
                }
                else if (shoppingCartAction.Action.ToUpperInvariant() == "DECREASE_ITEM_QUANTITY")
                {
                    count = await shoppingCartService.DecreaseShoppingCartItemQuantityAsync(shoppingCartAction.PieId, shoppingCartAction.Quantity);
                }
                else if (shoppingCartAction.Action.ToUpperInvariant() == "REMOVE_ITEM")
                {
                    count = await shoppingCartService.RemoveShoppingCartItemAsync(shoppingCartAction.PieId);
                }
            }
            else
            {
                return(BadRequest(ErrorMessage.InvalidData(Constant.BadRequest, typeof(Models.ShoppingCartAction), Constant.Action, shoppingCartAction.Action)));
            }

            return(Ok(count > 0));
        }