public async void SendActivitiesAsync_Should_Succeed()
        {
            // Setup mocked ITwilioAdapterOptions
            var options = new TwilioAdapterOptions("Test", "Test", "Test", "Test");

            // Setup mocked Activity and get the message option
            var activity = new Mock <Activity>().SetupAllProperties();

            activity.Object.Type        = "message";
            activity.Object.Attachments = new List <Attachment> {
                new Attachment(contentUrl: "http://example.com")
            };
            activity.Object.Conversation = new ConversationAccount(id: "MockId");
            activity.Object.Text         = "Hello, Bot!";
            var messageOption = TwilioHelper.ActivityToTwilio(activity.Object, "123456789");

            // Setup mocked Twilio API client
            const string resourceIdentifier = "Mocked Resource Identifier";
            var          twilioApi          = new Mock <TwilioClientWrapper>();

            twilioApi.Setup(x => x.SendMessage(It.IsAny <CreateMessageOptions>())).Returns(Task.FromResult(resourceIdentifier));

            // Create a new Twilio Adapter with the mocked classes and get the responses
            var twilioAdapter     = new TwilioAdapter(options, twilioApi.Object);
            var resourceResponses = await twilioAdapter.SendActivitiesAsync(null, new Activity[] { activity.Object }, default).ConfigureAwait(false);

            // Assert the result
            Assert.True(resourceResponses[0].Id == resourceIdentifier);
        }
        public async void ContinueConversationAsyncShouldFailWithNullLogic()
        {
            var twilioAdapter         = new TwilioAdapter(new Mock <TwilioClientWrapper>(_testOptions).Object, _adapterOptions);
            var conversationReference = new ConversationReference();

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await twilioAdapter.ContinueConversationAsync(conversationReference, null, default); });
        }
        public async void ProcessAsyncShouldSucceedWithHttpBody()
        {
            var payload       = File.ReadAllText(PathUtils.NormalizePath(Directory.GetCurrentDirectory() + @"/Files/NoMediaPayload.txt"));
            var stream        = new MemoryStream(Encoding.UTF8.GetBytes(payload.ToString()));
            var twilioApi     = new Mock <TwilioClientWrapper>(_testOptions);
            var twilioAdapter = new TwilioAdapter(twilioApi.Object, _adapterOptions);
            var httpRequest   = new Mock <HttpRequest>();
            var httpResponse  = new Mock <HttpResponse>();
            var bot           = new Mock <IBot>();

            httpRequest.SetupGet(req => req.Body).Returns(stream);

            twilioApi.SetupAllProperties();
            twilioApi.Setup(x => x.ValidateSignature(It.IsAny <HttpRequest>(), It.IsAny <Dictionary <string, string> >())).Returns(true);

            bot.SetupAllProperties();
            httpResponse.Setup(res => res.Body.WriteAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback((byte[] data, int offset, int length, CancellationToken token) =>
            {
                if (length > 0)
                {
                    var actual = Encoding.UTF8.GetString(data);
                }
            });

            await twilioAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, bot.Object, default);

            bot.Verify(b => b.OnTurnAsync(It.IsAny <TurnContext>(), It.IsAny <CancellationToken>()), Times.Once);
        }
        public async void ContinueConversationAsync_Should_Fail_With_Null_Logic()
        {
            var options = new TwilioAdapterOptions("Test", "Test", "Test", "Test");

            var twilioAdapter         = new TwilioAdapter(options, new Mock <TwilioClientWrapper>().Object);
            var conversationReference = new ConversationReference();

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await twilioAdapter.ContinueConversationAsync(conversationReference, null, default); });
        }
        public async void UpdateActivityAsync_Should_Throw_NotSupportedException()
        {
            var options = new TwilioAdapterOptions("Test", "Test", "Test", "Test");

            var twilioAdapter = new TwilioAdapter(options, new Mock <TwilioClientWrapper>().Object);
            var activity      = new Activity();
            var turnContext   = new TurnContext(twilioAdapter, activity);

            await Assert.ThrowsAsync <NotSupportedException>(async() => { await twilioAdapter.UpdateActivityAsync(turnContext, activity, default); });
        }
        public async void DeleteActivityAsync_Should_Throw_NotSupportedException()
        {
            var options = new TwilioAdapterOptions("Test", "Test", "Test", new Uri("http://contoso.com"));

            var twilioAdapter         = new TwilioAdapter(options, new Mock <TwilioClientWrapper>().Object);
            var activity              = new Activity();
            var turnContext           = new TurnContext(twilioAdapter, activity);
            var conversationReference = new ConversationReference();

            await Assert.ThrowsAsync <NotSupportedException>(async() => { await twilioAdapter.DeleteActivityAsync(turnContext, conversationReference, default); });
        }
        public async void ProcessAsyncShouldFailWithNullBot()
        {
            var twilioAdapter = new TwilioAdapter(new Mock <TwilioClientWrapper>(_testOptions).Object, _adapterOptions);
            var httpRequest   = new Mock <HttpRequest>();
            var httpResponse  = new Mock <HttpResponse>();

            await Assert.ThrowsAsync <ArgumentNullException>(async() =>
            {
                await twilioAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, null, default);
            });
        }
        public async void ContinueConversationAsyncShouldFailWithNullConversationReference()
        {
            var twilioAdapter = new TwilioAdapter(new Mock <TwilioClientWrapper>(_testOptions).Object, _adapterOptions);

            Task BotsLogic(ITurnContext turnContext, CancellationToken cancellationToken)
            {
                return(Task.CompletedTask);
            }

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await twilioAdapter.ContinueConversationAsync(null, BotsLogic, default); });
        }
        public async void ContinueConversationAsync_Should_Fail_With_Null_ConversationReference()
        {
            var options = new TwilioAdapterOptions("Test", "Test", "Test", "Test");

            var twilioAdapter = new TwilioAdapter(options, new Mock <TwilioClientWrapper>().Object);

            Task BotsLogic(ITurnContext turnContext, CancellationToken cancellationToken)
            {
                return(Task.CompletedTask);
            }

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await twilioAdapter.ContinueConversationAsync(null, BotsLogic, default); });
        }
        public async void ProcessAsync_Should_Fail_With_Null_HttpResponse()
        {
            var options = new TwilioAdapterOptions("Test", "Test", "Test", "Test");

            var twilioAdapter = new TwilioAdapter(options, new Mock <TwilioClientWrapper>().Object);
            var httpRequest   = new Mock <HttpRequest>();
            var bot           = new Mock <IBot>();

            await Assert.ThrowsAsync <ArgumentNullException>(async() =>
            {
                await twilioAdapter.ProcessAsync(httpRequest.Object, null, default(IBot), default(CancellationToken));
            });
        }
        public async void UpdateActivityAsyncShouldThrowNotSupportedException()
        {
            var twilioAdapter = new TwilioAdapter(new Mock <TwilioClientWrapper>(_testOptions).Object, _adapterOptions);
            var activity      = new Activity();

            using (var turnContext = new TurnContext(twilioAdapter, activity))
            {
                await Assert.ThrowsAsync <NotSupportedException>(async() =>
                {
                    await twilioAdapter.UpdateActivityAsync(turnContext, activity, default);
                });
            }
        }
