예제 #1
0
        public void InitiateCallHttpTriggerMissingInputId()
        {
            InitializeWithNoTwilioMock();

            HttpRequest request = CreateHttpPostRequest(null);

            ExecutionContext context = new ExecutionContext()
            {
                FunctionAppDirectory = Directory.GetCurrentDirectory(),
            };

            IActionResult result = InitiateCallHttpTrigger.Run(request, Log, context).Result;

            Assert.IsInstanceOfType(result, typeof(BadRequestObjectResult));

            BadRequestObjectResult okResult = (BadRequestObjectResult)result;

            Assert.AreEqual(400, okResult.StatusCode);
            Assert.IsInstanceOfType(okResult.Value, typeof(InitiateCallResponse));

            InitiateCallResponse response = (InitiateCallResponse)okResult.Value;

            Assert.IsNull(response.InputId);
            Assert.IsNull(response.AcceptedInputId);
            Assert.IsNull(response.CallSid);
            Assert.AreEqual((int)CommonStatusCode.Error, response.StatusCode);
            Assert.AreEqual(Enum.GetName(typeof(CommonStatusCode), CommonStatusCode.Error), response.StatusDesc);
            Assert.IsTrue(response.HasError);
            Assert.AreEqual((int)InitiateCallErrorCode.RequestMissingInputId, response.ErrorCode);
            Assert.AreEqual($"You must specify a value for the key '{InitiateCallRequest.InputIdKeyName}' in the request body!", response.ErrorDetails);
        }
        public void InitiateCallHttpTriggerRun()
        {
            HttpRequest request = CreateHttpPostRequest(_config.InputId);

            ExecutionContext context = new ExecutionContext()
            {
                FunctionAppDirectory = Directory.GetCurrentDirectory(),
            };

            _log.LogInformation("Calling function to initiate call...");
            IActionResult result = InitiateCallHttpTrigger.Run(request, _log, context).Result;

            Assert.IsInstanceOfType(result, typeof(OkObjectResult));

            OkObjectResult okResult = (OkObjectResult)result;

            Assert.AreEqual(200, okResult.StatusCode);
            Assert.IsInstanceOfType(okResult.Value, typeof(InitiateCallResponse));

            InitiateCallResponse response = (InitiateCallResponse)okResult.Value;

            Assert.AreEqual(_config.InputId, response.InputId);
            Assert.IsFalse(string.IsNullOrWhiteSpace(response.CallSid));

            Assert.AreEqual((int)CommonStatusCode.Ok, response.StatusCode);
            Assert.AreEqual(Enum.GetName(typeof(CommonStatusCode), CommonStatusCode.Ok), response.StatusDesc);

            Assert.IsFalse(response.HasError);
            Assert.AreEqual((int)CommonErrorCode.NoError, response.ErrorCode);
            Assert.IsNull(response.ErrorDetails);

            _log.LogInformation("Writing returned call sid to test configuration...");
            _config.CallSid = response.CallSid;
            _config.Save(GlobalTestConstants.TestConfigurationFilePath);
        }
        /// <summary>
        /// Runner for ensuring InitiateCallHttpTrigger runs correctly against a remote Azure Function.
        /// </summary>
        /// <param name="httpClient">The HttpClient instance to use.</param>
        /// <param name="functionSettings">Configuration information required to make calls to the Azure Function.</param>
        /// <param name="queue">The queue of tests to run.</param>
        /// <returns>An asynchronous task.</returns>
        public async Task InitiateCallRunnerAsync(HttpClient httpClient, FunctionSettings functionSettings, ConcurrentQueue <TestConfiguration> queue)
        {
            TestConfiguration nextTestConfiguration = null;

            while (!queue.IsEmpty)
            {
                if (queue.TryDequeue(out nextTestConfiguration))
                {
                    HttpContent requestContent = CreateHttpPostContent(nextTestConfiguration.InputId, null);

                    HttpResponseMessage httpResponse = await httpClient.PostAsync(functionSettings.InitiateCallUrl, requestContent);

                    string responseContent = await httpResponse.Content.ReadAsStringAsync();

                    InitiateCallResponse response = JsonConvert.DeserializeObject <InitiateCallResponse>(responseContent);

                    Assert.AreEqual(nextTestConfiguration.InputId, response.InputId);
                    Assert.IsFalse(string.IsNullOrWhiteSpace(response.CallSid));

                    Assert.AreEqual((int)CommonStatusCode.Ok, response.StatusCode);
                    Assert.AreEqual(Enum.GetName(typeof(CommonStatusCode), CommonStatusCode.Ok), response.StatusDesc);

                    Assert.IsFalse(response.HasError);
                    Assert.AreEqual((int)CommonErrorCode.NoError, response.ErrorCode);
                    Assert.IsNull(response.ErrorDetails);

                    _log.LogInformation("Writing returned call sid to test configuration...");
                    nextTestConfiguration.CallSid = response.CallSid;
                }

                TH.Thread.Sleep(2000);
            }
        }
