public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jo = JObject.Load(reader); IDeprecationRule deprecationRule = null; switch (jo["RuleType"].ToString()) { case var decreasingRuleType when decreasingRuleType == nameof(DecreasingDeprecationRule): deprecationRule = new DecreasingDeprecationRule(); break; case var increasingRuleType when increasingRuleType == nameof(IncreasingDeprecationRule): deprecationRule = new IncreasingDeprecationRule(); break; case var zeroRuleType when zeroRuleType == nameof(ZeroDeprecationRule): deprecationRule = new ZeroDeprecationRule(); break; } if (deprecationRule != null) { serializer.Populate(jo.CreateReader(), deprecationRule); } // If the JSON doesn't contain a value for "FirstApplicableDay" assume it is essentially ongoing. if (jo["FirstApplicableDay"] == null) { deprecationRule.FirstApplicableDay = int.MaxValue; } return(deprecationRule); }
public void DoubleChangeWhenSellInIsLessZero() { var testRule = new DecreasingDeprecationRule { FirstApplicableDay = int.MaxValue, Amount = 2 }; var testStock = new StockItem { StockTypeId = "Stock 1", SellIn = -1, Quality = 5 }; var service = new DecreasingDeprecationRuleService(); var result = service.RunRule(testRule, testStock); Assert.True(result); Assert.Equal(1, testStock.Quality); }
public void DecreasesQualityWhenSellInIsLessThanFirstApplicableDay() { var testRule = new DecreasingDeprecationRule { FirstApplicableDay = 3, Amount = 2 }; var testStock = new StockItem { StockTypeId = "Stock 1", SellIn = 2, Quality = 5 }; var service = new DecreasingDeprecationRuleService(); var result = service.RunRule(testRule, testStock); Assert.True(result); Assert.Equal(3, testStock.Quality); }
public void NoChangeWhenSellInIsGreaterThanFirstApplicableDay() { var testRule = new DecreasingDeprecationRule { FirstApplicableDay = 3, Amount = 2 }; var testStock = new StockItem { StockTypeId = "Stock 1", SellIn = 4, Quality = 5 }; var service = new DecreasingDeprecationRuleService(); var result = service.RunRule(testRule, testStock); Assert.False(result); Assert.Equal(5, testStock.Quality); }