public void AddMultipleSameItem_UpdatesLineCount_Success()
        {
            var basket = new ShoppingBasket();
            var bread1 = TestMockProductsLineItems.BreadItem();
            var bread2 = TestMockProductsLineItems.BreadItem();

            basket.AddProduct(bread1.Product, 1);
            basket.AddProduct(bread2.Product, 1);

            Assert.True(basket.Products[0].Quantity == 2 && basket.Products[0].Product.Id == 1);
            Assert.True(basket.GetTotal() == 2.00m);
            Assert.True(basket.Products.Count == 1);
        }
        public void DeleteLineItem_Success()
        {
            var basket = new ShoppingBasket();
            var bread1 = TestMockProductsLineItems.BreadItem();
            var bread2 = TestMockProductsLineItems.BreadItem();

            basket.AddProduct(bread1.Product, 1);
            basket.AddProduct(bread2.Product, 1);

            _output.WriteLine($"Total before delete: {basket.Products.Count}");
            basket.DeleteProductLine(1);

            _output.WriteLine($"Total after delete: {basket.Products.Count}");
            Assert.True(basket.Products.Count == 0);
        }
        public static IEnumerable <object[]> DiscountedProductsGet4thFree()
        {
            var products = new List <IProductLineItem> {
                TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem()
            };
            var products2 = new List <IProductLineItem> {
                TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem()
            };
            var products3 = new List <IProductLineItem> {
                TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(),
                TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem(), TestMockProductsLineItems.MilkItem()
            };

            yield return(new object[] { products, 3.45m });

            yield return(new object[] { products2, 4.60m });

            yield return(new object[] { products3, 6.90m });
        }
        public static IEnumerable <object[]> DiscountedProductsGetHalfPrice()
        {
            var products = new List <IProductLineItem> {
                TestMockProductsLineItems.ButterItem(), TestMockProductsLineItems.ButterItem(), TestMockProductsLineItems.BreadItem(), TestMockProductsLineItems.BreadItem()
            };
            var products2 = new List <IProductLineItem> {
                TestMockProductsLineItems.ButterItem(), TestMockProductsLineItems.ButterItem(), TestMockProductsLineItems.ButterItem(), TestMockProductsLineItems.ButterItem(),
                TestMockProductsLineItems.BreadItem(), TestMockProductsLineItems.BreadItem()
            };
            var products3 = new List <IProductLineItem> {
                TestMockProductsLineItems.ButterItem(), TestMockProductsLineItems.ButterItem(), TestMockProductsLineItems.ButterItem(), TestMockProductsLineItems.ButterItem(),
                TestMockProductsLineItems.BreadItem(), TestMockProductsLineItems.BreadItem(), TestMockProductsLineItems.BreadItem()
            };

            yield return(new object[] { products, 3.10m });

            yield return(new object[] { products2, 4.20m });

            yield return(new object[] { products3, 5.20m });
        }
        public static IEnumerable <object[]> Products()
        {
            var products = new List <Product> {
                TestMockProductsLineItems.BreadItem().Product
            };
            var products2 = new List <Product> {
                TestMockProductsLineItems.BreadItem().Product, TestMockProductsLineItems.BreadItem().Product
            };
            var products3 = new List <Product> {
                TestMockProductsLineItems.BreadItem().Product, TestMockProductsLineItems.ButterItem().Product, TestMockProductsLineItems.MilkItem().Product
            };
            var products4 = new List <Product> {
                TestMockProductsLineItems.BreadItem().Product, TestMockProductsLineItems.ButterItem().Product, TestMockProductsLineItems.MilkItem().Product, TestMockProductsLineItems.MilkItem().Product
            };

            yield return(new object[] { products, 1, 1.00m });

            yield return(new object[] { products2, 1, 2.00m }); // Line items should still be 1 but total 2

            yield return(new object[] { products3, 3, 2.95m });

            yield return(new object[] { products4, 3, 4.10m });
        }