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 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);
        }