Exemple #1
0
        public void PurchasePrice_UsesOriginalPrice_WhenNoMarkdown()
        {
            decimal            expectedPrice = 2.38M;
            WeighedGroceryItem bananas       = new WeighedGroceryItem("bananas", expectedPrice);

            Assert.AreEqual(expectedPrice, bananas.PurchasePrice);
        }
Exemple #2
0
        public void Constructor_SetsNameAndOriginalPrice()
        {
            decimal            expectedPrice = 2.38M;
            WeighedGroceryItem bananas       = new WeighedGroceryItem("bananas", expectedPrice);

            Assert.AreEqual("bananas", bananas.Name);
            Assert.AreEqual(expectedPrice, bananas.OriginalPrice);
        }
        public void Constructor_SetsItemAndWeight()
        {
            decimal                 expectedWeight = 1.6M;
            WeighedGroceryItem      bananas        = new WeighedGroceryItem("bananas", 2.30M);
            WeighedGroceryItemOrder order          = new WeighedGroceryItemOrder(bananas, expectedWeight);

            Assert.AreEqual(bananas, order.Item);
            Assert.AreEqual(expectedWeight, order.Weight);
        }
Exemple #4
0
        public void CalculatePurchasePrice_UsesPurchasePrice_IfMarkdownIsSetButSpecialIsNotSet()
        {
            WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.00M)
            {
                Markdown = new PriceMarkdownStub(1.50M)
            };

            Assert.AreEqual(7.50M, bananas.CalculatePurchasePrice(5));
        }
Exemple #5
0
        public void CalculatePurchasePrice_AppliesSpecial_IfSpecialIsSet()
        {
            WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.00M)
            {
                Special = new WeighedGroceryItemSpecialFake(1.50M)
            };

            Assert.AreEqual(7.50M, bananas.CalculatePurchasePrice(5));
        }
Exemple #6
0
        public void PurchasePrice_GetsResultFromMarkdown()
        {
            decimal            expectedPrice = 1.50M;
            WeighedGroceryItem bananas       = new WeighedGroceryItem("bananas", 2.38M)
            {
                Markdown = new PriceMarkdownStub(expectedPrice)
            };

            Assert.AreEqual(expectedPrice, bananas.PurchasePrice);
        }
        public void Combine_ThrowsException_IfItemsAreDifferent()
        {
            WeighedGroceryItem bananas  = new WeighedGroceryItem("bananas", 2.30M);
            WeighedGroceryItem potatoes = new WeighedGroceryItem("potatoes", 1.38M);

            WeighedGroceryItemOrder a = new WeighedGroceryItemOrder(bananas, 1.2M);
            WeighedGroceryItemOrder b = new WeighedGroceryItemOrder(potatoes, 5.0M);

            Assert.ThrowsException <DifferingItemsException>(() => a.Combine(b));
        }
        public void AbstractCombine_ReturnsNewWeighedGroceryItemWithCombinedWeight()
        {
            WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.30M);
            IGroceryItemOrder  a       = new WeighedGroceryItemOrder(bananas, 1.2M);
            IGroceryItemOrder  b       = new WeighedGroceryItemOrder(bananas, 5.0M);

            WeighedGroceryItemOrder result = (WeighedGroceryItemOrder)a.Combine(b);

            Assert.AreEqual(6.2M, result.Weight);
        }
        public void Scan_ReturnsCorrespondingItem_IfExists()
        {
            GroceryItemScanner scanner  = new GroceryItemScanner(null);
            IGroceryItem       expected = new WeighedGroceryItem("bananas", 2.38M);

            scanner.Items.Add(expected);

            IGroceryItem result = scanner.Scan("bananas");

            Assert.AreEqual(expected, result);
        }
        public IGroceryItemOrder CreateOrder(IGroceryItem item)
        {
            WeighedGroceryItem weighedItem = item as WeighedGroceryItem;

            if (weighedItem == null)
            {
                throw new InvalidGroceryItemTypeException();
            }

            decimal weight = WeightSelector.SelectWeight(weighedItem);

            return(new WeighedGroceryItemOrder(weighedItem, weight));
        }
        public void CreateOrder_CreatesOrderWithFiveItems_WhenFactoryCreatedWithCustomDefault()
        {
            WeighedGroceryItem item = new WeighedGroceryItem("bananas", 2.38M);

            WeighedGroceryItemOrderFactory factory =
                new WeighedGroceryItemOrderFactory(5);

            IGroceryItemOrder order = factory.CreateOrder(item);

            Assert.IsTrue(order is WeighedGroceryItemOrder);
            WeighedGroceryItemOrder weighedOrder = ((WeighedGroceryItemOrder)order);

            Assert.AreEqual(item, weighedOrder.Item);
            Assert.AreEqual(5, weighedOrder.Weight);
        }
        public void CreateOrder_CreatesOrderWithNoWeight_IfIsIWeighedGroceryItem()
        {
            WeighedGroceryItem item = new WeighedGroceryItem("bananas", 2.38M);

            WeighedGroceryItemOrderFactory factory =
                new WeighedGroceryItemOrderFactory();

            IGroceryItemOrder order = factory.CreateOrder(item);

            Assert.IsTrue(order is WeighedGroceryItemOrder);
            WeighedGroceryItemOrder weighedOrder = ((WeighedGroceryItemOrder)order);

            Assert.AreEqual(item, weighedOrder.Item);
            Assert.AreEqual(0.0M, weighedOrder.Weight);
        }
        public void CreateOrder_GetsWeightFromWeightSelector_WhenFactoryCreatedWithWeightSelector()
        {
            WeighedGroceryItem item = new WeighedGroceryItem("bananas", 2.38M);

            Mock <IWeightSelector> weightSelectorMock = new Mock <IWeightSelector>();

            weightSelectorMock.Setup(ws => ws.SelectWeight(item)).Returns(9.2M);

            WeighedGroceryItemOrderFactory factory =
                new WeighedGroceryItemOrderFactory(weightSelectorMock.Object);

            IGroceryItemOrder order = factory.CreateOrder(item);

            Assert.IsTrue(order is WeighedGroceryItemOrder);
            WeighedGroceryItemOrder weighedOrder = ((WeighedGroceryItemOrder)order);

            Assert.AreEqual(item, weighedOrder.Item);
            Assert.AreEqual(9.2M, weighedOrder.Weight);
        }
