Ejemplo n.º 1
0
        public void ActionsFromXmlTest()
        {
            Promotion expected = new Promotion();
            ProductPriceAdjustment a1 = new ProductPriceAdjustment(AmountTypes.MonetaryAmount, 1.23m);
            expected.AddAction(a1);

            string xml = "<Actions>" + System.Environment.NewLine;
            xml += "  <Action>" + System.Environment.NewLine;
            xml += "    <Id>" + a1.Id.ToString() + "</Id>" + System.Environment.NewLine;
            xml += "    <TypeId>" + a1.TypeId + "</TypeId>" + System.Environment.NewLine;
            xml += "    <Settings>" + System.Environment.NewLine;
            xml += "      <Setting>" + System.Environment.NewLine;
            xml += "        <Key>AdjustmentType</Key>" + System.Environment.NewLine;
            xml += "        <Value>1</Value>" + System.Environment.NewLine;
            xml += "      </Setting>" + System.Environment.NewLine;
            xml += "      <Setting>" + System.Environment.NewLine;
            xml += "        <Key>Amount</Key>" + System.Environment.NewLine;
            xml += "        <Value>1.23</Value>" + System.Environment.NewLine;
            xml += "      </Setting>" + System.Environment.NewLine;
            xml += "    </Settings>" + System.Environment.NewLine;
            xml += "  </Action>" + System.Environment.NewLine;
            xml += "</Actions>";

            Promotion actual = new Promotion();
            actual.ActionsFromXml(xml);

            Assert.AreEqual(expected.Actions.Count, actual.Actions.Count, "Actions count did not match");
            Assert.AreEqual(a1.Amount, ((ProductPriceAdjustment)actual.Actions[0]).Amount, "Amount didn't come through");
            Assert.AreEqual(a1.AdjustmentType, ((ProductPriceAdjustment)actual.Actions[0]).AdjustmentType, "Adjustment Type didn't come through");
            for (int i = 0; i < expected.Actions.Count; i++)
            {
                Assert.AreEqual(expected.Actions[i].Id, actual.Actions[i].Id, "Id didn't match for action index " + i.ToString());
                Assert.AreEqual(expected.Actions[i].Settings.Count, actual.Actions[i].Settings.Count, "Settings Count didn't match for action index " + i.ToString());
                Assert.AreEqual(expected.Actions[i].TypeId, actual.Actions[i].TypeId, "TypeId didn't match for action index " + i.ToString());
            }
        }
Ejemplo n.º 2
0
        public Promotion GetPredefinedPromotion(PreDefinedPromotion type)
        {
            Promotion p = new Promotion();
            
            switch(type)
            {
                case PreDefinedPromotion.SaleCategories:
                    p.Name = "New Category Sale";
                    p.Mode = PromotionType.Sale;
                    p.AddQualification(new PromotionQualifications.ProductCategory());
                    p.AddAction(new PromotionActions.ProductPriceAdjustment());
                    break;
                case PreDefinedPromotion.SaleProducts:
                    p.Name = "New Product Sale";
                    p.Mode = PromotionType.Sale;
                    p.AddQualification(new PromotionQualifications.ProductBvin());
                    p.AddAction(new PromotionActions.ProductPriceAdjustment());
                    break;
                case PreDefinedPromotion.SaleProductType:
                    p.Name = "New Product Type Sale";
                    p.Mode = PromotionType.Sale;
                    p.AddQualification(new PromotionQualifications.ProductType());
                    p.AddAction(new PromotionActions.ProductPriceAdjustment());
                    break;
                case PreDefinedPromotion.SaleStorewide:
                    p.Name = "New Storewide Sale";
                    p.Mode = PromotionType.Sale;
                    p.AddQualification(new PromotionQualifications.AnyProduct());
                    p.AddAction(new PromotionActions.ProductPriceAdjustment());
                    break;
                case PreDefinedPromotion.SaleUser:
                    p.Name = "New Sale By User";
                    p.Mode = PromotionType.Sale;
                    p.AddQualification(new PromotionQualifications.UserIs());
                    p.AddAction(new PromotionActions.ProductPriceAdjustment());
                    break;
                case PreDefinedPromotion.SaleUserGroup:
                    p.Name = "New Sale By Price Group";
                    p.Mode = PromotionType.Sale;
                    p.AddQualification(new PromotionQualifications.UserIsInGroup());
                    p.AddAction(new PromotionActions.ProductPriceAdjustment());
                    break;
                case PreDefinedPromotion.OrderDiscountCoupon:
                    p.Name = "New Order Discount With Coupon";
                    p.Mode = PromotionType.Offer;
                    p.AddQualification(new PromotionQualifications.OrderHasCoupon());
                    p.AddAction(new PromotionActions.OrderTotalAdjustment());
                    break;
                case PreDefinedPromotion.OrderDiscountUser:
                    p.Name = "New Order Discount by User";
                    p.Mode = PromotionType.Offer;
                    p.AddQualification(new PromotionQualifications.UserIs());
                    p.AddAction(new PromotionActions.OrderTotalAdjustment());
                    break;
                case PreDefinedPromotion.OrderDiscountUserGroup:
                    p.Name = "New Order Discount by Price Group";
                    p.Mode = PromotionType.Offer;
                    p.AddQualification(new PromotionQualifications.UserIsInGroup());
                    p.AddAction(new PromotionActions.OrderTotalAdjustment());
                    break;
                case PreDefinedPromotion.OrderFreeShipping:
                    p.Name = "New Free Shipping Discount";
                    p.Mode = PromotionType.Offer;
                    p.AddQualification(new PromotionQualifications.AnyShippingMethod());
                    p.AddAction(new PromotionActions.OrderShippingAdjustment(AmountTypes.Percent, -100m));
                    break;
                case PreDefinedPromotion.OrderShippingDiscount:
                    p.Name = "New Free Shipping Discount";
                    p.Mode = PromotionType.Offer;
                    p.AddQualification(new PromotionQualifications.AnyShippingMethod());
                    p.AddAction(new PromotionActions.OrderShippingAdjustment(AmountTypes.Percent, 0m));
                    break;
            }

            return p;
        }
