public void NoItemsInCart_TotalEqual0()
        {
            IProductRepository products = null; // repository doesn't matter - no reference to him is being made - nullify
            ShoppingCart shoppingCart = new ShoppingCart(products);

            Assert.That(shoppingCart.Total, Is.EqualTo(0));
        }
        public void Clear_AddInvalidItemToCartThenClear_ThrowUnknownProductException()
        {
            IProductRepository products = A.Fake<IProductRepository>();

            A.CallTo(() => products.GetProductById(A<string>.Ignored)).Throws(new UnknownProductException("UnknownProductException was thrown."));

            ShoppingCart shoppingCart = new ShoppingCart(products);

            Assert.Throws<UnknownProductException>(() => shoppingCart.AddItem("item-999"));
        }
        public void Add_AddValidItem_ItemNameAndPriceDisplayed()
        {
            IProductRepository products = A.Fake<IProductRepository>();
            ShoppingCart shoppingCart = new ShoppingCart(products);
            IDisplay consoleDisplay = A.Fake<IDisplay>();
            Register register = new Register(shoppingCart, consoleDisplay);

            A.CallTo(() => products.GetProductById("item-1")).Throws(new UnknownProductException(""));
            register.Add("item-1");

            A.CallTo(() => consoleDisplay.ShowMessage("Invalid item code!")).MustHaveHappened();
        }
        public void Clear_AddValidItemToCartThenClear_TotalEquals0()
        {
            IProductRepository products = A.Fake<IProductRepository>();
            ShoppingCart shoppingCart = new ShoppingCart(products);

            A.CallTo(() => products.GetProductById("item-1")).Returns(new Product("item-1", "Banana", 14.5));

            shoppingCart.AddItem("item-1");
            shoppingCart.Clear();

            Assert.That(shoppingCart.Total, Is.EqualTo(0));
        }
        public void AddItem_AddTwoValidProductsToCart_TotalEqualsItemsPrice()
        {
            IProductRepository products = A.Fake<IProductRepository>();
            ShoppingCart shoppingCart = new ShoppingCart(products);

            A.CallTo(() => products.GetProductById("item-1")).Returns(new Product("item-1", "Banana", 14.5));
            A.CallTo(() => products.GetProductById("item-2")).Returns(new Product("item-2", "Orange", 2.5));

            shoppingCart.AddItem("item-1");
            shoppingCart.AddItem("item-2");

            Assert.That(shoppingCart.Total, Is.EqualTo(17));
        }
        public void AddItem_AddValidProductToCart_TotalEqualsItemPrice()
        {
            // Arrange
            IProductRepository products = A.Fake<IProductRepository>();
            ShoppingCart shoppingCart = new ShoppingCart(products);

            A.CallTo(() => products.GetProductById("item-1")).Returns(new Product("item-1", "Banana", 14.5));

            // Act
            shoppingCart.AddItem("item-1");

            // Assert
            Assert.AreEqual(shoppingCart.Total, 14.5);
        }
        static void Main()
        {
            var products = new ProductDal();
            products.AddProduct(new Product("item-1", "IPhone 6", 999));
            products.AddProduct(new Product("item-2", "Surface 2 pro", 2000));
            products.AddProduct(new Product("item-3", "Stamps", 2));
            products.AddProduct(new Product("item-4", "Arduino Ono", 25));


            var shoppingCart = new ShoppingCart(products);
            var register = new Register(shoppingCart, new ConsoleDisplay());

            Console.WriteLine("add - Add product to cart");
            Console.WriteLine("total - show total");
            Console.WriteLine("exit - exit from simulatio");

            var keepRunning = true;
            while (keepRunning)
            {

                Console.Write("Command>>");
                var readLine = Console.ReadLine();

                switch (readLine)
                {
                    case "add":
                        Console.WriteLine("product id?");
                        Console.Write("Add>>");
                        var productId = Console.ReadLine();
                        register.Add(productId);
                        break;
                    case "total":
                        register.Total();
                        break;
                    case "exit":
                        keepRunning = false;
                        break;
                    default:
                        Console.WriteLine(">>> Wrong input :(");
                        break;
                }
            }
        }
 public Register(ShoppingCart shoppingCart, IDisplay display)
 {
     _shoppingCart = shoppingCart;
     _display = display;
 }
        public void Total_AddTwoValidItems_ItemsNamesAndPricesDisplayed()
        {
            IProductRepository products = A.Fake<IProductRepository>();
            ShoppingCart shoppingCart = new ShoppingCart(products);
            IDisplay consoleDisplay = A.Fake<IDisplay>();
            Register register = new Register(shoppingCart, consoleDisplay);

            A.CallTo(() => products.GetProductById("item-1")).Returns(new Product("item-1", "Banana", 10.5));

            register.Add("item-1");
            register.Add("item-1");

            register.Total();

            A.CallTo(() => consoleDisplay.ShowMessage("Total: 21")).MustHaveHappened();
        }