Exemple #14
0
        public void RemovingWeighedOrder_InvalidatesSpecial()
        {
            WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.00M)
            {
                Special = new BuyNGetUpToMDiscountedWeighedGroceryItemSpecial(3.00M, 50M)
            };

            CheckoutCart cart = new CheckoutCart();

            for (int i = 0; i < 4; i++)
            {
                cart.Orders.Add(new WeighedGroceryItemOrder(bananas, 1));
            }

            // first 3 are full price ($2 per unit)
            // last is 50% off, $1
            Assert.AreEqual(7.00M, cart.TotalPrice);
            cart.Orders.Remove(cart.Orders.Last());
            Assert.AreEqual(6.00M, cart.TotalPrice);
        }
        public void CreateOrder_CreatesOrderFromOrderFactory()
        {
            WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.38M);

            IGroceryItemOrder bananasOrder =
                new WeighedGroceryItemOrder(bananas, 0.0M);
            Mock <IGroceryItemOrderFactory> orderFactoryMock =
                new Mock <IGroceryItemOrderFactory>();

            orderFactoryMock.Setup(of => of.CreateOrder(bananas))
            .Returns(bananasOrder);

            GroceryItemScanner scanner = new GroceryItemScanner(orderFactoryMock.Object);

            scanner.Items.Add(bananas);

            IGroceryItemOrder orderResult = scanner.CreateOrder("bananas");

            Assert.AreEqual(bananasOrder, orderResult);
        }
        public void CreateOrder_GetsWeightFromWeightSelector()
        {
            decimal expectedWeight = 1.56M;

            string             itemName = "bananas";
            WeighedGroceryItem bananas  = new WeighedGroceryItem(itemName, 2.38M);

            Mock <IWeightSelector> weightSelectorMock = new Mock <IWeightSelector>();

            weightSelectorMock.Setup((ws) => ws.SelectWeight(bananas)).Returns(expectedWeight);

            IGroceryItemOrderFactory orderFactory = new AggregateGroceryItemOrderFactory(
                new EachesGroceryItemOrderFactory(),
                new WeighedGroceryItemOrderFactory(weightSelectorMock.Object)
                );

            GroceryItemScanner scanner = new GroceryItemScanner(orderFactory);

            scanner.Items.Add(bananas);

            WeighedGroceryItemOrder bananaOrder = (WeighedGroceryItemOrder)scanner.CreateOrder(itemName);

            Assert.AreEqual(expectedWeight, bananaOrder.Weight);
        }
Exemple #17
0
        public void CalculatePurchasePrice_UsesOriginalPrice_IfNoMarkdownOrSpecialWasSet()
        {
            WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.00M);

            Assert.AreEqual(5.00M, bananas.CalculatePurchasePrice(2.5M));
        }