public void AddNewProductToEmptyCart_Success()
        {
            // Arrange
            var mapperMock = new Mock <IMapper>();

            mapperMock.Setup(m => m.Map <CartDTO>(It.IsAny <Cart>())).Returns((Cart c) => new CartDTO()
            {
                Total = c.Total, CartItems = c.CartItems.Select(z => new CartItemDTO()).ToList()
            });

            var rulesMock = new Mock <IRulesEngine>();

            rulesMock.Setup(m => m.CalculateCartPrices(It.IsAny <List <CartItem> >(), It.IsAny <List <ProductItem> >())).Returns((List <CartItem> c, List <ProductItem> products) => new Cart()
            {
                CartItems = c, Total = 555
            });

            var mockDb = new Mock <IProductRepository>();
            List <ProductItem> result = CreateProductItemsList();

            mockDb.Setup(x => x.GetProducts()).Returns(result.AsQueryable());

            IProductService service = new ProductsService(mockDb.Object, rulesMock.Object, mapperMock.Object);

            //Act
            CartDTO cart = service.AddProductToCart("CRM", new List <CartItemDTO>()).Result;

            // Assert
            Assert.AreEqual(1, cart.CartItems.Count());
        }
        public async Task CartItemsNotProvided_Fail()
        {
            IProductService service = new ProductsService(null, null, null);

            List <CartItemDTO> cartItems = new List <CartItemDTO>();

            cartItems.Add(null);

            //Act
            CartDTO cart = await service.AddProductToCart("CRM", cartItems);
        }
        public void IncreaseExistingProductInCart_Success()
        {
            // Arrange
            var mapperMock = new Mock <IMapper>();

            mapperMock.Setup(m => m.Map <CartDTO>(It.IsAny <Cart>())).Returns((Cart c) => new CartDTO()
            {
                Total = c.Total, CartItems = c.CartItems.Select(z => new CartItemDTO()
                {
                    Quantity = z.Quantity
                }).ToList()
            });
            mapperMock.Setup(m => m.Map <CartItem>(It.IsAny <CartItemDTO>())).Returns((CartItemDTO c) => new CartItem()
            {
                Quantity = 1, Product = new ProductItem()
                {
                    Code = c.Product.Code
                }
            });

            var rulesMock = new Mock <IRulesEngine>();

            rulesMock.Setup(m => m.CalculateCartPrices(It.IsAny <List <CartItem> >(), It.IsAny <List <ProductItem> >())).Returns((List <CartItem> c, List <ProductItem> products) => new Cart()
            {
                CartItems = c, Total = 555
            });

            var mockDb = new Mock <IProductRepository>();
            List <ProductItem> result = CreateProductItemsList();

            mockDb.Setup(x => x.GetProducts()).Returns(result.AsQueryable());

            IProductService service = new ProductsService(mockDb.Object, rulesMock.Object, mapperMock.Object);

            List <CartItemDTO> cartItems = new List <CartItemDTO>();

            cartItems.Add(new CartItemDTO()
            {
                Product = new ProductItemDTO()
                {
                    Code = "CRM"
                }, Quantity = 1
            });

            //Act
            CartDTO cart = service.AddProductToCart("CRM", cartItems).Result;

            // Assert
            Assert.AreEqual(2, cart.CartItems[0].Quantity);
        }
        public async Task CodeNotProvided_Fail()
        {
            IProductService service = new ProductsService(null, null, null);

            List <CartItemDTO> cartItems = new List <CartItemDTO>();

            cartItems.Add(new CartItemDTO()
            {
                Product = new ProductItemDTO()
                {
                    Code = "CRM"
                }, Quantity = 1
            });

            //Act
            CartDTO cart = await service.AddProductToCart("", cartItems);
        }