Ejemplo n.º 3
0
        public void ActionsToXmlTest()
        {
            Promotion target = new Promotion();
            ProductPriceAdjustment a1 = new ProductPriceAdjustment(AmountTypes.MonetaryAmount, 1.23m);
            target.AddAction(a1);

            string expected = "<Actions>" + System.Environment.NewLine;

            expected += "  <Action>" + System.Environment.NewLine;
            expected += "    <Id>" + a1.Id.ToString() + "</Id>" + System.Environment.NewLine;
            expected += "    <TypeId>" + a1.TypeId + "</TypeId>" + System.Environment.NewLine;
            expected += "    <Settings>" + System.Environment.NewLine;
            expected += "      <Setting>" + System.Environment.NewLine;
            expected += "        <Key>AdjustmentType</Key>" + System.Environment.NewLine;
            expected += "        <Value>1</Value>" + System.Environment.NewLine;
            expected += "      </Setting>" + System.Environment.NewLine;
            expected += "      <Setting>" + System.Environment.NewLine;
            expected += "        <Key>Amount</Key>" + System.Environment.NewLine;
            expected += "        <Value>1.23</Value>" + System.Environment.NewLine;
            expected += "      </Setting>" + System.Environment.NewLine;
            expected += "    </Settings>" + System.Environment.NewLine;
            expected += "  </Action>" + System.Environment.NewLine;

            expected += "</Actions>";

            string actual;
            actual = target.ActionsToXml();
            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 4
0
        public void CanSkipPromotionIfNoProduct()
        {
            Promotion p = new Promotion();
            p.IsEnabled = true;
            p.Name = "Product Sale Test";
            p.StartDateUtc = DateTime.Now.AddDays(-1);
            p.EndDateUtc = DateTime.Now.AddDays(1);
            p.StoreId = 1;
            p.Id = 1;
            Assert.IsTrue(p.AddQualification(new ProductBvin("bvin1234")), "Add Qualification Failed");
            Assert.IsTrue(p.AddAction(new ProductPriceAdjustment(AmountTypes.MonetaryAmount, -20m)), "Add Action Failed");

            RequestContext c = new RequestContext();
            MerchantTribeApplication app = MerchantTribeApplication.InstantiateForMemory(c);

            bool actual = p.ApplyToProduct(app, null, null, null, DateTime.UtcNow);

            Assert.IsFalse(actual, "Promotion should not have applied");
        }
Ejemplo n.º 5
0
        public void CanSaveQualificationsAndActionsInRepository()
        {
            Promotion p = new Promotion();
            p.Name = "FindMe";
            p.AddQualification(new ProductBvin("ABC123"));
            p.AddQualification(new ProductType("TYPE0"));
            p.AddAction(new ProductPriceAdjustment(AmountTypes.Percent, 50));
            PromotionRepository r = PromotionRepository.InstantiateForMemory(new RequestContext());

            Assert.IsTrue(r.Create(p), "Create should be true");
            Assert.IsNotNull(p);
            Assert.IsTrue(p.Id > 0, "Promotion was not assigned an Id number");

            Promotion target = r.Find(p.Id);
            Assert.IsNotNull(target, "Found should not be null");
            Assert.AreEqual(p.Id, target.Id, "Id didn't match");
            Assert.AreEqual(p.StoreId, target.StoreId, "Store ID Didn't Match");
            Assert.AreEqual(p.Name, target.Name, "Name didn't match");

            Assert.AreEqual(p.Qualifications.Count, target.Qualifications.Count, "Qualification count didn't match");
            for (int i = 0; i < p.Qualifications.Count; i++)
            {
                Assert.AreEqual(p.Qualifications[0].Id, target.Qualifications[0].Id, "Id of index " + i.ToString() + " didn't match");
                Assert.AreEqual(p.Qualifications[0].GetType(), target.Qualifications[0].GetType(), "Type of index " + i.ToString() + " didn't match");
            }

            Assert.AreEqual(p.Actions.Count, target.Actions.Count, "Action count didn't match");
            for (int i = 0; i < p.Actions.Count; i++)
            {
                Assert.AreEqual(p.Actions[0].Id, target.Actions[0].Id, "Id of action index " + i.ToString() + " didn't match");
                Assert.AreEqual(p.Actions[0].GetType(), target.Actions[0].GetType(), "Type of action index " + i.ToString() + " didn't match");
            }
        }
Ejemplo n.º 6
0
        public void CanPutAProductOnSalePricedByApp()
        {
            RequestContext c = new RequestContext();
            MerchantTribeApplication app = MerchantTribeApplication.InstantiateForMemory(c);
            app.CurrentStore = new Accounts.Store();
            app.CurrentStore.Id = 1;

            // Create a Promotion to Test
            Promotion p = new Promotion();
            p.Mode = PromotionType.Sale;
            p.IsEnabled = true;
            p.Name = "Product Sale Test";
            p.CustomerDescription = "$10.00 off Test Sale!";
            p.StartDateUtc = DateTime.Now.AddDays(-1);
            p.EndDateUtc = DateTime.Now.AddDays(1);
            p.StoreId = 1;
            p.Id = 0;
            p.AddQualification(new ProductBvin("bvin1234"));
            p.AddAction(new ProductPriceAdjustment(AmountTypes.MonetaryAmount, -10m));
            app.MarketingServices.Promotions.Create(p);

            // Create a test Product
            Catalog.Product prod = new Catalog.Product();
            prod.Bvin = "bvin1234";
            prod.SitePrice = 59.99m;
            prod.StoreId = 1;

            Catalog.UserSpecificPrice actualPrice = app.PriceProduct(prod, null, null);

            Assert.IsNotNull(actualPrice, "Price should not be null");
            Assert.AreEqual(49.99m, actualPrice.PriceWithAdjustments(), "Price should be $49.99");
            Assert.AreEqual(1, actualPrice.DiscountDetails.Count, "Discount Details count should be one");
            Assert.AreEqual(p.CustomerDescription, actualPrice.DiscountDetails[0].Description, "Description should match promotion");
        }
Ejemplo n.º 7
0
        public void CanPutAProductOnSale()
        {
            Promotion p = new Promotion();
            p.IsEnabled = true;
            p.Name = "Product Sale Test";
            p.CustomerDescription = "A Customer Discount";
            p.StartDateUtc = DateTime.Now.AddDays(-1);
            p.EndDateUtc = DateTime.Now.AddDays(1);
            p.StoreId = 1;
            p.Id = 1;
            Assert.IsTrue(p.AddQualification(new ProductBvin("bvin1234")), "Add Qualification Failed");
            Assert.IsTrue(p.AddAction(new ProductPriceAdjustment(AmountTypes.MonetaryAmount, -20m)), "Add Action Failed");

            Catalog.Product prod = new Catalog.Product();
            prod.Bvin = "bvin1234";
            prod.SitePrice = 59.99m;
            prod.StoreId = 1;

            Catalog.UserSpecificPrice userPrice = new Catalog.UserSpecificPrice(prod, null);

            RequestContext c = new RequestContext();
            MerchantTribeApplication app = MerchantTribeApplication.InstantiateForMemory(c);

            bool actual = p.ApplyToProduct(app, prod, userPrice, null, DateTime.UtcNow);

            Assert.IsTrue(actual, "Promotion should have applied with return value of true");
            Assert.AreEqual(39.99m, userPrice.PriceWithAdjustments(), "Price should have been reduced by $20.00");
            Assert.AreEqual(p.CustomerDescription, userPrice.DiscountDetails[0].Description, "Description should match promotion");
        }
Ejemplo n.º 8
0
        public void CanDiscountAnOrderByCoupon()
        {
            RequestContext c = new RequestContext();
            MerchantTribeApplication app = MerchantTribeApplication.InstantiateForMemory(c);
            app.CurrentStore = new Accounts.Store();
            app.CurrentStore.Id = 1;

            // Create a Promotion to Test
            Promotion p = new Promotion();
            p.Mode = PromotionType.Offer;
            p.IsEnabled = true;
            p.Name = "Discount By Coupon Test";
            p.CustomerDescription = "$20.00 off Test Offer!";
            p.StartDateUtc = DateTime.Now.AddDays(-1);
            p.EndDateUtc = DateTime.Now.AddDays(1);
            p.StoreId = 1;
            p.Id = 0;
            OrderHasCoupon q = new OrderHasCoupon();
            q.AddCoupon("COUPON");
            p.AddQualification(q);
            p.AddAction(new OrderTotalAdjustment(AmountTypes.MonetaryAmount, -20m));
            app.MarketingServices.Promotions.Create(p);

            // Create a test Order
            Order o = new Order();
            o.Items.Add(new LineItem() { BasePricePerItem = 59.99m, ProductName = "Sample Product", ProductSku = "ABC123" });
            app.CalculateOrderAndSave(o);

            Assert.AreEqual(59.99m, o.TotalOrderAfterDiscounts, "Order total should be $59.99 before discounts");

            o.AddCouponCode("COUPON");
            app.CalculateOrderAndSave(o);

            Assert.AreEqual(39.99m, o.TotalOrderAfterDiscounts, "Order total after discounts should be $39.99");
            Assert.AreEqual(-20m, o.TotalOrderDiscounts, "Discount should be -20");
            Assert.AreEqual(59.99m, o.TotalOrderBeforeDiscounts, "Order total with coupon but before discount should be $59.99");
        }
Ejemplo n.º 9
0
        public Promotion GetPredefinedPromotion(PreDefinedPromotion type)
        {
            Promotion p = new Promotion();

            switch (type)
            {
            case PreDefinedPromotion.SaleCategories:
                p.Name = "New Category Sale";
                p.Mode = PromotionType.Sale;
                p.AddQualification(new PromotionQualifications.ProductCategory());
                p.AddAction(new PromotionActions.ProductPriceAdjustment());
                break;

            case PreDefinedPromotion.SaleProducts:
                p.Name = "New Product Sale";
                p.Mode = PromotionType.Sale;
                p.AddQualification(new PromotionQualifications.ProductBvin());
                p.AddAction(new PromotionActions.ProductPriceAdjustment());
                break;

            case PreDefinedPromotion.SaleProductType:
                p.Name = "New Product Type Sale";
                p.Mode = PromotionType.Sale;
                p.AddQualification(new PromotionQualifications.ProductType());
                p.AddAction(new PromotionActions.ProductPriceAdjustment());
                break;

            case PreDefinedPromotion.SaleStorewide:
                p.Name = "New Storewide Sale";
                p.Mode = PromotionType.Sale;
                p.AddQualification(new PromotionQualifications.AnyProduct());
                p.AddAction(new PromotionActions.ProductPriceAdjustment());
                break;

            case PreDefinedPromotion.SaleUser:
                p.Name = "New Sale By User";
                p.Mode = PromotionType.Sale;
                p.AddQualification(new PromotionQualifications.UserIs());
                p.AddAction(new PromotionActions.ProductPriceAdjustment());
                break;

            case PreDefinedPromotion.SaleUserGroup:
                p.Name = "New Sale By Price Group";
                p.Mode = PromotionType.Sale;
                p.AddQualification(new PromotionQualifications.UserIsInGroup());
                p.AddAction(new PromotionActions.ProductPriceAdjustment());
                break;

            case PreDefinedPromotion.OrderDiscountCoupon:
                p.Name = "New Order Discount With Coupon";
                p.Mode = PromotionType.Offer;
                p.AddQualification(new PromotionQualifications.OrderHasCoupon());
                p.AddAction(new PromotionActions.OrderTotalAdjustment());
                break;

            case PreDefinedPromotion.OrderDiscountUser:
                p.Name = "New Order Discount by User";
                p.Mode = PromotionType.Offer;
                p.AddQualification(new PromotionQualifications.UserIs());
                p.AddAction(new PromotionActions.OrderTotalAdjustment());
                break;

            case PreDefinedPromotion.OrderDiscountUserGroup:
                p.Name = "New Order Discount by Price Group";
                p.Mode = PromotionType.Offer;
                p.AddQualification(new PromotionQualifications.UserIsInGroup());
                p.AddAction(new PromotionActions.OrderTotalAdjustment());
                break;

            case PreDefinedPromotion.OrderFreeShipping:
                p.Name = "New Free Shipping Discount";
                p.Mode = PromotionType.Offer;
                p.AddQualification(new PromotionQualifications.AnyShippingMethod());
                p.AddAction(new PromotionActions.OrderShippingAdjustment(AmountTypes.Percent, -100m));
                break;

            case PreDefinedPromotion.OrderShippingDiscount:
                p.Name = "New Free Shipping Discount";
                p.Mode = PromotionType.Offer;
                p.AddQualification(new PromotionQualifications.AnyShippingMethod());
                p.AddAction(new PromotionActions.OrderShippingAdjustment(AmountTypes.Percent, 0m));
                break;
            }

            return(p);
        }