Пример #1
0
        public void PerRegionDiscountShippingOptionTest()
        {
            var perRegionDiscountShippingOption = new PerRegionDiscountShipping()
            {
                SpecialRule_deducte = .5m,
                PerRegionCosts      = new[]
                {
                    new RegionShippingCost()
                    {
                        DestinationRegion = RegionShippingCost.Regions.UK,
                        Amount            = 6m
                    },
                    new RegionShippingCost()
                    {
                        DestinationRegion = RegionShippingCost.Regions.Europe,
                        Amount            = 5m
                    }
                }
            };
            var Basket = new Basket()
            {
                LineItems = new List <LineItem>()
            };
            var lineItem = new LineItem()
            {
                Id             = 0,
                DeliveryRegion = RegionShippingCost.Regions.UK,
                Shipping       = perRegionDiscountShippingOption,
                SupplierId     = 1
            };
            var lineItem_difID = new LineItem()     // There is always difference ID while new lineItem comming
            {
                Id             = 1,
                DeliveryRegion = RegionShippingCost.Regions.UK,
                Shipping       = perRegionDiscountShippingOption,
                SupplierId     = 1
            };
            var lineItem_difRegion = new LineItem()
            {
                Id             = 2,
                DeliveryRegion = RegionShippingCost.Regions.Europe,
                Shipping       = perRegionDiscountShippingOption,
                SupplierId     = 1
            };


            // Check1: the amount should be the same as preDefine
            Basket.LineItems.Add(lineItem);
            var shippingAmount = perRegionDiscountShippingOption.GetAmount(lineItem, Basket);

            Assert.That(shippingAmount, Is.EqualTo(6m));

            // Check2: the amount should have a discount while it's multiple shipping
            Basket.LineItems.Add(lineItem_difID);
            shippingAmount = perRegionDiscountShippingOption.GetAmount(lineItem_difID, Basket);
            Assert.That(shippingAmount, Is.EqualTo(5.5m));

            // Check3: the amount should not have a discount while it's not the same shipping
            Basket.LineItems.Add(lineItem_difRegion);
            shippingAmount = perRegionDiscountShippingOption.GetAmount(lineItem_difRegion, Basket);
            Assert.That(shippingAmount, Is.EqualTo(5m));
        }
Пример #2
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));
        }