Esempio n. 1
0
        public void CreateRule(bool nullSku, decimal batchPrice, int batchQuantity)
        {
            var testContext = new TestContext();

            Sku sku = nullSku ? null : testContext.CreateNewSku("A", 100);
            CollectionOfSameSkuForRule rule = null;
            Action create = () =>
            {
                rule = new CollectionOfSameSkuForRule(testContext.CartFactory, sku, batchQuantity, batchPrice);
            };

            if (sku == null)
            {
                Assert.Throws <ArgumentNullException>(create);
                return;
            }

            if (batchQuantity == 0)
            {
                Assert.Throws <ArgumentException>(create);
                return;
            }

            create();
            Assert.NotNull(rule.Sku);
            Assert.True(rule.Quantity > 0);
            Assert.True(rule.TotalPrice > 0);
        }
Esempio n. 2
0
        public void WhenRightAmountOfEntriesIsBatchableThenNoResidualsAreLeft(
            decimal basePrice, decimal batchPrice, int batchQuantity, int itemsNumberToAdd)
        {
            var testContext = new TestContext();

            if (itemsNumberToAdd % batchQuantity != 0)
            {
                throw new TestClassException("Invalid configuration");
            }

            int batchesNumber = itemsNumberToAdd / batchQuantity;

            var sku = testContext.CreateNewSku("A", basePrice);

            var cart = testContext.CartFactory.Create();

            cart.Add(sku, itemsNumberToAdd);
            Assert.Equal(itemsNumberToAdd, cart.Quantity);
            Assert.Single(cart);

            var rule    = new CollectionOfSameSkuForRule(testContext.CartFactory, sku, batchQuantity, batchPrice);
            var newCart = rule.Evaluate(cart);

            Assert.Equal(batchesNumber, newCart.Quantity);

            Action <SkuCartEntry> batchChecker = entry =>
            {
                entry.CheckCartEntryWasProcessedByRule();
                Assert.Equal(1, entry.Quantity);
                Assert.Equal(batchPrice, entry.Price);
            };

            Assert.Collection(newCart, Enumerable.Repeat(batchChecker, batchesNumber).ToArray());
        }
Esempio n. 3
0
        [InlineData(100, 0, 4, 2)]  // Without residuals
        public void CorrectTotalPriceWhenBatching(
            decimal basePrice, decimal batchPrice, int batchQuantity, int itemsNumberToAdd)
        {
            var testContext = new TestContext();

            int residualsNumber = itemsNumberToAdd % batchQuantity;
            int batchesNumber   = itemsNumberToAdd / batchQuantity;

            var sku = testContext.CreateNewSku("A", basePrice);

            var cart = testContext.CartFactory.Create();

            cart.Add(sku, itemsNumberToAdd);
            Assert.Equal(basePrice * itemsNumberToAdd, cart.Total);

            var rule    = new CollectionOfSameSkuForRule(testContext.CartFactory, sku, batchQuantity, batchPrice);
            var newCart = rule.Evaluate(cart);

            Assert.Equal(basePrice * residualsNumber + batchPrice * batchesNumber, newCart.Total);
        }