Beispiel #1
0
        public void Price_Modifier_From_Single_Multiplier_Deal_With_Additional()
        {
            var matcher = new StrictItemOfferMatcher(new[] { "A", "A", "A" }, 130);

            var items = new[] {
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "B", Price = 30
                }
            };

            var modifiers = matcher.Match(items);

            modifiers.Modifiers.Should().HaveCount(1);

            modifiers.Modifiers[0].Modify(180).Should().Be(160);
        }
Beispiel #2
0
        public void Several_Multiplier_Deals_Correctly_Discovered()
        {
            var matcher = new StrictItemOfferMatcher(new[] { "A", "A", "A" }, 130);

            var deals = matcher.Match(new[] {
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                }
            });

            deals.Modifiers.Should().HaveCount(2);
        }
Beispiel #3
0
        public void Multiple_Deal_Matchers_With_Additionals()
        {
            var matcher1 = new StrictItemOfferMatcher(new[] { "A", "A", "A" }, 130); // reduction of 20
            var matcher2 = new StrictItemOfferMatcher(new[] { "B", "B" }, 45);       // reduction of 15
            var matcher3 = new StrictItemOfferMatcher(new[] { "C", "C" }, 30);       // reduction of 10

            var items = new[] {
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "C", Price = 20
                },
                new OfferItem {
                    Sku = "C", Price = 20
                },
                new OfferItem {
                    Sku = "B", Price = 30
                },
                new OfferItem {
                    Sku = "B", Price = 30
                },
                new OfferItem {
                    Sku = "D", Price = 20
                }
            };

            var itemsPrice = items.Sum(i => i.Price);

            var modifier1 = matcher1.Match(items);
            var modifier2 = matcher2.Match(items);
            var modifier3 = matcher3.Match(items);

            modifier1.Modifiers.Count().Should().Be(1);
            modifier2.Modifiers.Count().Should().Be(1);
            modifier3.Modifiers.Count().Should().Be(1);

            var price = modifier1.Modifiers.Aggregate(itemsPrice, (accumulator, item) => item.Modify(accumulator));

            price = modifier2.Modifiers.Aggregate(price, (accumulator, item) => item.Modify(accumulator));
            price = modifier3.Modifiers.Aggregate(price, (accumulator, item) => item.Modify(accumulator));

            (itemsPrice - price).Should().Be(45);
        }
Beispiel #4
0
        public void Single_Multiplier_Deal_Out_of_Order_Discovered()
        {
            var matcher = new StrictItemOfferMatcher(new[] { "A", "C", "B" }, 130);

            var deals = matcher.Match(new[] {
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "B", Price = 50
                },
                new OfferItem {
                    Sku = "C", Price = 50
                }
            });

            deals.Modifiers.Should().HaveCount(1);
        }
Beispiel #5
0
        public void Price_Modifier_From_Single_Multiplier_Deal()
        {
            var matcher = new StrictItemOfferMatcher(new[] { "A", "A", "A" }, 130);

            var modifiers = matcher.Match(new[] {
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                }
            });

            modifiers.Modifiers.Should().HaveCount(1);

            modifiers.Modifiers[0].Modify(150).Should().Be(130);
        }
Beispiel #6
0
        public void Single_Multiplier_Deal_With_Remainders()
        {
            var matcher = new StrictItemOfferMatcher(new[] { "A", "A", "A" }, 130);

            var deals = matcher.Match(new[] {
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                }
            });

            deals.Modifiers.Should().HaveCount(1);
        }
Beispiel #7
0
        public void Two_Deal_Matchers()
        {
            var matcher1 = new StrictItemOfferMatcher(new[] { "A", "A", "A" }, 130);
            var matcher2 = new StrictItemOfferMatcher(new[] { "B", "B" }, 45);

            var items = new[] {
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "A", Price = 50
                },
                new OfferItem {
                    Sku = "B", Price = 30
                },
                new OfferItem {
                    Sku = "B", Price = 30
                }
            };

            var itemsPrice = items.Sum(i => i.Price);

            var modifier1 = matcher1.Match(items);
            var modifier2 = matcher2.Match(items);

            modifier1.Modifiers.Count().Should().Be(1);
            modifier2.Modifiers.Count().Should().Be(1);

            var price = modifier1.Modifiers.Aggregate(itemsPrice, (accumulator, item) => item.Modify(accumulator));

            price = modifier2.Modifiers.Aggregate(price, (accumulator, item) => item.Modify(accumulator));

            (itemsPrice - price).Should().Be(35);
        }