private async Task AssertErrorThroughInvokeAdapter(Activity activity, string errorMessage)
        {
            // Arrange
            var adapter     = new TestInvokeAdapter();
            var turnContext = new TurnContext(adapter, activity);

            // Act
            var bot = new TestActivityHandler();

            await((IBot)bot).OnTurnAsync(turnContext);

            // Assert
            var sent = adapter.Activity as Activity;

            Assert.Equal(ActivityTypesEx.InvokeResponse, sent.Type);

            Assert.IsType <InvokeResponse>(sent.Value);
            var value = sent.Value as InvokeResponse;

            Assert.Equal(400, value.Status);

            Assert.IsType <AdaptiveCardInvokeResponse>(value.Body);
            var body = value.Body as AdaptiveCardInvokeResponse;

            Assert.Equal("application/vnd.microsoft.error", body.Type);
            Assert.Equal(400, body.StatusCode);

            Assert.IsType <Error>(body.Value);
            var error = body.Value as Error;

            Assert.Equal("BadRequest", error.Code);
            Assert.Equal(errorMessage, error.Message);
        }
        public async Task TestInvokeShouldNotMatchAsync()
        {
            // Arrange
            var activity = new Activity
            {
                Type = ActivityTypes.Invoke,
                Name = "should.not.match",
            };
            var adapter     = new TestInvokeAdapter();
            var turnContext = new TurnContext(adapter, activity);

            // Act
            var bot = new TestActivityHandler();

            await((IBot)bot).OnTurnAsync(turnContext);

            // Assert
            Assert.Single(bot.Record);
            Assert.Equal("OnInvokeActivityAsync", bot.Record[0]);
            Assert.Equal(501, ((InvokeResponse)((Activity)adapter.Activity).Value).Status);
        }
        public async Task TestInvokeAsync()
        {
            // Arrange
            var activity = new Activity
            {
                Type = ActivityTypes.Invoke,
                Name = "some.random.invoke",
            };

            var adapter     = new TestInvokeAdapter();
            var turnContext = new TurnContext(adapter, activity);

            // Act
            var bot = new TestActivityHandler();

            await((IBot)bot).OnTurnAsync(turnContext);

            // Assert
            Assert.AreEqual(1, bot.Record.Count);
            Assert.AreEqual("OnInvokeActivityAsync", bot.Record[0]);
            Assert.AreEqual(200, ((InvokeResponse)((Activity)adapter.Activity).Value).Status);
        }
        public async Task TestInvokeActivity()
        {
            // Arrange
            var adapter  = new TestInvokeAdapter();
            var activity = new Activity
            {
                Type = ActivityTypes.Invoke
            };
            var turnContext = new TurnContext(adapter, activity);

            // Act
            var bot = new TestActivityHandler();

            await((IBot)bot).OnTurnAsync(turnContext);

            // Assert
            Assert.AreEqual(2, bot.Record.Count);
            Assert.AreEqual(bot.Record[0], "OnInvokeActivityAsync");
            Assert.AreEqual(bot.Record[1], "OnInvokeAsync");
            Assert.IsNotNull(adapter.Activity);
            Assert.AreEqual((int)HttpStatusCode.OK, ((InvokeResponse)((Activity)adapter.Activity).Value).Status);
        }