Exemplo n.º 12
0
        public async void ContinueConversationAsync_Should_Fail_With_Null_Logic()
        {
            var options = new Mock <ITwilioAdapterOptions>();

            options.SetupAllProperties();
            options.Object.AuthToken    = "Test";
            options.Object.TwilioNumber = "Test";
            options.Object.AccountSid   = "Test";

            var twilioAdapter         = new TwilioAdapter(options.Object, new Mock <ITwilioClient>().Object);
            var conversationReference = new ConversationReference();

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await twilioAdapter.ContinueConversationAsync(conversationReference, null, default); });
        }
Exemplo n.º 13
0
        public async void DeleteActivityAsyncShouldThrowNotSupportedException()
        {
            var twilioAdapter         = new TwilioAdapter(new Mock <TwilioClientWrapper>(_testOptions).Object);
            var activity              = new Activity();
            var conversationReference = new ConversationReference();

            using (var turnContext = new TurnContext(twilioAdapter, activity))
            {
                await Assert.ThrowsAsync <NotSupportedException>(async() =>
                {
                    await twilioAdapter.DeleteActivityAsync(turnContext, conversationReference, default);
                });
            }
        }
        public async void ProcessAsync_Should_Succeed_With_Null_HttpBody()
        {
            var options = new TwilioAdapterOptions("Test", "Test", "Test", "Test");

            var twilioAdapter = new TwilioAdapter(options, new Mock <TwilioClientWrapper>().Object);
            var httpRequest   = new Mock <HttpRequest>();
            var httpResponse  = new Mock <HttpResponse>();

            httpResponse
            .Setup(e => e.WriteAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Returns(Task.CompletedTask);

            await twilioAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, null, default(CancellationToken));
        }
