static void Main(string[] args) { // Observer Example var customer = new Customer("Eliot Anderson"); var customer2 = new Customer("Andrei Keks"); var shop = new OnlineShop(); var mobile = new Product("Xiaomi MI 9", 600); shop.Subscribe(customer); shop.Subscribe(customer2); shop.AddProduct(mobile); // Template pattern example var mkvVideo = new MkvVideoPlayer(); var mp4Video = new MP4VideoPlayer(); mkvVideo.PlayVideo("funny-cats.mkv"); mp4Video.PlayVideo("funny-dogs.mp4"); // Strategy pattern var order = new Order(126); var calculator = new ShippingCalculator(); var shippingCostDHL = calculator.CalculateShipping(new DHLShippingStrategy(), order); var shippingCostUPS = calculator.CalculateShipping(new UpsShippingStrategy(), order); Console.WriteLine($"Shipping prices:\n DHL price: {shippingCostDHL}$\n UPS Price: {shippingCostUPS}$"); Console.ReadLine(); }
public void BasketShippingTotalTest() { var perRegionShippingOption = new PerRegionShipping() { PerRegionCosts = new[] { new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.UK, Amount = .75m }, new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.Europe, Amount = 1.5m } }, }; var flatRateShippingOption = new FlatRateShipping { FlatRate = 1.1m }; var basket = new Basket() { LineItems = new List <LineItem> { new LineItem() { DeliveryRegion = RegionShippingCost.Regions.UK, Shipping = perRegionShippingOption }, new LineItem() { DeliveryRegion = RegionShippingCost.Regions.Europe, Shipping = perRegionShippingOption }, new LineItem() { Shipping = flatRateShippingOption }, } }; var calculator = new ShippingCalculator(); decimal basketShipping = calculator.CalculateShipping(basket); Assert.That(basketShipping, Is.EqualTo(3.35m)); }
public void DiscountShippingOptionTest() { var discountShippingOption = new DiscountShipping() { PerRegionCosts = new[] { new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.UK, Amount = .75m }, new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.Europe, Amount = 1.5m } }, }; var basket = new Basket() { LineItems = new List <LineItem> { new LineItem() { DeliveryRegion = RegionShippingCost.Regions.UK, Shipping = discountShippingOption, SupplierId = 99 }, new LineItem() { DeliveryRegion = RegionShippingCost.Regions.UK, Shipping = discountShippingOption, SupplierId = 99 }, } }; var calculator = new ShippingCalculator(); decimal basketShipping = calculator.CalculateShipping(basket); var shippingAmount = discountShippingOption.GetAmount(basket.LineItems[0], basket); Assert.That(shippingAmount, Is.EqualTo(.25m)); shippingAmount = discountShippingOption.GetAmount(basket.LineItems[1], basket); Assert.That(shippingAmount, Is.EqualTo(.25m)); }
public void TotalShippingTest() { var perShippingOption = new PerRegionShipping() { PerRegionCosts = new[] { new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.UK, Amount = .5m }, new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.Europe, Amount = 1m }, new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.Europe, Amount = 10m }, new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.RestOfTheWorld, Amount = 2m } }, }; var flatRateShippingOption = new FlatRateShipping { FlatRate = 1.5m }; var basket = new Basket() { LineItems = new List <LineItem> { new LineItem() { DeliveryRegion = RegionShippingCost.Regions.UK, Shipping = perShippingOption }, new LineItem() { DeliveryRegion = RegionShippingCost.Regions.Europe, Shipping = perShippingOption }, new LineItem() { DeliveryRegion = RegionShippingCost.Regions.Europe, Shipping = perShippingOption }, new LineItem() { DeliveryRegion = RegionShippingCost.Regions.RestOfTheWorld, Shipping = perShippingOption }, new LineItem() { Shipping = flatRateShippingOption }, } }; var calculator = new ShippingCalculator(); decimal basketShipping = calculator.CalculateShipping(basket); Assert.That(basketShipping, Is.EqualTo(15.5m), "Total Amount doest not match"); }
public void BasketShippingTotalTest() { var perRegionDiscountShippingOption = new PerRegionDiscountShipping() { SpecialRule_deducte = .5m, PerRegionCosts = new[] { new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.UK, Amount = 6m } } }; var perRegionShippingOption = new PerRegionShipping() { PerRegionCosts = new[] { new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.UK, Amount = .75m }, new RegionShippingCost() { DestinationRegion = RegionShippingCost.Regions.Europe, Amount = 1.5m } }, }; var flatRateShippingOption = new FlatRateShipping { FlatRate = 1.1m }; var basket = new Basket() { LineItems = new List <LineItem> { new LineItem() { Id = 0, DeliveryRegion = RegionShippingCost.Regions.UK, Shipping = perRegionDiscountShippingOption, SupplierId = 1 }, new LineItem() { Id = 1, DeliveryRegion = RegionShippingCost.Regions.UK, Shipping = perRegionDiscountShippingOption, SupplierId = 1 }, new LineItem() { Id = 2, DeliveryRegion = RegionShippingCost.Regions.UK, Shipping = perRegionShippingOption }, new LineItem() { Id = 3, DeliveryRegion = RegionShippingCost.Regions.Europe, Shipping = perRegionShippingOption }, new LineItem() { Shipping = flatRateShippingOption }, } }; var calculator = new ShippingCalculator(); decimal basketShipping = calculator.CalculateShipping(basket); Assert.That(basketShipping, Is.EqualTo(14.85m)); }