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); } }
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); }
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); }