Exemplo n.º 15
0
        public async void UpdateActivityAsync_Should_Throw_NotSupportedException()
        {
            var options = new Mock <ITwilioAdapterOptions>();

            options.SetupAllProperties();
            options.Object.AuthToken    = "Test";
            options.Object.TwilioNumber = "Test";
            options.Object.AccountSid   = "Test";

            var twilioAdapter = new TwilioAdapter(options.Object, new Mock <ITwilioClient>().Object);
            var activity      = new Activity();
            var turnContext   = new TurnContext(twilioAdapter, activity);

            await Assert.ThrowsAsync <NotSupportedException>(async() => { await twilioAdapter.UpdateActivityAsync(turnContext, activity, default); });
        }
Exemplo n.º 16
0
        public async void SendActivitiesAsyncShouldFailWithActivityTypeNotMessage()
        {
            var twilioAdapter = new TwilioAdapter(new Mock <TwilioClientWrapper>(_testOptions).Object);

            var activity = new Activity()
            {
                Type = ActivityTypes.Event,
            };

            Activity[] activities = { activity };

            await Assert.ThrowsAsync <ArgumentException>(async() =>
            {
                await twilioAdapter.SendActivitiesAsync(new TurnContext(twilioAdapter, activity), activities, default);
            });
        }
        public async void ContinueConversationAsyncShouldSucceed()
        {
            var callbackInvoked       = false;
            var twilioAdapter         = new TwilioAdapter(new Mock <TwilioClientWrapper>(_testOptions).Object, _adapterOptions);
            var conversationReference = new ConversationReference();

            Task BotsLogic(ITurnContext turnContext, CancellationToken cancellationToken)
            {
                callbackInvoked = true;
                return(Task.CompletedTask);
            }

            await twilioAdapter.ContinueConversationAsync(conversationReference, BotsLogic, default);

            Assert.True(callbackInvoked);
        }
        public async void SendActivitiesAsync_Should_Fail_With_ActivityType_Not_Message()
        {
            var options = new TwilioAdapterOptions("Test", "Test", "Test", "Test");

            var twilioAdapter = new TwilioAdapter(options, new Mock <TwilioClientWrapper>().Object);

            var activity = new Activity()
            {
                Type = ActivityTypes.Event,
            };

            Activity[] activities = { activity };

            await Assert.ThrowsAsync <ArgumentException>(async() =>
            {
                await twilioAdapter.SendActivitiesAsync(new TurnContext(twilioAdapter, activity), activities, default);
            });
        }
Exemplo n.º 19
0
        public async void ContinueConversationAsync_Should_Fail_With_Null_ConversationReference()
        {
            var options = new Mock <ITwilioAdapterOptions>();

            options.SetupAllProperties();
            options.Object.AuthToken    = "Test";
            options.Object.TwilioNumber = "Test";
            options.Object.AccountSid   = "Test";

            var twilioAdapter = new TwilioAdapter(options.Object, new Mock <ITwilioClient>().Object);

            Task BotsLogic(ITurnContext turnContext, CancellationToken cancellationToken)
            {
                return(Task.CompletedTask);
            }

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await twilioAdapter.ContinueConversationAsync(null, BotsLogic, default); });
        }
        public async void ContinueConversationAsync_Should_Succeed()
        {
            bool callbackInvoked = false;
            var  options         = new TwilioAdapterOptions("Test", "Test", "Test", new Uri("http://contoso.com"));

            var twilioAdapter         = new TwilioAdapter(options, new Mock <TwilioClientWrapper>().Object);
            var conversationReference = new ConversationReference();

            Task BotsLogic(ITurnContext turnContext, CancellationToken cancellationToken)
            {
                callbackInvoked = true;
                return(Task.CompletedTask);
            }

            await twilioAdapter.ContinueConversationAsync(conversationReference, BotsLogic, default);

            Assert.True(callbackInvoked);
        }
Exemplo n.º 21
0
        public async void ProcessAsync_Should_Fail_With_Null_Bot()
        {
            var options = new Mock <ITwilioAdapterOptions>();

            options.SetupAllProperties();
            options.Object.AuthToken    = "Test";
            options.Object.TwilioNumber = "Test";
            options.Object.AccountSid   = "Test";

            var twilioAdapter = new TwilioAdapter(options.Object, new Mock <ITwilioClient>().Object);
            var httpRequest   = new Mock <HttpRequest>();
            var httpResponse  = new Mock <HttpResponse>();

            await Assert.ThrowsAsync <ArgumentNullException>(async() =>
            {
                await twilioAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, null, default(CancellationToken));
            });
        }
