public void Incentive_Should_Throw_When_MinItems_IsMore_Than_OrderItems() {
            Order order = GetTestOrder();

            Incentive i = new Incentive("XYZ", new PercentOffOrderCoupon(10), DateTime.Now.AddDays(1));
            i.MinimumItems = 5;

            bool thrown = false;
            try {
                i.ValidateUse(order);
            }
            catch(Exception x) {
                thrown = true;
                Assert.AreEqual("There is a minimum of " + i.MinimumItems.ToString() + " items required",x.Message);
            }

            Assert.IsTrue(thrown);

        }
        public void Incentive_Should_Throw_When_MustHaveProducts_Include_SKU10000() {
            Order order = GetTestOrder();

            Incentive i = new Incentive("XYZ", new PercentOffOrderCoupon(10), DateTime.Now.AddDays(1));
            i.MustHaveProducts =new string[]{"SKU10000"};
            bool thrown = false;
            try {
                i.ValidateUse(order);
            }
            catch (Exception x) {
                thrown = true;
                Assert.AreEqual("This coupon is not valid for the items you've selected", x.Message);
            }

            Assert.IsTrue(thrown);
        }
        public void Incentive_Should_Throw_When_Exipired() {
            Order order = GetTestOrder();

            //DateTime.Now will always be expired
            Incentive i = new Incentive("XYZ", new PercentOffOrderCoupon(10), DateTime.Now);

            bool thrown = false;
            try {
                i.ValidateUse(order);
            }
            catch (Exception x) {
                thrown = true;
                Assert.AreEqual("This coupon is Expired", x.Message);
            }

            Assert.IsTrue(thrown);

        }
        public void Incentive_Should_NotThrow_When_MustHaveProducts_Include_SKU1() {
            Order order = GetTestOrder();

            Incentive i = new Incentive("XYZ", new PercentOffOrderCoupon(10), DateTime.Now.AddDays(1));
            i.MustHaveProducts = new string[] { "SKU1" };
            bool thrown = false;
            try {
                i.ValidateUse(order);
            }
            catch {
                thrown = true;
            }

            Assert.IsFalse(thrown);

        }
        public void Incentive_Should_Throw_When_MinPurchase_IsMore_Than_OrderSubTotal() {
            Order order = GetTestOrder();

            Incentive i = new Incentive("XYZ", new PercentOffOrderCoupon(10), DateTime.Now.AddDays(1));
            
            //order subtotal is 40
            i.MininumPurchase = 100;
            
            bool thrown = false;
            try {
                i.ValidateUse(order);
            }
            catch (Exception x) {
                thrown = true;
                Assert.AreEqual("There is a minimum of " + i.MininumPurchase.ToString("C") + " required", x.Message);
            }

            Assert.IsTrue(thrown);

        }