public async void Handle_WithNewStatusAssignedInMessage_UpdatesRequest()
        {
            var query = new ChangeRequestStatusCommand
            {
                RequestId = _existingRequestId2,
                NewStatus = RequestStatus.Assigned
            };

            var handler = new ChangeRequestStatusCommandHandler(Context);

            var result = await handler.Handle(query);

            var requestToValidate = Context.Requests.First(rec => rec.RequestId == _existingRequestId2);

            requestToValidate.Status.ShouldBe(RequestStatus.Assigned);
            result.ShouldBeTrue();
        }
        public async void UpdateTheRequestWithTheCorrectStatus()
        {
            var request = new Request {
                RequestId = Guid.NewGuid(), Status = RequestStatus.Unassigned
            };

            Context.Requests.Add(request);
            Context.SaveChanges();

            var message = new ChangeRequestStatusCommand {
                RequestId = request.RequestId, NewStatus = RequestStatus.Assigned
            };

            var sut = new ChangeRequestStatusCommandHandler(Context, Mock.Of <IMediator>());
            await sut.Handle(message);

            var newStatus = Context.Requests.Single(x => x.RequestId == request.RequestId).Status;

            Assert.Equal(newStatus, request.Status);
        }
        public async Task Index_SendsChangeRequestStatusCommand_WithExpectedValues_WhenLowercaseRejectBodyPosted()
        {
            ChangeRequestStatusCommand cmd = null;

            var mediatr = new Mock <IMediator>();

            mediatr.Setup(x => x.SendAsync(It.IsAny <FindRequestIdByPhoneNumberQuery>()))
            .ReturnsAsync(RequestGuid);
            mediatr.Setup(x => x.SendAsync(It.IsAny <ChangeRequestStatusCommand>()))
            .Returns(Task.FromResult(Unit.Value))
            .Callback <ChangeRequestStatusCommand>(x => cmd = x)
            .Verifiable();

            var sut = new SmsResponseController(mediatr.Object, Mock.Of <ISmsSender>());
            await sut.Index(GoodPhoneNumber, LowercaseReject);

            mediatr.Verify(x => x.SendAsync(It.IsAny <ChangeRequestStatusCommand>()), Times.Once);
            cmd.RequestId.ShouldBe(RequestGuid);
            cmd.NewStatus.ShouldBe(RequestStatus.Unassigned);
        }
        public async void PublishRequestStatusChangedNotificationWithTheCorrectDataOnTheMessage()
        {
            const RequestStatus originalRequestStatus = RequestStatus.Unassigned;
            var originalRequest = new Request {
                RequestId = Guid.NewGuid(), Status = originalRequestStatus
            };

            Context.Requests.Add(originalRequest);
            Context.SaveChanges();

            var message = new ChangeRequestStatusCommand {
                RequestId = originalRequest.RequestId, NewStatus = RequestStatus.Assigned
            };

            var mediator = new Mock <IMediator>();

            var sut = new ChangeRequestStatusCommandHandler(Context, mediator.Object);
            await sut.Handle(message);

            mediator.Verify(x => x.PublishAsync(It.Is <RequestStatusChangedNotification>(y => y.RequestId == originalRequest.RequestId &&
                                                                                         y.OldStatus == originalRequestStatus &&
                                                                                         y.NewStatus == message.NewStatus)));
        }