public void SellInNeverChanges(int sellIn, int quality)
            {
                var sulfuras = new FinestGood(SULFURAS_ITEM_NAME, sellIn, quality);

                int expectedSellIn = sellIn;

                new SulfurasItemUpdaterRuleset().ApplyUpdates(sulfuras);

                Assert.Equal(expectedSellIn, sulfuras.SellIn);
            }
            [InlineData(int.MinValue, -1)] // Min SellIn & Quality Lower Bound
            public void QualityIncreases(int sellIn, int quality)
            {
                var agedBrie = new FinestGood(AGED_BRIE_ITEM_NAME, sellIn, quality);

                int expectedQuality = InventoryManagementRules.GetMaturedQuality(quality);

                new AgedBrieItemUpdaterRuleset().ApplyUpdates(agedBrie);

                Assert.Equal(expectedQuality, agedBrie.Quality);
            }
        public void SellInDecreases(string itemName, int sellIn, int quality)
        {
            var finestGood = new FinestGood(itemName, sellIn, quality);

            int expectedSellIn = InventoryManagementRules.GetUpdatedSellIn(sellIn);

            new AgedBrieItemUpdaterRuleset().ApplyUpdates(finestGood);

            Assert.Equal(expectedSellIn, finestGood.SellIn);
        }
        public void AdheresToMinQuality(string itemName, int sellIn, int quality)
        {
            var finestGood = new FinestGood(itemName, sellIn, quality);

            int maturedQuality  = InventoryManagementRules.GetMaturedQuality(quality);
            int expectedQuality = InventoryManagementRules.GetMinimumAdjustedQuality(maturedQuality);

            new AgedBrieItemUpdaterRuleset().ApplyUpdates(finestGood);

            Assert.Equal(expectedQuality, finestGood.Quality);
        }
            // int.Min rolls over to positive and causes quality to degrade at lower rate (but we aren't manually reducing sellIn in this method, again 6 million years, that's fine)
            public void QualityDecreasesIncreasedRate(int sellIn, int quality)
            {
                var conjuredItem = new FinestGood(CONJURED_ITEM_NAME, sellIn, quality);

                bool sellInPassed    = InventoryManagementRules.HasSellInPassed(sellIn);
                int  expectedQuality = InventoryManagementRules.GetConjuredQuality(quality, sellInPassed);

                new ConjuredItemUpdaterRuleset().ApplyUpdates(conjuredItem);

                Assert.Equal(expectedQuality, conjuredItem.Quality);
            }
            // int.Min rolls over to positive and causes quality to degrade at lower rate (but we aren't manually reducing sellIn in this method, again 6 million years, that's fine)
            public void QualityDecreases(int sellIn, int quality)
            {
                var normalItem = new FinestGood(NORMAL_ITEM_NAME, sellIn, quality);

                bool sellInPassed    = InventoryManagementRules.HasSellInPassed(sellIn);
                int  expectedQuality = InventoryManagementRules.GetDegradedQuality(quality, sellInPassed);

                new NormalItemUpdaterRuleset().ApplyUpdates(normalItem);

                Assert.Equal(expectedQuality, normalItem.Quality);
            }
            public void AppliesEventRule(int sellIn, int quality)
            {
                // We vigorously check the rule conditions in InventoryManagementRules - so here the goal is to make sure it's applied to the ruleset
                var backstagePass = new FinestGood(BACKSTAGE_PASSES_ITEM_NAME, sellIn, quality);

                int expectedQuality = InventoryManagementRules.GetEventQuality(quality, sellIn);

                new BackstagePassesItemUpdaterRuleset().ApplyUpdates(backstagePass);

                Assert.Equal(expectedQuality, backstagePass.Quality);
            }