Exemplo n.º 1
0
        public void Checkout_Cart_Empty()
        {
            IPolicy policy = new PurchaseOfferPolicy();

            policy.Add(new PurchaseRule("A", 3, 130M));

            IProductService productService = new ProductService();
            Checkout        checkout       = new Checkout(policy, productService);

            Assert.AreEqual(0, checkout.Total);
        }
Exemplo n.º 2
0
        public void Checkout_Cart_Item_3A2B()
        {
            IPolicy policy = new PurchaseOfferPolicy();

            policy.AddRange(new[] { new PurchaseRule("A", 3, 130M), new PurchaseRule("B", 2, 45M) });

            IProductService productService = new ProductService();
            Checkout        checkout       = new Checkout(policy, productService);

            checkout.ScanItem("A");
            checkout.ScanItem("B");
            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("B");

            Assert.AreEqual(175, checkout.Total);
        }
Exemplo n.º 3
0
        public void Checkout_Cart_Item_3AB()
        {
            IPolicy policy = new PurchaseOfferPolicy();
            IRule   rule   = new PurchaseRule("A", 3, 130M);

            policy.Add(rule);

            IProductService productService = new ProductService();
            Checkout        checkout       = new Checkout(policy, productService);

            checkout.ScanItem("A");
            checkout.ScanItem("B");
            checkout.ScanItem("A");
            checkout.ScanItem("A");

            Assert.AreEqual(160, checkout.Total);
        }
Exemplo n.º 4
0
        public void Checkout_Cart_Item_6A_EachItemScanned()
        {
            IPolicy purchasePolicy = new PurchaseOfferPolicy();

            purchasePolicy.AddRange(new[] { new PurchaseRule("A", 3, 130M), new PurchaseRule("B", 2, 45M) });
            //var policy = new DiscountOfferPolicy(purchasePolicy);
            //policy.Add(new DiscountRule() { DiscountAmount = 100, MinTotalAmount = 200 });
            IProductService productService = new ProductService();
            Checkout        checkout       = new Checkout(purchasePolicy, productService);

            int assertCount = 1;
            int groupCount  = 0;
            var groupAmount = 0;
            var product     = productService.GetProductByProductCode("A");

            checkout.ItemScanned += (sender, e) =>
            {
                if (assertCount % 3 == 0)
                {
                    groupCount++;
                    groupAmount = 130 * groupCount;
                    Assert.AreEqual(groupAmount, checkout.Total);
                }
                else
                {
                    var amount = groupAmount + (product.Price * (assertCount % 3));
                    Assert.AreEqual(amount, e.TotalAmount);
                }
                assertCount++;
            };

            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("A");

            Assert.AreEqual(260, checkout.Total);
        }
Exemplo n.º 5
0
        public void Checkout_Cart_Item_6A_Discount100()
        {
            IPolicy purchasePolicy = new PurchaseOfferPolicy();

            purchasePolicy.AddRange(new[] { new PurchaseRule("A", 3, 130M), new PurchaseRule("B", 2, 45M) });
            var policy = new DiscountOfferPolicy(purchasePolicy);

            policy.Add(new DiscountRule()
            {
                DiscountAmount = 100, MinTotalAmount = 200
            });
            IProductService productService = new ProductService();
            Checkout        checkout       = new Checkout(policy, productService);

            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("A");
            checkout.ScanItem("A");

            Assert.AreEqual(160, checkout.Total);
        }