public void NotSendSetRequstsToUnassignedCommand_WhenRequestIdsDoNotMatchExistingRequests()
        {
            var request = new Request {
                RequestId = Guid.NewGuid()
            };

            var mediator = new Mock <IMediator>();

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

            var sut = new SendRequestConfirmationMessagesTheDayOfAnItineraryDate(Context, Mock.Of <ISmsSender>(), mediator.Object);

            sut.SendSms(new List <Guid> {
                Guid.NewGuid()
            }, It.IsAny <int>());

            mediator.Verify(x => x.Send(It.IsAny <IRequest>()), Times.Never);
        }
        public void NotSendRequestConfirmations_WhenRequestIdsDoNotMatchExistingRequests()
        {
            var request = new Request {
                RequestId = Guid.NewGuid()
            };

            var smsSender = new Mock <ISmsSender>();

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

            var sut = new SendRequestConfirmationMessagesTheDayOfAnItineraryDate(Context, smsSender.Object, Mock.Of <IMediator>());

            sut.SendSms(new List <Guid> {
                Guid.NewGuid()
            }, It.IsAny <int>());

            smsSender.Verify(x => x.SendSmsAsync(It.IsAny <List <string> >(), It.IsAny <string>()), Times.Never);
        }
        public void SendRequestConfirmationsToTheCorrectPhoneNumberWithTheCorrectMessage_WhenRequestIdsMatchExistingRequests_AndThoseRequestsHaveAStatusOfPendingConfirmation_AndTodayIsTheSameDateAsTheItineraryDate()
        {
            var dateTimeNow            = DateTime.Today;
            var dateTimeNowUnspecified = DateTime.SpecifyKind(dateTimeNow, DateTimeKind.Unspecified);
            var dateTimeUtcNow         = DateTime.SpecifyKind(dateTimeNow, DateTimeKind.Utc);

            var requestorPhoneNumbers = new List <string> {
                "111-111-1111"
            };

            var @event = new Event {
                Id = 1, TimeZoneId = "Eastern Standard Time"
            };
            var itinerary = new Itinerary {
                Id = 1, Date = dateTimeNowUnspecified.Date, EventId = @event.Id, Event = @event
            };
            var request = new Request {
                RequestId = Guid.NewGuid(), Status = RequestStatus.PendingConfirmation, Phone = requestorPhoneNumbers[0]
            };

            var requestIds = new List <Guid> {
                request.RequestId
            };
            var smsSender = new Mock <ISmsSender>();

            Context.Requests.Add(request);
            Context.Itineraries.Add(itinerary);
            Context.Events.Add(@event);
            Context.SaveChanges();

            var sut = new SendRequestConfirmationMessagesTheDayOfAnItineraryDate(Context, smsSender.Object, Mock.Of <IMediator>())
            {
                DateTimeUtcNow = () => dateTimeUtcNow.Date
            };

            sut.SendSms(requestIds, itinerary.Id);

            smsSender.Verify(x => x.SendSmsAsync(requestorPhoneNumbers, "sorry you couldn't make it, we will reschedule."));
        }