Example #1
0
        public SendSmsCommandHandlerWithDelayHandlerTests()
        {
            var mockQueueClientFactory = new Mock <IQueueClientFactory>();

            _mockHandler        = new Mock <ICommandHandlerAsync <SendSmsCommand> >();
            _mockQueueClient    = new Mock <IQueueClient>();
            _mockLogger         = new Mock <ILogger>();
            _mockLoggerFactory  = new Mock <ILoggerFactory>();
            _mockSettingService = new Mock <ISettingService>();

            _testQueueMessage = new Message();
            _testOutgoingSms  = new OutgoingSmsBuilder();
            _maxRetryAttempts = 3;
            _retryDelayMs     = 1000;

            _mockSettingService
            .Setup(m => m.GetInt("MaxRetryAttempts"))
            .Returns(_maxRetryAttempts);

            _mockSettingService
            .Setup(m => m.GetInt("RetryDelayMs"))
            .Returns(_retryDelayMs);

            _mockLoggerFactory
            .Setup(m => m.CreateLogger(It.IsAny <string>()))
            .Returns(_mockLogger.Object);

            mockQueueClientFactory.Setup(mock => mock.Create <SmsOutgoingMessage>()).Returns(_mockQueueClient.Object);

            _sut = new SendSmsCommandHandlerWithDelayHandler(
                _mockHandler.Object,
                mockQueueClientFactory.Object,
                _mockLoggerFactory.Object,
                _mockSettingService.Object);
        }
        /// <inheritdoc />
        /// <summary>
        /// Adds a message on to the Azure Storage Queue, ready for processing </summary>
        /// <param name="context"> The <see cref="T:Microsoft.Bot.Builder.ITurnContext" /> of the conversation turn/&gt; </param>
        /// <param name="activity"> The <see cref="T:Microsoft.Bot.Schema.Activity" /> that will be used for the queue message </param>
        /// <returns> The <see cref="T:System.Threading.Tasks.Task" />. </returns>
        public async Task EnqueueMessageAsync(ITurnContext context, Activity activity)
        {
            CloudQueue messageQueue = this.queueClient.GetQueueReference(this.notifyConfig.OutgoingMessageQueueName);
            await messageQueue.CreateIfNotExistsAsync();

            OutgoingSms sms = new OutgoingSms
            {
                From = new Participant {
                    UserId = context.Activity.From.Id
                },
                Recipient = new Participant {
                    UserId = context.Activity.Recipient.Id
                },
                Conversation = new BotConversation {
                    ConversationId = context.Activity.Conversation.Id
                },
                ChannelData = context.Activity.ChannelData,
                ChannelId   = context.Activity.ChannelId,
                Time        = DateTime.Now.ToString(CultureInfo.InvariantCulture),
                Message     = activity.Text,
            };

            CloudQueueMessage message = new CloudQueueMessage(JsonConvert.SerializeObject(sms));
            await messageQueue.AddMessageAsync(message);
        }
Example #3
0
        public async Task EnqueueMessageAsync(ITurnContext context, Activity activity)
        {
            var turnProperty = feedbackBotStateRepository.ConversationState.CreateProperty <long>("turnId");
            var turnId       = await turnProperty.GetAsync(context, () => - 1);

            OutgoingSms sms = new OutgoingSms
            {
                From = new Participant {
                    UserId = context.Activity.From.Id
                },
                Recipient = new Participant {
                    UserId = context.Activity.Recipient.Id
                },
                Conversation = new BotConversation
                {
                    ConversationId = context.Activity.Conversation.Id,
                    UserId         = context.Activity.From.Id,
                    ActivityId     = activity.Id,
                    TurnId         = turnId
                },
                ChannelData = context.Activity.ChannelData,
                ChannelId   = context.Activity.ChannelId,
                Time        = DateTime.Now.ToString(CultureInfo.InvariantCulture),
                Message     = activity.Text,
            };

            var message = new SmsOutgoingMessage(sms);

            await this.smsQueueProvider.SendAsync(activity.Conversation.Id, message, this.notifyConfig.OutgoingMessageQueueName);
        }
Example #4
0
        public SendSmsCommandHandlerWithOrderCheckTests()
        {
            _mockHandler = new Mock <ICommandHandlerAsync <SendSmsCommand> >();
            _mockConversationRepository = new Mock <IConversationRepository>();

            _testQueueMessage = new Message();
            _testOutgoingSms  = new OutgoingSmsBuilder();

            _sut = new SendSmsCommandHandlerWithOrderCheck(
                _mockHandler.Object,
                _mockConversationRepository.Object);
        }
            public async Task WhenCalledAndtheTurnIdIsNotSet_ThenTheTurnIdIsSetToMinusOne()
            {
                // arrange
                OutgoingSms sentSms = null;

                _mockSmsQueueProvider
                .Setup(m => m.SendAsync(_testActivity.Conversation.Id, It.IsAny <Message>(), _testOutgoingQueueName))
                .Callback <string, Message, string>((conversationId, message, queueName) =>
                {
                    sentSms = JsonConvert.DeserializeObject <OutgoingSms>(Encoding.UTF8.GetString(message.Body));
                })
                .Returns(Task.CompletedTask);

                // act
                await _sut.EnqueueMessageAsync(_mockTurnContext.Object, _testActivity);

                //assert
                Assert.Equal(-1, sentSms.Conversation.TurnId);
            }
        public SendSmsCommandHandlerTests()
        {
            _mockConversationRepository = new Mock <IConversationRepository>();
            _mockNotificationClient     = new Mock <INotificationClient>();
            _mockSettingService         = new Mock <ISettingService>();

            _testQueueMessage = new Message();
            _testOutgoingSms  = new OutgoingSms();

            _testNotifyTemplateId  = Guid.NewGuid().ToString();
            _testNotifySmsSenderId = Guid.NewGuid().ToString();

            _mockSettingService
            .Setup(m => m.Get("NotifyTemplateId"))
            .Returns(_testNotifyTemplateId);

            _mockSettingService
            .Setup(m => m.Get("NotifySmsSenderId"))
            .Returns(_testNotifySmsSenderId);

            _sut = new SendSmsCommandHandler(_mockConversationRepository.Object, _mockNotificationClient.Object, _mockSettingService.Object);
        }
        public Task EnqueueMessageAsync(ITurnContext context, Activity activity)
        {
            OutgoingSms sms = new OutgoingSms
            {
                From = new Participant {
                    UserId = context.Activity.From.Id
                },
                Recipient = new Participant {
                    UserId = context.Activity.Recipient.Id
                },
                Conversation = new BotConversation {
                    ConversationId = context.Activity.Conversation.Id
                },
                ChannelData = context.Activity.ChannelData,
                ChannelId   = context.Activity.ChannelId,
                Time        = DateTime.Now.ToString(CultureInfo.InvariantCulture),
                Message     = activity.Text,
            };

            var message = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(sms)));

            return(queueClient.SendAsync(message));
        }
 public SmsOutgoingMessage(OutgoingSms trigger) : base(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(trigger)))
 {
 }
 public SendSmsCommand(OutgoingSms message, Message queueMessage)
 {
     Message      = message ?? throw new ArgumentNullException(nameof(message));
     QueueMessage = queueMessage ?? throw new ArgumentNullException(nameof(queueMessage));
 }