public void SendSmsAsyncShouldPutCommandOnBus()
        {
            const string smsRecipient = "*****@*****.**";
            const string smsMesssage = "test message body";

            var bus = MockIMediator();
            var messageSender = new AuthMessageSender(bus.Object);
            messageSender.SendSmsAsync(smsRecipient, smsMesssage);
            bus.Verify(mock => mock.Send(It.IsAny<IRequest>()), Times.Exactly(1));
        }
        public void SendEmailAsyncShouldPutCommandOnBus()
        {
            const string emailRecipient = "*****@*****.**";
            const string emailSubject = "test subject";
            const string emailMessage = "test message body";

            var bus = MockIMediator();
            var messageSender = new AuthMessageSender(bus.Object);
            messageSender.SendEmailAsync(emailRecipient, emailSubject, emailMessage);
            bus.Verify(mock => mock.Send(It.IsAny<IRequest>()), Times.Exactly(1));
        }
        public void SendSmsAsyncShouldPutCommandOnBus()
        {
            const string smsRecipient = "*****@*****.**";
            const string smsMesssage = "test message body";

            var bus = MockIMediator();
            var messageSender = new AuthMessageSender(bus.Object);
            messageSender.SendSmsAsync(smsRecipient, smsMesssage);
            bus.Verify(mock => mock.Send(
                It.Is<NotifyVolunteersCommand>(request =>
                request.ViewModel.SmsMessage == smsMesssage
                && request.ViewModel.SmsRecipients.SequenceEqual(new List<string> {smsRecipient}))),
                Times.Exactly(1));
        }
        public async Task InvokeSendSmsAsyncWithTheCorrectQueueNameAndMessage()
        {
            const string phoneNumber = "*****@*****.**";
            const string smsMesssage = "test message body";

            var mediator = MockIMediator();
            var queueStorageService = new Mock<IQueueStorageService>();

            var messageSender = new AuthMessageSender(mediator.Object, queueStorageService.Object);
            await messageSender.SendSmsAsync(phoneNumber, smsMesssage);

            queueStorageService.Verify(x => x.SendMessageAsync(QueueStorageService.Queues.SmsQueue, 
                @"{""Recipient"":""*****@*****.**"",""Message"":""test message body""}"));
        }
        public void SendEmailAsyncShouldPutCommandOnBus()
        {
            const string emailRecipient = "*****@*****.**";
            const string emailSubject = "test subject";
            const string emailMessage = "test message body";

            var bus = MockIMediator();
            var messageSender = new AuthMessageSender(bus.Object);
            messageSender.SendEmailAsync(emailRecipient, emailSubject, emailMessage);

            bus.Verify(mock => mock.Send(
                It.Is<NotifyVolunteersCommand>(request =>
                request.ViewModel.EmailMessage == emailMessage
                && request.ViewModel.EmailRecipients.SequenceEqual(new List<string> {emailRecipient})
                && request.ViewModel.HtmlMessage == emailMessage
                && request.ViewModel.Subject == emailSubject)),
                Times.Exactly(1));
        }
        public async Task SendNotifyVolunteersCommandWhenInvokingSendEmailAsync()
        {
            const string emailRecipient = "*****@*****.**";
            const string emailSubject = "test subject";
            const string emailMessage = "test message body";

            var mediator = MockIMediator();
            var messageSender = new AuthMessageSender(mediator.Object, Mock.Of<IQueueStorageService>());
            await messageSender.SendEmailAsync(emailRecipient, emailSubject, emailMessage);

            mediator.Verify(mock => mock.SendAsync(
                It.Is<NotifyVolunteersCommand>(request =>
                request.ViewModel.EmailMessage == emailMessage
                && request.ViewModel.EmailRecipients.SequenceEqual(new List<string> { emailRecipient })
                && request.ViewModel.HtmlMessage == emailMessage
                && request.ViewModel.Subject == emailSubject)),
                Times.Exactly(1));
        }