LogicAppsSampleTestFramework/TestCases/TestCases.cs (155 lines of code) (raw):

// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. namespace TestCases { using System.Net.Http; using System.Net; using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json.Linq; using System.IO; using System.Linq; using TestFramework; /// <summary> /// The test cases /// </summary> [TestClass] public class TestCases { /// <summary> /// Simple request-response workflow test. /// </summary> [TestMethod] public void RequestResponse() { var workflowName = "requestresponseworkflow"; var workflowDefinition = File.ReadAllText($"TestFiles\\{workflowName}.json"); using (new WorkflowTestHost(new WorkflowTestInput[] { new WorkflowTestInput(workflowName, workflowDefinition) })) using (var client = new HttpClient()) { // Get workflow callback URL. var response = client.PostAsync(TestEnvironment.GetTriggerCallbackRequestUri(flowName: workflowName, triggerName: "manual"), null).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); // Run the workflow. response = client.PostAsync(response.Content.ReadAsAsync<CallbackUrlDefinition>().Result.Value, null).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); // Check workflow response. Assert.AreEqual("Hello from Logic Apps!", response.Content.ReadAsStringAsync().Result); // Check workflow run status. response = client.GetAsync(TestEnvironment.GetRunsRequestUriWithManagementHost(flowName: workflowName)).Result; var responseContent = response.Content.ReadAsAsync<JToken>().Result; Assert.AreEqual("Succeeded", responseContent["value"][0]["properties"]["status"].ToString()); var runId = responseContent["value"].FirstOrDefault()["name"].ToString(); // Check action result. response = client.GetAsync(TestEnvironment.GetRunActionsRequestUri(flowName: workflowName, runName: runId)).Result; responseContent = response.Content.ReadAsAsync<JToken>().Result; Assert.AreEqual("Succeeded", responseContent["value"].Where(actionResult => actionResult["name"].ToString().Equals("Compose")).FirstOrDefault()["properties"]["status"]); } } /// <summary> /// Workflow with mocked Http action. /// </summary> [TestMethod] public void HttpAction() { var localSettings = $@" {{ ""IsEncrypted"": false, ""Values"": {{ ""AzureWebJobsStorage"": ""UseDevelopmentStorage=true"", ""FUNCTIONS_WORKER_RUNTIME"": ""node"", ""httpuri"": ""{TestEnvironment.FlowV2MockTestHostUri}"" }} }} "; var workflowName = "httpactionworkflow"; var workflowDefinition = File.ReadAllText($"TestFiles\\{workflowName}.json"); using (new WorkflowTestHost(new WorkflowTestInput[] { new WorkflowTestInput(workflowName, workflowDefinition) }, localSettings: localSettings)) using (var host = new MockHttpHost()) using (var client = new HttpClient()) { // Configure mocked response. host.RequestHandler = request => { var mockedResponse = new HttpResponseMessage(statusCode: HttpStatusCode.OK) { RequestMessage = request }; mockedResponse.Content = new StringContent("Mocked Http Response"); return mockedResponse; }; // Get workflow callback URL. var response = client.PostAsync(TestEnvironment.GetTriggerCallbackRequestUri(flowName: workflowName, triggerName: "manual"), null).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); // Run the workflow. response = client.PostAsync(response.Content.ReadAsAsync<CallbackUrlDefinition>().Result.Value, null).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); // Check workflow response. Assert.AreEqual("Mocked Http Response", response.Content.ReadAsStringAsync().Result); // Check workflow run status. response = client.GetAsync(TestEnvironment.GetRunsRequestUriWithManagementHost(flowName: workflowName)).Result; var responseContent = response.Content.ReadAsAsync<JToken>().Result; Assert.AreEqual("Succeeded", responseContent["value"][0]["properties"]["status"].ToString()); var runId = responseContent["value"].FirstOrDefault()["name"].ToString(); // Check action result. response = client.GetAsync(TestEnvironment.GetRunActionsRequestUri(flowName: workflowName, runName: runId)).Result; responseContent = response.Content.ReadAsAsync<JToken>().Result; Assert.AreEqual("Succeeded", responseContent["value"].Where(actionResult => actionResult["name"].ToString().Equals("HTTP")).FirstOrDefault()["properties"]["status"]); } } /// <summary> /// Workflow with mocked api connection action. /// </summary> [TestMethod] public void ApiConnectionAction() { var localSettings = $@" {{ ""IsEncrypted"": false, ""Values"": {{ ""AzureWebJobsStorage"": ""UseDevelopmentStorage=true"", ""FUNCTIONS_WORKER_RUNTIME"": ""node"", ""arm-connectionRuntimeUrl"": ""{TestEnvironment.FlowV2MockTestHostUri}/apim/arm/foobar"", ""arm-connectionKey"": ""foobar"" }} }} "; var mockedResourceGroups = @" { ""value"": [ { ""id"": ""/subscriptions/someSubscription/resourceGroups/someResourceGroup1"", ""name"": ""someResourceGroup1"", ""location"": ""eastus"", ""properties"": { ""provisioningState"": ""Succeeded"" } }, { ""id"": ""/subscriptions/someSubscription/resourceGroups/someResourceGroup2"", ""name"": ""someResourceGroup2"", ""location"": ""westus"", ""properties"": { ""provisioningState"": ""Succeeded"" } } ] }"; var workflowName = "apiconnectionactionworkflow"; var workflowDefinition = File.ReadAllText($"TestFiles\\{workflowName}.json"); var connections = File.ReadAllText($"TestFiles\\connections.json"); using (new WorkflowTestHost(new WorkflowTestInput[] { new WorkflowTestInput(workflowName, workflowDefinition) }, localSettings: localSettings, connectionDetails: connections)) using (var host = new MockHttpHost()) using (var client = new HttpClient()) { // Configure mocked response. host.RequestHandler = request => { var mockedResponse = new HttpResponseMessage(statusCode: HttpStatusCode.OK) { RequestMessage = request }; mockedResponse.Content = new StringContent(mockedResourceGroups); return mockedResponse; }; // Get workflow callback URL. var response = client.PostAsync(TestEnvironment.GetTriggerCallbackRequestUri(flowName: workflowName, triggerName: "manual"), null).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); // Run the workflow. response = client.PostAsync(response.Content.ReadAsAsync<CallbackUrlDefinition>().Result.Value, null).Result; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); // Check workflow response. Assert.AreEqual(mockedResourceGroups, response.Content.ReadAsStringAsync().Result); // Check workflow run status. response = client.GetAsync(TestEnvironment.GetRunsRequestUriWithManagementHost(flowName: workflowName)).Result; var responseContent = response.Content.ReadAsAsync<JToken>().Result; Assert.AreEqual("Succeeded", responseContent["value"][0]["properties"]["status"].ToString()); var runId = responseContent["value"].FirstOrDefault()["name"].ToString(); // Check action result. response = client.GetAsync(TestEnvironment.GetRunActionsRequestUri(flowName: workflowName, runName: runId)).Result; responseContent = response.Content.ReadAsAsync<JToken>().Result; Assert.AreEqual("Succeeded", responseContent["value"].Where(actionResult => actionResult["name"].ToString().Equals("List_resource_groups")).FirstOrDefault()["properties"]["status"]); } } } }