public static ISellInStrategy GetStrategy(Item item)
        {
            if (item is LegendaryItem)
                return new SulfurasSellInStrategy();

            return new DefaultSellInStrategy();
        }
        public void DoesNotChange()
        {
            var item = new Item();
            item.SellIn = 0;

            strategy.UpdateSellIn(item);

            Assert.AreEqual(0, item.SellIn);
        }
        public void DecreasesByOne()
        {
            var item = new Item();
            item.SellIn = 0;

            strategy.UpdateSellIn(item);

            Assert.AreEqual(-1, item.SellIn);
        }
        public override void UpdateQuality(Item conjuredItem)
        {
            if (conjuredItem.SellIn < 0)
                conjuredItem.Quality -= 4;
            else
                conjuredItem.Quality -= 2;

            base.UpdateQuality(conjuredItem);
        }
        public override void UpdateQuality(Item item)
        {
            if (item.SellIn < 0)
                item.Quality -= 2;
            else
                item.Quality -= 1;

            base.UpdateQuality(item);
        }
        public void QualityDoesNotGoAboveFifty()
        {
            var item = new Item();
            item.Quality = 51;

            strategy.UpdateQuality(item);

            Assert.AreEqual(50, item.Quality);
        }
        public void QualityDecreasesByTwoWhenSellInIsGreaterThanOrEqualToZero()
        {
            var item = new Item();
            item.Quality = 49;
            item.SellIn = -1;

            strategy.UpdateQuality(item);

            Assert.AreEqual(47, item.Quality);
        }
        public void QualityDoesNotChange()
        {
            var item = new Item();
            item.Quality = 49;
            item.SellIn = 0;

            strategy.UpdateQuality(item);

            Assert.AreEqual(49, item.Quality);
        }
        public static IQualityStrategy GetStrategy(Item item)
        {
            if (item is AgedBrie)
                return new AgedBrieQualityStrategy(new QualityNeverIncreasesAboveFiftyStrategy());

            if (item is LegendaryItem)
                return new LegendaryQualityStrategy();

            if (item is BackstagePass)
                return new BackstagePassQualityStrategy(new QualityNeverIncreasesAboveFiftyStrategy());

            if (item is ConjuredItem)
                return new ConjuredQualityStrategy(new QualityNeverDegradesBelowZeroStrategy());

            return new DefaultQualityStrategy(new QualityNeverDegradesBelowZeroStrategy());
        }
        public override void UpdateQuality(Item backstagePass)
        {
            if (backstagePass.SellIn > 0)
            {
                backstagePass.Quality++;

                if (backstagePass.SellIn <= 10)
                    backstagePass.Quality++;

                if (backstagePass.SellIn <= 5)
                    backstagePass.Quality++;
            }
            else
            {
                backstagePass.Quality = 0;
            }

            base.UpdateQuality(backstagePass);
        }
 public void UpdateSellIn(Item item)
 {
 }
 public void UpdateSellIn(Item item)
 {
     item.SellIn--;
 }
 public void UpdateQuality(Item sulfuras)
 {
 }
        public override void UpdateQuality(Item brie)
        {
            brie.Quality++;

            base.UpdateQuality(brie);
        }
 public virtual void UpdateQuality(Item item)
 {
     if (strategy != null)
         strategy.UpdateQuality(item);
 }