public async Task CheckoutAsync_When_CartIsValid_Then_CartIsCheckedOut()
        {
            // Arrange
            fixture.Customize <Cart>().Set(x => x.IsCheckedOut, false);
            fixture.Customize <CartItem>().Set(x => x.ProductId, 2);
            fixture.Customize <CartItem>().Set(x => x.Quantity, 10);
            fixture.Customize <Product>().Set(x => x.Stock, int.MaxValue);

            var cart    = fixture.Generate <Cart>();
            var product = fixture.Generate <Product>();

            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(new List <Cart> {
                cart
            });

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.CheckoutAsync(cart.Name, (x) => Task.FromResult(product));

            // Assert
            cart.IsCheckedOut.Should().BeTrue();
            product.Stock.Should().Be(int.MaxValue - cart.Items.Sum(x => x.Quantity));
        }
예제 #2
0
        public void Repository_Always_Returns_A_Non_Null_Cart()
        {
            var repository = new InMemoryCartRepository();


            var cart = repository.Get(Guid.NewGuid().ToString());

            Check.That(cart).IsNotNull();
        }
예제 #3
0
        public void return_a_not_null_cart()
        {
            var repository = new InMemoryCartRepository();


            var cart = repository.Get(Guid.NewGuid().ToString());

            Check.That(cart).IsNotNull();
        }
        public async Task AddItemToCart_When_CartNotFound_Then_ExceptionIsThrown()
        {
            // Arrange
            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(Enumerable.Empty <Cart>());

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.AddItemToCartAsync(string.Empty, (x) => Task.FromResult(null as Product), null);

            // Assert Exception
        }
        public async Task GetByNameAsync_When_ProductNotFound_Then_ExceptionIsThrown()
        {
            // Arrange
            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(Enumerable.Empty <Cart>());

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.GetAsync(x => x.Name == string.Empty);

            // Assert exception
        }
        public async Task CheckoutAsync_When_CartNotFound_Then_ExceptionsIsThrown()
        {
            // Arrange
            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(Enumerable.Empty <Cart>());

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.CheckoutAsync(string.Empty, null);

            // Assert Exception
        }
예제 #7
0
        public void Add_A_Product_On_A_Cart_Adds_A_ProductInfo_Item()
        {
            var repository = new InMemoryCartRepository();

            var id = Guid.NewGuid().ToString();

            repository.AddProduct(id, "product1");

            var cart = repository.Get(id);

            var productInfo = cart.Products.FirstOrDefault(p => p.Id == "product1");

            Check.That(productInfo).IsNotNull();
            Check.That(productInfo.Count).IsEqualTo(1);
        }
예제 #8
0
        public void add_product_info_when_a_product_is_added_into_the_cart()
        {
            var repository = new InMemoryCartRepository();

            var id = Guid.NewGuid().ToString();

            repository.AddProduct(id, "product1");

            var cart = repository.Get(id);

            var productInfo = cart.Products.FirstOrDefault(p => p.Id == "product1");

            Check.That(productInfo).IsNotNull();
            Check.That(productInfo.Count).IsEqualTo(1);
        }
예제 #9
0
        public void do_nothing_when_a_product_is_added_and_then_removed_twice()
        {
            var repository = new InMemoryCartRepository();

            var id = Guid.NewGuid().ToString();

            repository.AddProduct(id, "product1");
            repository.RemoveProduct(id, "product1");


            var cart = repository.Get(id);


            Check.That(cart.Products).IsEmpty();
        }
예제 #10
0
        public void Removing_An_Non_Added_Product_Does_Nothing()
        {
            var repository = new InMemoryCartRepository();

            var id = Guid.NewGuid().ToString();


            repository.RemoveProduct(id, "product1");


            var cart = repository.Get(id);


            Check.That(cart.Products).IsEmpty();
        }
