public void RoundingRules_FromInput3()
        {
            var purchaseInput = new List <string>()
            {
                "1 imported bottle of perfume at 27.99 1",
                "1 bottle of perfume at 18.99",
                "1 packet of headache pills at 9.75",
                "1 box of imported chocolates at 11.25",
            };

            var factory        = new MerchandiseFactory();
            var merchandises   = factory.Create(new InputReader(purchaseInput));
            var availableTaxes = new List <ITax>
            {
                new SalesTax(new Exemptions()),
                new ImportTax()
            };


            var output = new StringBuilder();
            var saved  = Console.Out;

            try
            {
                using (var writer = new StringWriter(output))
                {
                    Console.SetOut(writer);

                    var processor = new PurchaseProcessor(new Purchase(merchandises), availableTaxes);
                    processor.PrintReceipt();

                    string expected = "Sales Taxes: 6.70 Total: 74.68";
                    var    text     = output.ToString();
                    Assert.IsTrue(text.Contains(expected));
                }
            }
            finally
            {
                Console.SetOut(saved);
            }
        }
        public void ParseInputs_Imported1()
        {
            var purchaseInput = new List <string>()
            {
                "1 imported box of chocolates at 10.00",
                "1 imported bottle of perfume at 47.50"
            };

            var factory      = new MerchandiseFactory();
            var merchandises = factory.Create(new InputReader(purchaseInput));

            Assert.AreEqual(2, merchandises.Count);
            Assert.AreEqual("imported box of chocolates", merchandises[0].Name);
            Assert.AreEqual("imported bottle of perfume", merchandises[1].Name);

            Assert.AreEqual(10.00, merchandises[0].Price);
            Assert.AreEqual(47.50, merchandises[1].Price);

            Assert.AreEqual(true, merchandises[0].Import);
            Assert.AreEqual(true, merchandises[1].Import);
        }
        public void ParseInputs1()
        {
            var purchaseInput = new List <string>()
            {
                "1 book at 12.49",
                "1 music CD at 14.99",
                "1 chocolate bar at 0.85"
            };

            var factory      = new MerchandiseFactory();
            var merchandises = factory.Create(new InputReader(purchaseInput));

            Assert.AreEqual(3, merchandises.Count);
            Assert.AreEqual("book", merchandises[0].Name);
            Assert.AreEqual("music CD", merchandises[1].Name);
            Assert.AreEqual("chocolate bar", merchandises[2].Name);

            Assert.AreEqual(12.49, merchandises[0].Price);
            Assert.AreEqual(14.99, merchandises[1].Price);
            Assert.AreEqual(0.85, merchandises[2].Price);
        }
        public void RoundingRules_FromInput2()
        {
            var purchaseInput = new List <string>()
            {
                "1 imported box of chocolates at 10.00",
                "1 imported bottle of perfume at 47.50"
            };

            var factory        = new MerchandiseFactory();
            var merchandises   = factory.Create(new InputReader(purchaseInput));
            var availableTaxes = new List <ITax>
            {
                new SalesTax(new Exemptions()),
                new ImportTax()
            };


            var output = new StringBuilder();
            var saved  = Console.Out;

            try
            {
                using (var writer = new StringWriter(output))
                {
                    Console.SetOut(writer);

                    var processor = new PurchaseProcessor(new Purchase(merchandises), availableTaxes);
                    processor.PrintReceipt();

                    string expected = "Sales Taxes: 7.65 Total: 65.15";
                    var    text     = output.ToString();
                    Assert.IsTrue(text.Contains(expected));
                }
            }
            finally
            {
                Console.SetOut(saved);
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("-----------------------------------");
            Console.WriteLine("       Sales Taxes Problem         ");
            Console.WriteLine("-----------------------------------");


            while (true)
            {
                char selection     = SelectInput();
                var  purchaseInput = GetInput(selection);

                if (purchaseInput is null)
                {
                    return;
                }
                var factory      = new MerchandiseFactory();
                var merchandises = factory.Create(new InputReader(purchaseInput));

                var availableTaxes = new List <ITax>
                {
                    new SalesTax(new Exemptions()),
                    new ImportTax()
                };

                var processor = new PurchaseProcessor(new Purchase(merchandises), availableTaxes);
                processor.PrintReceipt();

                Console.WriteLine("-----------------------------------");
                Console.WriteLine();
            }


            //Console.WriteLine(">> Press ENTER to quit.");
            //Console.ReadLine();
        }