public void Pass_Through_Variable_Discounts() { // arrange Mock <IDiscountHelper> mock = new Mock <IDiscountHelper>(); mock.Setup(m => m.ApplyDiscount(It.IsAny <decimal>())) .Returns <decimal>(total => total); mock.Setup(m => m.ApplyDiscount(It.Is <decimal>(v => v == 0))) .Throws <ArgumentOutOfRangeException>(); mock.Setup(m => m.ApplyDiscount(It.Is <decimal>(v => v > 100))) .Returns <decimal>(total => (total * 0.9M)); mock.Setup(m => m.ApplyDiscount(It.IsInRange <decimal>(10, 100, Range.Inclusive))) .Returns <decimal>(total => total - 5); var target = new LinqValueCaculatorDiscount(mock.Object); // act decimal FiveDollarDiscount = target.ValueProducts(createProduct(5)); decimal TenDollarDiscount = target.ValueProducts(createProduct(10)); decimal FiftyDollarDiscount = target.ValueProducts(createProduct(50)); decimal HundredDollarDiscount = target.ValueProducts(createProduct(100)); decimal FiveHundredDollarDiscount = target.ValueProducts(createProduct(500)); // assert Assert.AreEqual(5, FiveDollarDiscount, "$5 Fail"); Assert.AreEqual(5, TenDollarDiscount, "$10 Fail"); Assert.AreEqual(45, FiftyDollarDiscount, "$50 Fail"); Assert.AreEqual(95, HundredDollarDiscount, "$100 Fail"); Assert.AreEqual(450, FiveHundredDollarDiscount, "$500 Fail"); target.ValueProducts(createProduct(0)); }
public void Sum_Products_Correctly() { // arrange //var discounter = new MinimumDiscountHelper(); //var target = new LinqValueCaculatorDiscount(discounter); //var goalTotal = products.Sum(e => e.Price); Mock <IDiscountHelper> mock = new Mock <IDiscountHelper>(); mock.Setup(m => m.ApplyDiscount(It.IsAny <decimal>())) .Returns <decimal>(total => total); var target = new LinqValueCaculatorDiscount(mock.Object); // act var result = target.ValueProducts(products); // assert Assert.AreEqual(products.Sum(e => e.Price), result); }