public void Can_calculate_discount_amount_fixed() { var discount = new Discount() { UsePercentage = false, DiscountAmount = 10 }; discount.GetDiscountAmount(100).ShouldEqual(10); discount.DiscountAmount = 20; discount.GetDiscountAmount(200).ShouldEqual(20); }
public void Can_calculate_discount_amount_percentage() { var discount = new Discount() { UsePercentage = true, DiscountPercentage = 30 }; discount.GetDiscountAmount(100).ShouldEqual(30); discount.DiscountPercentage = 60; discount.GetDiscountAmount(200).ShouldEqual(120); }
/// <summary> /// Gets discount amount /// </summary> /// <param name="productVariant">Product variant</param> /// <param name="customer">The customer</param> /// <param name="additionalCharge">Additional charge</param> /// <param name="quantity">Product quantity</param> /// <param name="appliedDiscount">Applied discount</param> /// <returns>Discount amount</returns> public virtual decimal GetDiscountAmount(ProductVariant productVariant, Customer customer, decimal additionalCharge, int quantity, out Discount appliedDiscount) { appliedDiscount = null; decimal appliedDiscountAmount = decimal.Zero; //we don't apply discounts to products with price entered by a customer if (productVariant.CustomerEntersPrice) return appliedDiscountAmount; appliedDiscount = GetPreferredDiscount(productVariant, customer, additionalCharge, quantity); if (appliedDiscount != null) { decimal finalPriceWithoutDiscount = GetFinalPrice(productVariant, customer, additionalCharge, false, quantity); appliedDiscountAmount = appliedDiscount.GetDiscountAmount(finalPriceWithoutDiscount); } return appliedDiscountAmount; }