public void BuyWithCashTestWrongPrice()
        {
            //init
            var commandMock = new Mock <ICommandBus>();
            var queryMock   = new Mock <IQueryProcessor>();

            const decimal wrongPrice   = 12.2m;
            const decimal correctPrice = 13.2m;

            queryMock.Setup(processor =>
                            processor.ProcessQuery <GetPriceByFlavour, GetPriceByFlavourResponse>(
                                It.Is <GetPriceByFlavour>(byFlavour =>
                                                          byFlavour.Flavour == "f1")))
            .Returns(() =>
                     new GetPriceByFlavourResponse(correctPrice))
            .Verifiable();

            var paymentController = new PaymentController(commandMock.Object, queryMock.Object);
            var buy = new CanItemDto("f1", 1, wrongPrice);

            //act
            paymentController.BuyWithCash(buy);

            //verify
            commandMock.Verify(bus =>
                               bus.Send(It.Is <CashPayment>(payment =>
                                                            payment.AmountToPay == wrongPrice)),
                               Times.Never);

            commandMock.Verify(bus =>
                               bus.Send(It.Is <EjectCan>(stock =>
                                                         stock.Flavour == buy.Flavour)),
                               Times.Never);
        }
        private bool GetPrice(CanItemDto can, out decimal?price)
        {
            price = _queryProcessor
                    .ProcessQuery <GetPriceByFlavour, GetPriceByFlavourResponse>(new GetPriceByFlavour(can.Flavour)).Price;

            return(!price.HasValue);
        }
        public void BuyWithCredit([FromBody] CanItemDto can)
        {
            if (GetPrice(can, out var price))
            {
                return;
            }

            Debug.Assert(price != null, nameof(price) + " != null");

            _commandBus.Send(new CreditCardPayment(price.Value));
            _commandBus.Send(new EjectCan(can.Flavour));
        }
Пример #4
0
        public void AddStockTest()
        {
            var commandMock = new Mock <ICommandBus>();
            var queryMock   = new Mock <IQueryProcessor>();

            var vendingController = new VendingController(commandMock.Object, queryMock.Object);
            var add = new CanItemDto("f1", 1, 1);

            vendingController.AddStock(add);

            commandMock.Verify(bus =>
                               bus.Send(It.Is <AddStock>(stock =>
                                                         stock.Flavour == add.Flavour &&
                                                         stock.Price == add.Price &&
                                                         stock.Quantity == add.Quantity)),
                               Times.Once);
        }
Пример #5
0
 public void AddStock([FromBody] CanItemDto can)
 {
     _commandBus.Send(new AddStock(can.Flavour, can.Quantity, can.Price));
 }