Exemplo n.º 22
0
        public async void ProcessAsync_Should_Succeed_With_Null_HttpBody()
        {
            var options = new Mock <ITwilioAdapterOptions>();

            options.SetupAllProperties();
            options.Object.AuthToken    = "Test";
            options.Object.TwilioNumber = "Test";
            options.Object.AccountSid   = "Test";

            var twilioAdapter = new TwilioAdapter(options.Object, new Mock <ITwilioClient>().Object);
            var httpRequest   = new Mock <HttpRequest>();
            var httpResponse  = new Mock <HttpResponse>();

            httpResponse
            .Setup(e => e.WriteAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Returns(Task.CompletedTask);

            await twilioAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, null, default(CancellationToken));
        }
Exemplo n.º 23
0
        public async void SendActivitiesAsyncShouldSucceed()
        {
            var activity = new Mock <Activity>().SetupAllProperties();

            activity.Object.Type        = "message";
            activity.Object.Attachments = new List <Attachment> {
                new Attachment(contentUrl: "http://example.com")
            };
            activity.Object.Conversation = new ConversationAccount(id: "MockId");
            activity.Object.Text         = "Hello, Bot!";

            const string resourceIdentifier = "Mocked Resource Identifier";
            var          twilioApi          = new Mock <TwilioClientWrapper>(_testOptions);

            twilioApi.Setup(x => x.SendMessage(It.IsAny <CreateMessageOptions>())).Returns(Task.FromResult(resourceIdentifier));

            var twilioAdapter     = new TwilioAdapter(twilioApi.Object);
            var resourceResponses = await twilioAdapter.SendActivitiesAsync(null, new Activity[] { activity.Object }, default).ConfigureAwait(false);

            Assert.True(resourceResponses[0].Id == resourceIdentifier);
        }
        public async void SendActivitiesAsyncShouldSucceedAndNoActivityReturnedWithActivityTypeNotMessage()
        {
            var activity = new Mock <Activity>().SetupAllProperties();

            activity.Object.Type        = ActivityTypes.Trace;
            activity.Object.Attachments = new List <Attachment> {
                new Attachment(contentUrl: "http://example.com")
            };
            activity.Object.Conversation = new ConversationAccount(id: "MockId");
            activity.Object.Text         = "Trace content";

            const string resourceIdentifier = "Mocked Resource Identifier";
            var          twilioApi          = new Mock <TwilioClientWrapper>(_testOptions);

            twilioApi.Setup(x => x.SendMessageAsync(It.IsAny <TwilioMessageOptions>(), default)).Returns(Task.FromResult(resourceIdentifier));

            var twilioAdapter     = new TwilioAdapter(twilioApi.Object, _adapterOptions);
            var resourceResponses = await twilioAdapter.SendActivitiesAsync(null, new Activity[] { activity.Object }, default).ConfigureAwait(false);

            Assert.True(resourceResponses.Length == 0);
        }
Exemplo n.º 25
0
        public async void SendActivitiesAsync_Should_Fail_With_ActivityType_Not_Message()
        {
            var options = new Mock <ITwilioAdapterOptions>();

            options.SetupAllProperties();
            options.Object.AuthToken    = "Test";
            options.Object.TwilioNumber = "Test";
            options.Object.AccountSid   = "Test";

            var twilioAdapter = new TwilioAdapter(options.Object, new Mock <ITwilioClient>().Object);

            var activity = new Activity()
            {
                Type = ActivityTypes.Event,
            };

            Activity[] activities = { activity };

            await Assert.ThrowsAsync <Exception>(async() =>
            {
                await twilioAdapter.SendActivitiesAsync(new TurnContext(twilioAdapter, activity), activities, default);
            });
        }
Exemplo n.º 26
0
        public async void ContinueConversationAsync_Should_Succeed()
        {
            bool callbackInvoked = false;
            var  options         = new Mock <ITwilioAdapterOptions>();

            options.SetupAllProperties();
            options.Object.AuthToken    = "Test";
            options.Object.TwilioNumber = "Test";
            options.Object.AccountSid   = "Test";

            var twilioAdapter         = new TwilioAdapter(options.Object, new Mock <ITwilioClient>().Object);
            var conversationReference = new ConversationReference();

            Task BotsLogic(ITurnContext turnContext, CancellationToken cancellationToken)
            {
                callbackInvoked = true;
                return(Task.CompletedTask);
            }

            await twilioAdapter.ContinueConversationAsync(conversationReference, BotsLogic, default);

            Assert.True(callbackInvoked);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="BotController"/> class.
 /// </summary>
 /// <param name="adapter">adapter for the BotController.</param>
 /// <param name="bot">bot for the BotController.</param>
 public TwilioController(TwilioAdapter adapter, IBot bot)
 {
     _adapter = adapter;
     _bot     = bot;
 }