microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
samples/migration-bot

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

core/test/Microsoft.Teams.Bot.Compat.UnitTests/CompatAdapterTests.cs

98lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using Microsoft.AspNetCore.Http;
5using Microsoft.Bot.Builder;
6using Microsoft.Bot.Schema;
7using Microsoft.Extensions.Configuration;
8using Microsoft.Extensions.Logging.Abstractions;
9using Microsoft.Teams.Bot.Apps;
10using Microsoft.Teams.Bot.Core;
11using Moq;
12
13namespace Microsoft.Teams.Bot.Compat.UnitTests
14{
15 public class CompatAdapterTests
16 {
17 [Fact]
18 public async Task ContinueConversationAsync_WhenCastToBotAdapter_BuildsTurnContextWithUnderlyingClients()
19 {
20 // Arrange
21 (CompatAdapter? compatAdapter, TeamsApiClient? teamsApiClient) = CreateCompatAdapter();
22
23 // Cast to BotAdapter to ensure we're using the base class method
24 BotAdapter botAdapter = compatAdapter;
25
26 ConversationReference conversationReference = new()
27 {
28 ServiceUrl = "https://smba.trafficmanager.net/teams",
29 ChannelId = "msteams",
30 Conversation = new Microsoft.Bot.Schema.ConversationAccount { Id = "test-conversation-id" }
31 };
32
33 bool callbackInvoked = false;
34 Microsoft.Bot.Connector.Authentication.UserTokenClient? capturedUserTokenClient = null;
35 Microsoft.Bot.Connector.IConnectorClient? capturedConnectorClient = null;
36 Microsoft.Teams.Bot.Apps.TeamsApiClient? capturedTeamsApiClient = null;
37
38 BotCallbackHandler callback = async (turnContext, cancellationToken) =>
39 {
40 callbackInvoked = true;
41 capturedUserTokenClient = turnContext.TurnState.Get<Microsoft.Bot.Connector.Authentication.UserTokenClient>();
42 capturedConnectorClient = turnContext.TurnState.Get<Microsoft.Bot.Connector.IConnectorClient>();
43 capturedTeamsApiClient = turnContext.TurnState.Get<Microsoft.Teams.Bot.Apps.TeamsApiClient>();
44 await Task.CompletedTask;
45 };
46
47 // Act
48 await botAdapter.ContinueConversationAsync(
49 "test-bot-id",
50 conversationReference,
51 callback,
52 CancellationToken.None);
53
54 // Assert
55 Assert.True(callbackInvoked);
56
57 // Verify UserTokenClient is CompatUserTokenClient (check by type name since it's internal)
58 Assert.NotNull(capturedUserTokenClient);
59 Assert.Equal("CompatUserTokenClient", capturedUserTokenClient.GetType().Name);
60 Assert.IsAssignableFrom<Microsoft.Bot.Connector.Authentication.UserTokenClient>(capturedUserTokenClient);
61
62 // Verify ConnectorClient is CompatConnectorClient (check by type name since it's internal)
63 Assert.NotNull(capturedConnectorClient);
64 Assert.Equal("CompatConnectorClient", capturedConnectorClient.GetType().Name);
65 Assert.IsAssignableFrom<Microsoft.Bot.Connector.IConnectorClient>(capturedConnectorClient);
66
67 // Verify TeamsApiClient is the same instance we set up
68 Assert.NotNull(capturedTeamsApiClient);
69 Assert.Same(teamsApiClient, capturedTeamsApiClient);
70 }
71
72 private static (CompatAdapter, TeamsApiClient) CreateCompatAdapter()
73 {
74 HttpClient httpClient = new();
75 ConversationClient conversationClient = new(httpClient, NullLogger<ConversationClient>.Instance);
76
77 Mock<IConfiguration> mockConfig = new();
78 mockConfig.Setup(c => c["UserTokenApiEndpoint"]).Returns("https://token.botframework.com");
79
80 UserTokenClient userTokenClient = new(httpClient, mockConfig.Object, NullLogger<UserTokenClient>.Instance);
81 TeamsApiClient teamsApiClient = new(httpClient, NullLogger<TeamsApiClient>.Instance);
82
83 TeamsBotApplication teamsBotApplication = new(
84 conversationClient,
85 userTokenClient,
86 teamsApiClient,
87 Mock.Of<IHttpContextAccessor>(),
88 NullLogger<TeamsBotApplication>.Instance);
89
90 CompatAdapter compatAdapter = new(
91 teamsBotApplication,
92 Mock.Of<IHttpContextAccessor>(),
93 NullLogger<CompatAdapter>.Instance);
94
95 return (compatAdapter, teamsApiClient);
96 }
97 }
98}
99