public void ShouldSendRemainderAboutFutureMessage()
        {
            var publisherMock = new Mock <IPublisher>();
            var regularMidget = new RegularMidget(publisherMock.Object);

            regularMidget.Handle(new OrderPlaced(new Order(), "cu"));

            publisherMock.Verify(p => p.Publish(It.IsAny <FutureMessage>()));
        }
        public void ShouldPublish_TakePayment_When_OrderPriced_Received()
        {
            var publisherMock = new Mock <IPublisher>();
            var midget        = new RegularMidget(publisherMock.Object);

            midget.Handle(new OrderPriced(new Order(), string.Empty));

            publisherMock.Verify(p => p.Publish(It.IsAny <TakePayment>()));
        }
        public void ShouldNotPassDoubleMessage()
        {
            var publisherMock = new Mock <IPublisher>();
            var midget        = new RegularMidget(publisherMock.Object);

            midget.Handle(new OrderPriced(new Order(), string.Empty));
            midget.Handle(new OrderPriced(new Order(), string.Empty));

            publisherMock.Verify(p => p.Publish(It.IsAny <TakePayment>()), Times.Once);
        }
        public void ShouldCleanUp_When_OrderPaid_Received()
        {
            var publisherMock = new Mock <IPublisher>();
            var midget        = new RegularMidget(publisherMock.Object)
            {
                CleanUp = corrId => corrId.SequenceEqual("corrId")
            };

            midget.Handle(new OrderPaid(new Order(), "corrId"));
        }
        public void ShouldNotReTryCookFoodMessage()
        {
            var           publisherMock = new Mock <IPublisher>();
            FutureMessage msg           = null;

            publisherMock.Setup(x => x.Publish(It.IsAny <FutureMessage>()))
            .Callback <FutureMessage>(r => msg = r);

            var regularMidget = new RegularMidget(publisherMock.Object);

            var msgToDeliver = new CookFood(new Order(), "cu");

            regularMidget.Handle(new OrderCooked(new Order(), string.Empty));
            regularMidget.Handle(new FutureMessage(msgToDeliver, DateTime.MaxValue));

            publisherMock.Verify(p => p.Publish(It.IsAny <FutureMessage>()), Times.Never);
            publisherMock.Verify(p => p.Publish(It.IsAny <CookFood>()), Times.Never);
            publisherMock.Verify(p => p.Publish(It.IsAny <PriceOrdered>()));
        }
        public void ShouldReTryCookFoodMessage()
        {
            var           publisherMock = new Mock <IPublisher>();
            FutureMessage msg           = null;

            publisherMock.Setup(x => x.Publish(It.IsAny <FutureMessage>()))
            .Callback <FutureMessage>(r => msg = r);


            var regularMidget = new RegularMidget(publisherMock.Object);

            var msgToDeliver = new CookFood(new Order(), "cu");

            regularMidget.Handle(new FutureMessage(msgToDeliver, DateTime.MaxValue));

            publisherMock.Verify(p => p.Publish(It.IsAny <FutureMessage>()));
            publisherMock.Verify(p => p.Publish(It.IsAny <CookFood>()));

            msg.MessageToDeliver.MessageId
            .ShouldEqual(msgToDeliver.MessageId);
        }