public async Task FailsIfNoControlMessageUrl()
        {
            var badConnectEvent = JObject.Parse(
                @"{
    ""Details"": {
      ""ContactData"": {
        ""Attributes"": {
          ""SessionUrl"": ""session/10001"",
          ""PropertiesUrl"": ""session/10001/properties"",
        },
        ""Channel"": ""VOICE"",
        ""ContactId"": ""ASDAcxcasDFSSDFs"",
       ""CustomerEndpoint"": {
          ""Address"": ""+17202950840"",
          ""Type"": ""TELEPHONE_NUMBER""
        },
        ""InitialContactId"": """",
        ""InitiationMethod"": ""INBOUND"",
        ""InstanceARN"": ""arn:aws:connect:us-east-1:396263001796:instance/1aad3ca7-ea11-4d98-bf4f-30a2644dd195"",
        ""PreviousContactId"": """",
        ""Queue"": null,
        ""SystemEndpoint"": {
          ""Address"": ""+17025346630"",
          ""Type"": ""TELEPHONE_NUMBER""
        }
      },
      ""Parameters"": {
        ""RequestName"": ""GetControlMessage""
      }
    },
    ""Name"": ""ContactFlowEvent""
  }");

            using (var testClient = new HttpClient(new SuccessfullyGetControlMessage())
            {
                BaseAddress = new Uri("https://cvnet2.radishsystems.com/ivr/api/")
            })
            {
                var workflow = new GetControlMessageWorkflow(testClient);
                var response = await workflow.Process(badConnectEvent, _context);

                Assert.True(response["LambdaResult"].Type == JTokenType.Boolean);
                Assert.False((bool)response["LambdaResult"]);
                Assert.True(response["FailureReason"].Type == JTokenType.String);
            }
        }
        public async Task ReturnsNothingIfNoControlMessage()
        {
            using (var testClient = new HttpClient(new GetControlMessageWithNoConent())
            {
                BaseAddress = new Uri("https://cvnet2.radishsystems.com/ivr/api/")
            })
            {
                var workflow = new GetControlMessageWorkflow(testClient);
                var response = await workflow.Process(_connectEvent, _context);

                Assert.True(response.Count == 2);
                Assert.True(response["LambdaResult"].Type == JTokenType.Boolean);
                Assert.True((bool)response["LambdaResult"]);
                Assert.True(response["ControlMessageAvailable"].Type == JTokenType.Boolean);
                Assert.False((bool)response["ControlMessageAvailable"]);
            }
        }
        public async Task FailsIfApiRequestFails()
        {
            using (var testClient = new HttpClient(new FailToGetControlMessage())
            {
                BaseAddress = new Uri("https://cvnet2.radishsystems.com/ivr/api/")
            })
            {
                var workflow = new GetControlMessageWorkflow(testClient);
                var response = await workflow.Process(_connectEvent, _context);

                Assert.True(response["LambdaResult"].Type == JTokenType.Boolean);
                Assert.False((bool)response["LambdaResult"]);
                Assert.True(response["StatusCode"].Type == JTokenType.Integer);
                Assert.True(HttpStatusCode.NotFound == (HttpStatusCode)(int)response["StatusCode"]);
                Assert.Equal("disconnected", (string)response["SessionStatus"]);
                Assert.True(response["FailureReason"].Type == JTokenType.String);
            }
        }
        public async Task ReturnsControlMessage()
        {
            using (var testClient = new HttpClient(new SuccessfullyGetControlMessage())
            {
                BaseAddress = new Uri("https://cvnet2.radishsystems.com/ivr/api/")
            })
            {
                var workflow = new GetControlMessageWorkflow(testClient);
                var response = await workflow.Process(_connectEvent, _context);

                Assert.True(response.Count == 6);
                Assert.True(response["LambdaResult"].Type == JTokenType.Boolean);
                Assert.True((bool)response["LambdaResult"]);
                Assert.True(response["ControlMessageAvailable"].Type == JTokenType.Boolean);
                Assert.True((bool)response["ControlMessageAvailable"]);
                Assert.True(response["menuNumber"].Value <string>() == "1");
                Assert.True(response["menuName"].Value <string>() == "MockMenu");
                Assert.True(response["buttonNumber"].Value <string>() == "0");
                Assert.True(response["buttonName"].Value <string>() == "MockButton");
            }
        }