public static List <IPricingRule> GetPricingRulesGivenInTheChallenge() { var items = GetItemsGivenInTheChallenge(); var ruleB = new NItemsForXPricingRule(items[1], 2, 20); var ruleC = new NItemsForXPricingRule(items[2], 3, 10); var ruleD = new Buy1Get1FreePricingRule(items[3]); var ruleE = new NItemsForThePriceOfXItemsPricingRule(items[4], 3, 2); return(new List <IPricingRule> { ruleB, ruleC, ruleD, ruleE }); }
// This simple console app is an example of how the interface may be used static void Main(string[] args) { // Create the items that were given in the challenge var itemA = new Item { Id = 'A', Price = 8 }; var itemB = new Item { Id = 'B', Price = 12 }; var itemC = new Item { Id = 'C', Price = 4 }; var itemD = new Item { Id = 'D', Price = 7 }; var itemE = new Item { Id = 'E', Price = 5 }; // Create the rules for the items that were given in the challenge // A doesn't have a pricing rule that would apply a discount so we skip it var ruleB = new NItemsForXPricingRule(itemB, 2, 20); var ruleC = new NItemsForXPricingRule(itemC, 3, 10); var ruleD = new Buy1Get1FreePricingRule(itemD); var ruleE = new NItemsForThePriceOfXItemsPricingRule(itemE, 3, 2); var pricingRules = new List <IPricingRule> { ruleB, ruleC, ruleD, ruleE }; // Initialize our UnidaysDiscountChallenge with the set of pricing rules var example = new UnidaysDiscountChallenge(pricingRules); // Add some items to the basket example.AddToBasket(itemD); example.AddToBasket(itemD); // Get amount to pay var result = example.CalculateTotalPrice(); var totalPrice = result.Total; var deliveryCharge = result.DeliveryCharge; var overallTotal = totalPrice + deliveryCharge; Console.WriteLine("Items in the basket: DD"); Console.WriteLine($"\nPrice after discounts: £{totalPrice:0.00}"); Console.WriteLine($"Delivery charge: £{deliveryCharge:0.00}"); Console.WriteLine($"Overall total: £{overallTotal:0.00}"); }