Beispiel #1
0
        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));
        }
Beispiel #3
0
        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");
        }
Beispiel #5
0
        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));
        }