public void PurchasePrice_UsesOriginalPrice_WhenNoMarkdown() { decimal expectedPrice = 2.38M; WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", expectedPrice); Assert.AreEqual(expectedPrice, bananas.PurchasePrice); }
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); }
public void CalculatePurchasePrice_UsesPurchasePrice_IfMarkdownIsSetButSpecialIsNotSet() { WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.00M) { Markdown = new PriceMarkdownStub(1.50M) }; Assert.AreEqual(7.50M, bananas.CalculatePurchasePrice(5)); }
public void CalculatePurchasePrice_AppliesSpecial_IfSpecialIsSet() { WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.00M) { Special = new WeighedGroceryItemSpecialFake(1.50M) }; Assert.AreEqual(7.50M, bananas.CalculatePurchasePrice(5)); }
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); }
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); }
public void CalculatePurchasePrice_UsesOriginalPrice_IfNoMarkdownOrSpecialWasSet() { WeighedGroceryItem bananas = new WeighedGroceryItem("bananas", 2.00M); Assert.AreEqual(5.00M, bananas.CalculatePurchasePrice(2.5M)); }