/// <summary> /// Runner for ensuring ExtractInfoHttpTrigger runs correctly against a remote Azure Function. /// </summary> /// <param name="httpClient">The HttpClient instance to use.</param> /// <param name="functionSettings">Configuration information required for calling the Azure Function.</param> /// <param name="queue">The queue of tests to run.</param> /// <returns>An asynchronous task.</returns> public async Task ExtractInfoRunnerAsync(HttpClient httpClient, FunctionSettings functionSettings, ConcurrentQueue <TestConfiguration> queue) { TestConfiguration nextTestConfiguration = null; while (!queue.IsEmpty) { if (queue.TryDequeue(out nextTestConfiguration)) { HttpContent requestContent = CreateHttpPostContent(nextTestConfiguration.CallSid, nextTestConfiguration.Transcript); HttpResponseMessage httpResponse = await httpClient.PostAsync(functionSettings.ExtractInfoUrl, requestContent); string responseContent = await httpResponse.Content.ReadAsStringAsync(); ExtractInfoResponse response = JsonConvert.DeserializeObject <ExtractInfoResponse>(responseContent); Assert.AreEqual(nextTestConfiguration.CallSid, response.CallSid); Assert.IsNotNull(response.Data); _log.LogInformation("Writing extracted data to test configuration..."); nextTestConfiguration.Data = response.Data; } TH.Thread.Sleep(2000); } }
public void ExtractInfoHttpTriggerRun() { HttpRequest request = CreateHttpPostRequest(_config.CallSid, _config.Transcript); ExecutionContext context = new ExecutionContext() { FunctionAppDirectory = Directory.GetCurrentDirectory(), }; IActionResult result = ExtractInfoHttpTrigger.Run(request, _log, context).Result; Assert.IsInstanceOfType(result, typeof(OkObjectResult)); OkObjectResult okResult = (OkObjectResult)result; Assert.AreEqual(200, okResult.StatusCode); Assert.IsInstanceOfType(okResult.Value, typeof(ExtractInfoResponse)); ExtractInfoResponse response = (ExtractInfoResponse)okResult.Value; Assert.AreEqual(_config.CallSid, response.CallSid); Assert.IsNotNull(response.Data); Assert.AreEqual(_config.Transcript.Length < 500 ? _config.Transcript : _config.Transcript.Substring(0, 500), response.Data.Transcription); if (_config.ExpectedEntities.Contains("Dates")) { Assert.IsNotNull(response.Data.Dates); Assert.IsTrue(response.Data.Dates.Count > 0); } if (_config.ExpectedEntities.Contains("Location")) { Assert.IsNotNull(response.Data.Location); } if (_config.ExpectedEntities.Contains("Person")) { Assert.IsNotNull(response.Data.Person); } if (_config.ExpectedAdditionalEntities != null && _config.ExpectedAdditionalEntities.Count > 0) { foreach (KeyValuePair <string, string> expectedAdditionalEntity in _config.ExpectedAdditionalEntities) { Assert.IsTrue( response .Data .AdditionalData .ContainsKey(expectedAdditionalEntity.Key)); Assert.AreEqual( expectedAdditionalEntity.Value, response.Data.AdditionalData[expectedAdditionalEntity.Key]); } } Assert.IsFalse(response.HasError); Assert.AreEqual((int)CommonErrorCode.NoError, response.ErrorCode); Assert.IsNull(response.ErrorDetails); }
/// <summary> /// Runner for ensuring ExtractInfoHttpTrigger.Run() implementation runs correctly for concurrent executions. /// </summary> /// <param name="queue">The queue of tests to run.</param> public void ExtractInfoRunnerLocal(ConcurrentQueue <TestConfiguration> queue) { TestConfiguration nextTestConfiguration = null; while (!queue.IsEmpty) { if (queue.TryDequeue(out nextTestConfiguration)) { HttpRequest request = CreateHttpPostRequest(nextTestConfiguration.CallSid, nextTestConfiguration.Transcript); ExecutionContext context = new ExecutionContext() { FunctionAppDirectory = Directory.GetCurrentDirectory(), }; IActionResult result = ExtractInfoHttpTrigger.Run(request, _log, context).Result; Assert.IsInstanceOfType(result, typeof(OkObjectResult)); OkObjectResult okResult = (OkObjectResult)result; Assert.AreEqual(200, okResult.StatusCode); Assert.IsInstanceOfType(okResult.Value, typeof(ExtractInfoResponse)); ExtractInfoResponse response = (ExtractInfoResponse)okResult.Value; Assert.AreEqual(nextTestConfiguration.CallSid, response.CallSid); Assert.IsNotNull(response.Data); _log.LogInformation("Writing extracted data to test configuration..."); nextTestConfiguration.Data = response.Data; } TH.Thread.Sleep(2000); } _concurrentConfig.Save(GlobalTestConstants.ConcurrentTestConfigurationFilePath); }