public void BackStage_Passes_Increment_When_SellIn_Is_Lower_10(int sellIn, int quality, int qualityIncrement, string description)
        {
            IList <Item> items = new List <Item> {
                new Item {
                    Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = sellIn, Quality = quality
                }
            };

            csharp.GildedRose app = new csharp.GildedRose(new ItemGroup(items, CreateDefaultRules.CreateWithConjuredRule()));
            Enumerable.Range(1, 4).Reverse().ToList().ForEach(i =>
            {
                app.UpdateQuality();
                quality += qualityIncrement;
                Assert.AreEqual(quality, (int)items[0].Quality);
            });
        }
        public void SellIn_Decreases_Over_Time()
        {
            var          sellIn = 3;
            IList <Item> items  = new List <Item>
            {
                new Item {
                    Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = sellIn, Quality = 50
                }
            };
            var app = new csharp.GildedRose(new ItemGroup(items, CreateDefaultRules.CreateWithConjuredRule()));

            Enumerable.Range(1, sellIn).ToList().ForEach(i =>
            {
                app.UpdateQuality();
                Assert.AreEqual(--sellIn, items[0].SellIn);
            });
        }
        public void AgedBrie_Quality_Increases_Over_Time()
        {
            const int    sellIn = 8;
            IList <Item> items  = new List <Item> {
                new Item {
                    Name = "Aged Brie", SellIn = sellIn, Quality = 0
                }
            };

            csharp.GildedRose app = new csharp.GildedRose(new ItemGroup(items, CreateDefaultRules.CreateWithConjuredRule()));
            Enumerable.Range(1, sellIn).ToList().ForEach(i =>
            {
                app.UpdateQuality();
                Assert.AreEqual(i, (int)items[0].Quality);
            }
                                                         );
        }
        public void Test_Special_Quality_Descrease(
            Func <int, csharp.Quality> requiredQuality,
            Item item,
            string testDescription)
        {
            Console.WriteLine(testDescription);

            var app = new csharp.GildedRose(
                new ItemGroup(new List <Item> {
                item
            },
                              CreateDefaultRules.CreateWithConjuredRule()));

            var actQuality = new csharp.Quality(item.Quality);

            Enumerable.Range(1, item.SellIn).ToList().ForEach(i =>
            {
                app.UpdateQuality();

                actQuality = requiredQuality(actQuality);
                Assert.AreEqual(actQuality, (int)item.Quality);
            });
        }