예제 #1
0
        public void ContractPriceShouldOverrideDefaultPriceTest()
        {
            _priceBuilder.AddDefaultPriceRule("33333", 20.99m).AddContractPrice("33333", 15.99m, "AA11AA");
            var engine = new Engine(_priceBuilder.Rules);

            _itemBuilder.AddItem("33333", 3.99m, 1);
            _customer.Setup(c => c.Reference).Returns("AA11AA");

            var actual = engine.ApplyRules(_itemBuilder.Items, _customer.Object);

            Assert.AreEqual(1, actual.Count());
            Assert.AreEqual(15.99m, actual.First().Price);
        }
예제 #2
0
        public void PerformanceTest()
        {
            for (var i = 0; i < 15000; i++)
            {
                _priceBuilder.AddDefaultPriceRule(i.ToString(), 20.99m);
                _priceBuilder.AddContractPrice(i.ToString(), 15.99m, "AAAAAA");
            }
            _priceBuilder.AddBogof("11111", 20.99m);
            var engine = new Engine(_priceBuilder.Rules);

            var items = _itemBuilder.AddItem("52345", 5.99m, 1).AddItem("33333", 3.99m, 1).AddItem("44444", 15.99m, 1).Items;

            var timer = new Stopwatch();

            timer.Start();
            engine.ApplyRules(items, _customer.Object);
            timer.Stop();
            Console.WriteLine(timer.ElapsedMilliseconds);

            Assert.IsTrue(timer.ElapsedMilliseconds < 300);
        }