public async Task NoConnectionNameThrows()
        {
            var mockConnector          = new MemoryConnectorClient();
            var mockCredentialProvider = new Mock <ICredentialProvider>();
            var adapter = new MockAdapter(
                mockCredentialProvider.Object,
                () =>
            {
                return(new TokenResponse()
                {
                    Token = "12345"
                });
            },
                new MockLogger());
            var originalActivity = CreateBasicActivity();
            var badOauth         = CreateOAuthCardActivity();

            ((OAuthCard)badOauth.Attachments.First().Content).ConnectionName = null;

            var mockClaims = new Mock <ClaimsIdentity>();

            bool threw = false;

            await adapter.ProcessActivityAsync(
                mockClaims.Object,
                originalActivity,
                async (context, token) =>
            {
                switch (context.Activity.Type)
                {
                case ActivityTypes.Message:
                    context.TurnState.Remove(typeof(IConnectorClient).FullName);
                    context.TurnState.Add <IConnectorClient>(mockConnector);

                    try
                    {
                        await context.SendActivityAsync(badOauth);
                    }
                    catch (InvalidOperationException)
                    {
                        threw = true;
                    }

                    break;
                }
            },
                CancellationToken.None);

            Assert.IsTrue(threw);
        }
        private async Task <Activity> ProcessOAuthCardTest(MockAdapter adapter, MemoryConnectorClient mockConnector, Activity originalActivity, Activity outhCardActivity = null, bool expectsEvent = true)
        {
            var      mockClaims    = new Mock <ClaimsIdentity>();
            Activity eventActivity = null;

            outhCardActivity = outhCardActivity ?? CreateOAuthCardActivity();

            TaskCompletionSource <string> receivedEventActivity = new TaskCompletionSource <string>();

            await adapter.ProcessActivityAsync(
                mockClaims.Object,
                originalActivity,
                async (context, token) =>
            {
                switch (context.Activity.Type)
                {
                case ActivityTypes.Message:
                    context.TurnState.Remove(typeof(IConnectorClient).FullName);
                    context.TurnState.Add <IConnectorClient>(mockConnector);
                    await context.SendActivityAsync(outhCardActivity);
                    break;

                case ActivityTypes.Event:
                    eventActivity = context.Activity;
                    receivedEventActivity.SetResult("done");
                    break;
                }

                if (!expectsEvent)
                {
                    receivedEventActivity.SetResult("done");
                }
            },
                CancellationToken.None);

            await receivedEventActivity.Task;

            return(eventActivity);
        }