public void AddItemsToCheckout_IfCheckoutExists_ShouldAddItemsToExistingCheckout() { // arrange Mock <IItemOrchestrator> mockItem = new Mock <IItemOrchestrator>(); mockItem.Setup(mock => mock.GetItem(It.IsAny <string>())).Returns(new Item { SKU = "A99", Price = 0.50m }); var orchestrator = new CheckoutOrchestrator(mockItem.Object, new Mock <IOfferOrchestrator>().Object, new Mock <DiscountOrchestrator>().Object); orchestrator._listCheckout = new List <Checkout> { new Checkout { Id = checkoutId, Items = new List <Item> { new Item { Price = 0.50m, SKU = "A99" } } } }; //act var itemAdded = orchestrator.ScanItem("A99", checkoutId); //assert itemAdded.Should().BeTrue(); }
public void GetTotalPrice_IfOfferExists_ShouldApplyDiscount() { // arrange var offerMock = new Mock <IOfferOrchestrator>(); offerMock.Setup(mock => mock.GetOffer("B15")) .Returns(new ItemOffer { OfferPrice = 0.45m, Quantity = 2, SKU = "B15" }); offerMock.Setup(mock => mock.GetOffer("A99")) .Returns(new ItemOffer { OfferPrice = 1.30m, Quantity = 3, SKU = "A99" }); var orchestrator = new CheckoutOrchestrator(new Mock <ItemOrchestrator>().Object, offerMock.Object, new Mock <DiscountOrchestrator>().Object); var expected = 4.05m; orchestrator._listCheckout = new List <Checkout>() { checkoutItems }; //act var actual = orchestrator.GetTotalPriceWithDiscount(checkoutId); //assert actual.Should().Be(expected); }
public void AddItemsToCheckout_IfSkuNullOrEmpty_ShouldThrowArgumentNullException() { // arrange var orchestrator = new CheckoutOrchestrator(new Mock <ItemOrchestrator>().Object, new Mock <IOfferOrchestrator>().Object, new Mock <DiscountOrchestrator>().Object); //act Func <bool> action = () => { return(orchestrator.ScanItem(null, checkoutId)); }; //assert action.Should().Throw <ArgumentNullException>(); }
public void CalculateDiscount_IfNoOfferFound_ShouldNotCalculateDiscount() { // arrange var orchestrator = new CheckoutOrchestrator(new Mock <ItemOrchestrator>().Object, new Mock <IOfferOrchestrator>().Object, new Mock <DiscountOrchestrator>().Object); var sku = "B15"; var expected = 0.0m; //act var actual = orchestrator.CalculateDiscount(sku); //assert actual.Should().Be(expected); }
public void CalculateDiscount_IfSKUEmptyOrNull_ShouldThrowArgumentNullException() { // arrange var orchestrator = new CheckoutOrchestrator(new Mock <ItemOrchestrator>().Object, new Mock <IOfferOrchestrator>().Object, new Mock <DiscountOrchestrator>().Object); //act Func <decimal> action = () => { return(orchestrator.CalculateDiscount(null)); }; //assert action.Should().Throw <ArgumentNullException>(); }
public void AddItemsToCheckout_IfCheckoutNotFoundAddItem_ShouldCreateNewCheckout() { // arrange Mock <IItemOrchestrator> mockItem = new Mock <IItemOrchestrator>(); mockItem.Setup(mock => mock.GetItem(It.IsAny <string>())).Returns(new Item { SKU = "A99", Price = 0.50m }); var orchestrator = new CheckoutOrchestrator(mockItem.Object, new Mock <IOfferOrchestrator>().Object, new Mock <DiscountOrchestrator>().Object); //act var itemAdded = orchestrator.ScanItem("A99", Guid.NewGuid()); //assert itemAdded.Should().BeTrue(); }
public void GetTotalPrice_ShouldReturnTotalPriceWithoutDiscount() { // arrange var orchestrator = new CheckoutOrchestrator(new Mock <ItemOrchestrator>().Object, new Mock <IOfferOrchestrator>().Object, new Mock <DiscountOrchestrator>().Object); var expected = checkoutItems.Items.Sum(p => p.Price); orchestrator._listCheckout = new List <Checkout>() { checkoutItems }; //act var actual = orchestrator.GetTotalPrice(checkoutId); //assert actual.Should().Be(expected); }
public void CalculateDiscount_IfOfferFound_ShouldCalculateDiscount() { // arrange var offerMock = new Mock <IOfferOrchestrator>(); offerMock.Setup(mock => mock.GetOffer("B15")) .Returns(new ItemOffer { OfferPrice = 0.45m, Quantity = 2, SKU = "B15" }); var orchestrator = new CheckoutOrchestrator(new Mock <ItemOrchestrator>().Object, offerMock.Object, new Mock <DiscountOrchestrator>().Object); var sku = "B15"; var expected = 0.45m; orchestrator._listCheckout = new List <Checkout>() { checkoutItems }; //act var actual = orchestrator.CalculateDiscount(sku); //assert actual.Should().Be(expected); }