public async Task TestSkillAdapterApiCalls()
        {
            var activityId   = Guid.NewGuid().ToString("N");
            var botId        = Guid.NewGuid().ToString("N");
            var botAdapter   = CreateAdapter("TestSkillAdapterApiCalls");
            var skillAccount = ObjectPath.Clone(botAdapter.Conversation.Bot);
            var skillId      = "testSkill";

            skillAccount.Properties["SkillId"] = skillId;

            var middleware = new AssertInvokeMiddleware(botAdapter, activityId);

            botAdapter.Use(middleware);
            var bot          = new CallbackBot();
            var skillAdapter = new BotFrameworkSkillHostAdapter(botAdapter, new MicrosoftAppCredentials(string.Empty, string.Empty), new AuthenticationConfiguration(), configuration: new ConfigurationBuilder().Build());

            var sc = new SkillConversation()
            {
                ServiceUrl     = botAdapter.Conversation.ServiceUrl,
                ConversationId = botAdapter.Conversation.Conversation.Id
            };
            var skillConversationId = sc.GetSkillConversationId();
            var claimsIdentity      = new ClaimsIdentity();

            claimsIdentity.AddClaim(new Claim(AuthenticationConstants.AudienceClaim, botId));
            claimsIdentity.AddClaim(new Claim(AuthenticationConstants.AppIdClaim, botId));
            claimsIdentity.AddClaim(new Claim(AuthenticationConstants.ServiceUrlClaim, botAdapter.Conversation.ServiceUrl));

            object result = await skillAdapter.CreateConversationAsync(bot, claimsIdentity, skillConversationId, new ConversationParameters());

            Assert.IsType <ConversationResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ConversationResourceResponse)result).Id);

            await skillAdapter.DeleteActivityAsync(bot, claimsIdentity, skillConversationId, activityId);

            await skillAdapter.DeleteConversationMemberAsync(bot, claimsIdentity, skillConversationId, "user2");

            result = await skillAdapter.GetActivityMembersAsync(bot, claimsIdentity, skillConversationId, activityId);

            Assert.IsAssignableFrom <IList <ChannelAccount> >(result);

            result = await skillAdapter.GetConversationMembersAsync(bot, claimsIdentity, skillConversationId);

            Assert.IsAssignableFrom <IList <ChannelAccount> >(result);

            result = await skillAdapter.GetConversationPagedMembersAsync(bot, claimsIdentity, skillConversationId);

            Assert.IsType <PagedMembersResult>(result);

            result = await skillAdapter.GetConversationPagedMembersAsync(bot, claimsIdentity, skillConversationId, 10);

            Assert.IsType <PagedMembersResult>(result);

            var pagedMembersResult = (PagedMembersResult)result;

            result = await skillAdapter.GetConversationPagedMembersAsync(bot, claimsIdentity, skillConversationId, continuationToken : pagedMembersResult.ContinuationToken);

            Assert.IsType <PagedMembersResult>(result);

            result = await skillAdapter.GetConversationsAsync(bot, claimsIdentity, skillConversationId);

            Assert.IsType <ConversationsResult>(result);

            var conversationsResult = (ConversationsResult)result;

            result = await skillAdapter.GetConversationsAsync(bot, claimsIdentity, skillConversationId, continuationToken : conversationsResult.ContinuationToken);

            Assert.IsType <ConversationsResult>(result);

            var msgActivity = Activity.CreateMessageActivity();

            msgActivity.Conversation = botAdapter.Conversation.Conversation;
            msgActivity.From         = skillAccount;
            msgActivity.Recipient    = botAdapter.Conversation.User;
            msgActivity.Text         = "yo";

            result = await skillAdapter.SendToConversationAsync(bot, claimsIdentity, skillConversationId, (Activity)msgActivity);

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);
            msgActivity.Id = ((ResourceResponse)result).Id;

            result = await skillAdapter.ReplyToActivityAsync(bot, claimsIdentity, skillConversationId, activityId, (Activity)msgActivity);

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);

            result = await skillAdapter.SendConversationHistoryAsync(bot, claimsIdentity, skillConversationId, new Transcript());

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);

            result = await skillAdapter.UpdateActivityAsync(bot, claimsIdentity, skillConversationId, activityId, (Activity)msgActivity);

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);

            result = await skillAdapter.UploadAttachmentAsync(bot, claimsIdentity, skillConversationId, new AttachmentData());

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);
        }
        public async Task TestSkillAdapterApiCalls()
        {
            var activityId   = Guid.NewGuid().ToString("N");
            var botId        = Guid.NewGuid().ToString("N");
            var botAdapter   = CreateAdapter("TestSkillAdapterApiCalls");
            var skillAccount = ObjectPath.Clone(botAdapter.Conversation.Bot);
            var skillId      = "testSkill";

            skillAccount.Properties["SkillId"] = skillId;

            var middleware = new AssertInvokeMiddleware(botAdapter, activityId);

            botAdapter.Use(middleware);
            var bot         = new CallbackBot();
            var skillClient = new SkillHandlerInstanceForTests(botAdapter, bot, new Mock <ICredentialProvider>().Object, new AuthenticationConfiguration());

            var sc = new TestConversationIdFactory();

            var skillConversationId = sc.CreateSkillConversationId(botAdapter.Conversation.Conversation.Id, botAdapter.Conversation.ServiceUrl);
            var claimsIdentity      = new ClaimsIdentity();

            claimsIdentity.AddClaim(new Claim(AuthenticationConstants.AudienceClaim, botId));
            claimsIdentity.AddClaim(new Claim(AuthenticationConstants.AppIdClaim, botId));
            claimsIdentity.AddClaim(new Claim(AuthenticationConstants.ServiceUrlClaim, botAdapter.Conversation.ServiceUrl));

            object result = await skillClient.TestOnCreateConversationAsync(claimsIdentity, new ConversationParameters());

            Assert.IsType <ConversationResourceResponse>(result);

            //Assert.Equal(middleware.NewResourceId, ((ConversationResourceResponse)result).Id);

            await skillClient.TestOnDeleteActivityAsync(claimsIdentity, skillConversationId, activityId);

            await skillClient.TestOnDeleteConversationMemberAsync(claimsIdentity, skillConversationId, "user2");

            result = await skillClient.TestOnGetActivityMembersAsync(claimsIdentity, skillConversationId, activityId);

            Assert.IsAssignableFrom <IList <ChannelAccount> >(result);

            result = await skillClient.TestOnGetConversationMembersAsync(claimsIdentity, skillConversationId);

            Assert.IsAssignableFrom <IList <ChannelAccount> >(result);

            result = await skillClient.TestOnGetConversationPagedMembersAsync(claimsIdentity, skillConversationId);

            Assert.IsType <PagedMembersResult>(result);

            result = await skillClient.TestOnGetConversationPagedMembersAsync(claimsIdentity, skillConversationId, 10);

            Assert.IsType <PagedMembersResult>(result);

            var pagedMembersResult = (PagedMembersResult)result;

            result = await skillClient.TestOnGetConversationPagedMembersAsync(claimsIdentity, skillConversationId, continuationToken : pagedMembersResult.ContinuationToken);

            Assert.IsType <PagedMembersResult>(result);

            result = await skillClient.TestOnGetConversationsAsync(claimsIdentity, skillConversationId);

            Assert.IsType <ConversationsResult>(result);

            var conversationsResult = (ConversationsResult)result;

            result = await skillClient.TestOnGetConversationsAsync(claimsIdentity, skillConversationId, continuationToken : conversationsResult.ContinuationToken);

            Assert.IsType <ConversationsResult>(result);

            var msgActivity = Activity.CreateMessageActivity();

            msgActivity.Conversation = botAdapter.Conversation.Conversation;
            msgActivity.Text         = "yo";

            result = await skillClient.TestOnSendToConversationAsync(claimsIdentity, skillConversationId, (Activity)msgActivity);

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);
            msgActivity.Id = ((ResourceResponse)result).Id;

            result = await skillClient.TestOnReplyToActivityAsync(claimsIdentity, skillConversationId, activityId, (Activity)msgActivity);

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);
            msgActivity.Id = ((ResourceResponse)result).Id;

            result = await skillClient.TestOnSendConversationHistoryAsync(claimsIdentity, skillConversationId, new Transcript());

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);

            result = await skillClient.TestOnUpdateActivityAsync(claimsIdentity, skillConversationId, activityId, (Activity)msgActivity);

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);

            result = await skillClient.TestOnUploadAttachmentAsync(claimsIdentity, skillConversationId, new AttachmentData());

            Assert.IsType <ResourceResponse>(result);
            Assert.Equal(middleware.NewResourceId, ((ResourceResponse)result).Id);
        }