public void Test1()
 {
     var customer = new Customer("Name", 0);
     var bill = new Bill(customer);
     bill.AddGoods(new Item(
         new SaleGood("Tomato"),
         4,
         30));
     bill.AddGoods(new Item(
         new RegularGood("Cucumber"),
         5,
         15));
     bill.AddGoods(new Item(
         new SpecialOfferGood("Radish"),
         3,
         20));
     bill.AddGoods(new Item(
         new SpecialOfferGood("Carrot"),
         6,
         27));
     bill.AddGoods(new Item(
         new SaleGood("Potato"),
         1,
         18));
     bill.AddGoods(new Item(
         new RegularGood("Onion"),
         7,
         40));
     var actual = bill.Statement();
     var expected = "Счет для Name\n\tНазвание\tЦена\tКол-воСтоимость\tСкидка\tСумма\tБонус\n\tTomato\t\t30\t4\t120\t1.2\t118.8\t1\n\tCucumber\t\t15\t5\t75\t2.25\t72.75\t3\n\tRadish\t\t20\t3\t60\t0\t60\t0\n\tCarrot\t\t27\t6\t162\t0\t162\t0\n\tPotato\t\t18\t1\t18\t0\t18\t0\n\tOnion\t\t40\t7\t280\t8.4\t271.6\t14\nСумма счета составляет 703.15\nВы заработали 18 бонусных балов";
     Assert.AreEqual(expected, actual);
 }
 public void statementTest()
 {
     Customer customer = new Customer("Test", 10);
     Bill target = new Bill(customer);
     string actual;
     actual = target.Statement();
     var expected = "Счет для Test\n\tНазвание\tЦена\tКол-воСтоимость\tСкидка\tСумма\tБонус\nСумма счета составляет 0\nВы заработали 0 бонусных балов";
     Assert.AreEqual(expected, actual);
 }
 static void Main(string[] args)
 {
     string filename = "BillInfo.txt";
     if (args.Length == 1)
         filename = args[0];
     FileStream fs = new FileStream(filename, FileMode.Open);
     StreamReader sr = new StreamReader(fs);
     // read customer
     string line = sr.ReadLine();
     string[] result = line.Split(':');
     string name = result[1].Trim();
     // read bonus
     line = sr.ReadLine();
     result = line.Split(':');
     int bonus = Convert.ToInt32(result[1].Trim());
     Customer customer = new Customer(name, bonus);
     Bill b = new Bill(customer);
     // read goods count
     line = sr.ReadLine();
     result = line.Split(':');
     int goodsQty = Convert.ToInt32(result[1].Trim());
     Good[] g = new Good[goodsQty];
     for (int i = 0; i < g.Length; i++)
     {
         line = sr.ReadLine();
         result = line.Split(':');
         result = result[1].Trim().Split();
         string type = result[1].Trim();
         switch (type)
         {
             case "REG": g[i] = new RegularGood(result[0]);
                 break;
             case "SAL": g[i] = new SaleGood(result[0]);
                 break;
             case "SPO": g[i] = new SpecialOfferGood(result[0]);
                 break;
         }
     }
     // read items count
     line = sr.ReadLine();
     result = line.Split(':');
     int itemsQty = Convert.ToInt32(result[1].Trim());
     for (int i = 0; i < itemsQty; i++)
     {
         line = sr.ReadLine();
         result = line.Split(':');
         result = result[1].Trim().Split();
         int gid = Convert.ToInt32(result[0].Trim());
         double price = Convert.ToDouble(result[1].Trim());
         int qty = Convert.ToInt32(result[2].Trim());
         b.AddGoods(new Item(g[gid - 1], qty, price));
     }
     string bill = b.Statement();
     Console.WriteLine(bill);
     Console.ReadKey();
 }
 public void Test2()
 {
     var customer = new Customer("Name", 1000);
     var bill = new Bill(customer);
     bill.AddGoods(new Item(
         new SpecialOfferGood("Tomato"),
         4,
         30));
     bill.AddGoods(new Item(
         new SpecialOfferGood("Cucumber"),
         5,
         15));
     bill.AddGoods(new Item(
         new SpecialOfferGood("Radish"),
         3,
         20));
     var actual = bill.Statement();
     var expected = "Счет для Name\n\tНазвание\tЦена\tКол-воСтоимость\tСкидка\tСумма\tБонус\n\tTomato\t\t30\t4\t120\t120\t0\t0\n\tCucumber\t\t15\t5\t75\t75\t0\t0\n\tRadish\t\t20\t3\t60\t60\t0\t0\nСумма счета составляет 0\nВы заработали 0 бонусных балов";
     Assert.AreEqual(expected, actual);
 }