예제 #4
0
        public void InitiateCallHttpTriggerSuccessWithDtmf()
        {
            InitializeWithNoTwilioMock();
            InitializeSecrets();

            string expectedInputId      = "012345678"; // Example pulled from https://citizenpath.com/faq/find-alien-registration-number/
            string expectedCallSid      = "CA10000000000000000000000000000001";
            string expectedStatus       = "in-progress";
            string expectedNumberToCall = _config[ExpectedNumberToCallAppSetting];

            string expectedResponseContent = TemplateManager.Load(CallResponseTemplatePath, new Dictionary <string, string>()
            {
                { "expectedCallSid", expectedCallSid },
                { "expectedStatus", expectedStatus },
            });

            HttpResponseMessage expectedResponse = TestHelper.CreateHttpResponseMessage(HttpStatusCode.OK, expectedResponseContent);

            HttpClientMock httpClient = InitiateCallHttpTrigger.Container.GetService <IHttpClientWrapper>() as HttpClientMock;

            httpClient.MessageHandler.RegisterExpectedCallResponse(expectedNumberToCall, "call", expectedResponse);

            HttpRequest request = CreateHttpPostRequest(
                expectedInputId,
                new DtmfRequest()
            {
                Dtmf       = "1ww012345678ww1ww1ww1",
                InitPause  = 0,
                FinalPause = 60,
            });

            ExecutionContext context = new ExecutionContext()
            {
                FunctionAppDirectory = Directory.GetCurrentDirectory(),
            };

            IActionResult result = InitiateCallHttpTrigger.Run(request, Log, context).Result;

            Assert.IsInstanceOfType(result, typeof(OkObjectResult));

            OkObjectResult okResult = (OkObjectResult)result;

            Assert.AreEqual(200, okResult.StatusCode);
            Assert.IsInstanceOfType(okResult.Value, typeof(InitiateCallResponse));

            InitiateCallResponse response = (InitiateCallResponse)okResult.Value;

            Assert.AreEqual(expectedInputId, response.InputId);
            Assert.AreEqual(expectedInputId, response.AcceptedInputId);
            Assert.AreEqual(expectedCallSid, response.CallSid);
            Assert.AreEqual((int)CommonStatusCode.Ok, response.StatusCode);
            Assert.AreEqual(Enum.GetName(typeof(CommonStatusCode), CommonStatusCode.Ok), response.StatusDesc);
            Assert.IsFalse(response.HasError);
            Assert.AreEqual(0, response.ErrorCode);
            Assert.IsNull(response.ErrorDetails);
        }
        /// <summary>
        /// Runner for ensuring InitiateCallHttpTrigger.Run() implementation runs correctly.
        /// </summary>
        /// <param name="queue">The queue of tests to run.</param>
        public void InitiateCallRunnerLocal(ConcurrentQueue <TestConfiguration> queue)
        {
            TestConfiguration nextTestConfiguration = null;

            while (!queue.IsEmpty)
            {
                if (queue.TryDequeue(out nextTestConfiguration))
                {
                    HttpRequest request = CreateHttpPostRequest(nextTestConfiguration.InputId, null);

                    ExecutionContext context = new ExecutionContext()
                    {
                        FunctionAppDirectory = Directory.GetCurrentDirectory(),
                    };

                    IActionResult result = InitiateCallHttpTrigger.Run(request, _log, context).Result;

                    Assert.IsInstanceOfType(result, typeof(OkObjectResult));

                    OkObjectResult okResult = (OkObjectResult)result;

                    Assert.AreEqual(200, okResult.StatusCode);
                    Assert.IsInstanceOfType(okResult.Value, typeof(InitiateCallResponse));

                    InitiateCallResponse response = (InitiateCallResponse)okResult.Value;

                    Assert.AreEqual(nextTestConfiguration.InputId, response.InputId);
                    Assert.IsFalse(string.IsNullOrWhiteSpace(response.CallSid));

                    Assert.AreEqual((int)CommonStatusCode.Ok, response.StatusCode);
                    Assert.AreEqual(Enum.GetName(typeof(CommonStatusCode), CommonStatusCode.Ok), response.StatusDesc);

                    Assert.IsFalse(response.HasError);
                    Assert.AreEqual((int)CommonErrorCode.NoError, response.ErrorCode);
                    Assert.IsNull(response.ErrorDetails);

                    _log.LogInformation("Writing returned call sid to test configuration...");
                    nextTestConfiguration.CallSid = response.CallSid;
                }

                TH.Thread.Sleep(2000);
            }

            _concurrentConfig.Save(GlobalTestConstants.ConcurrentTestConfigurationFilePath);
        }
예제 #6
0
        public void InitiateCallHttpTriggerRunTwilioGenericException()
        {
            InitializeWithTwilioMock();
            InitializeSecrets();

            string expectedInputId = "012345678"; // Example pulled from https://citizenpath.com/faq/find-alien-registration-number/

            InitializeTwilioExceptions(new Dictionary <string, Exception>()
            {
                { _config[ExpectedNumberToCallAppSetting], new TwilioEx.TwilioException("TestException") },
            });

            HttpRequest request = CreateHttpPostRequest(expectedInputId);

            ExecutionContext context = new ExecutionContext()
            {
                FunctionAppDirectory = Directory.GetCurrentDirectory(),
            };

            IActionResult result = InitiateCallHttpTrigger.Run(request, Log, context).Result;

            Assert.IsInstanceOfType(result, typeof(OkObjectResult));

            OkObjectResult okResult = (OkObjectResult)result;

            Assert.AreEqual(200, okResult.StatusCode);
            Assert.IsInstanceOfType(okResult.Value, typeof(InitiateCallResponse));

            InitiateCallResponse response = (InitiateCallResponse)okResult.Value;

            Assert.AreEqual(expectedInputId, response.InputId);
            Assert.AreEqual(expectedInputId, response.AcceptedInputId);

            Assert.AreEqual((int)CommonStatusCode.Error, response.StatusCode);
            Assert.AreEqual(Enum.GetName(typeof(CommonStatusCode), CommonStatusCode.Error), response.StatusDesc);

            Assert.IsTrue(response.HasError);
            Assert.AreEqual((int)CommonErrorCode.TwilioGenericFailure, response.ErrorCode);
            Assert.AreEqual(CommonErrorMessage.TwilioGenericFailureMessage, response.ErrorDetails);
        }