예제 #11
0
        public void do_nothing_when_trying_to_remove_a_non_added_product()
        {
            var repository = new InMemoryCartRepository();

            var id = Guid.NewGuid().ToString();


            repository.RemoveProduct(id, "product1");


            var cart = repository.Get(id);


            Check.That(cart.Products).IsEmpty();
        }
        public async Task CheckoutAsync_When_ProductNotFound_Then_ExceptionsIsThrown()
        {
            // Arrange
            fixture.Customize <Cart>().Set(x => x.IsCheckedOut, false);
            var cart = fixture.Generate <Cart>();

            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(new List <Cart> {
                cart
            });

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.CheckoutAsync(cart.Name, (x) => throw new ProdcutNotFoundException());

            // Assert Exception
        }
        public async Task AddItemToCart_When_CartIsCheckedOut_Then_ExceptionIsThrown()
        {
            // Arrange
            fixture.Customize <Cart>().Set(x => x.IsCheckedOut, true);
            var cart = fixture.Generate <Cart>();

            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(new List <Cart> {
                cart
            });

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.AddItemToCartAsync(cart.Name, (x) => Task.FromResult(null as Product), null);

            //Assert Exception
        }
        public async Task CheckoutAsync_When_InsufficientStock_Then_ExceptionsIsThrown()
        {
            // Arrange
            fixture.Customize <Cart>().Set(x => x.IsCheckedOut, false);
            fixture.Customize <CartItem>().Set(x => x.ProductId, 2);
            fixture.Customize <CartItem>().Set(x => x.Quantity, 10);

            var cart = fixture.Generate <Cart>();

            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(new List <Cart> {
                cart
            });

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.CheckoutAsync(cart.Name,
                                           (x) => Task.FromResult(fixture.Generate <Product>(constraints: new { Stock = 15 })));
        }
        public async Task GetByNameAsync_When_ProductNotFound_Then_ProductIsReturned()
        {
            // Arrange
            var cart = fixture.Generate <Cart>();

            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(new List <Cart>()
            {
                cart
            });

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            var result = await repository.GetAsync(x => x.Name == cart.Name);

            // Assert
            result.Should().NotBeNull();
            result.Should().Be(cart);
        }
        public async Task AddItemToCart_When_ProductOutOfStock_Then_ExceptionIsThrown()
        {
            // Arrange
            fixture.Customize <Cart>().Set(x => x.IsCheckedOut, false);
            var cart     = fixture.Generate <Cart>();
            var cartItem = fixture.Generate <CartItem>();

            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(new List <Cart> {
                cart
            });

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.AddItemToCartAsync(cart.Name,
                                                (x) => Task.FromResult(fixture.Generate <Product>(constraints: new { Stock = cartItem.Quantity - 1 })),
                                                cartItem);

            // Assert Exception
        }
        public async Task AddItemToCart_When_DataIsValid_Then_ItemIsAdded()
        {
            // Arrange
            fixture.Customize <Cart>().Set(x => x.IsCheckedOut, false);
            var cart     = fixture.Generate <Cart>();
            var cartItem = fixture.Generate <CartItem>();

            dataProvider.Setup(x => x.ProvideAsync())
            .ReturnsAsync(new List <Cart> {
                cart
            });

            var repository = new InMemoryCartRepository(dataProvider.Object);

            // Act
            await repository.AddItemToCartAsync(cart.Name,
                                                (x) => Task.FromResult(fixture.Generate <Product>(constraints: new { Stock = cartItem.Quantity })),
                                                cartItem);

            // Assert
            cart.Items.Should().Contain(cartItem);
        }
예제 #18
0
        static void Main(string[] args)
        {
            using (var context = new DataContext())
            {
                var inventoryRepo = new InventoryRepository(context);
                var cartRepo      = new InMemoryCartRepository();

                //define business manager and repository
                var inventoryManager = new InventoryManager(inventoryRepo);
                var cartManager      = new CartManager(cartRepo, inventoryRepo);

                ConsoleKeyInfo keyPressed = default(ConsoleKeyInfo);
                do
                {
                    WriteLine("1 - List Products");
                    WriteLine("2 - Display Cart Items");
                    WriteLine("3 - Add Item to Cart");
                    WriteLine("4 - Place Order");
                    WriteLine("Press Command.. Q to exit");

                    keyPressed = ReadKey();
                    WriteLine("");

                    switch (keyPressed.Key)
                    {
                    case ConsoleKey.D1:
                        //List Products
                        var products = inventoryManager.GetProducts();
                        WriteLine("================ INVENTORY ==================");
                        foreach (var prod in products)
                        {
                            WriteLine($"{prod.ProductId} - {prod.Name} {prod.Price}");
                        }
                        break;

                    case ConsoleKey.D2:
                        //Display Cart Items
                        var items = cartManager.GetCartItems();
                        if (items.Any())
                        {
                            WriteLine("================ CART ==================");
                            foreach (var item in items)
                            {
                                WriteLine($"{item.Quantity} - {item.Product.Name} {item.Product.Price}");
                            }
                        }
                        else
                        {
                            WriteLine($"No cart item for user Please add item");
                        }
                        break;

                    case ConsoleKey.D3:
                        //Add Item to Cart
                        WriteLine("Specify the Product id");     //get userid
                        string id        = ReadLine();
                        var    productId = int.Parse(id);
                        bool   result    = cartManager.AddCartItem(productId);
                        if (result)
                        {
                            WriteLine("item added to cart");
                        }
                        else
                        {
                            WriteLine("invalid data or error occurred");
                        }
                        break;
                    }

                    WriteLine(Environment.NewLine);
                } while (keyPressed.Key != ConsoleKey.Q);
            }
        }