microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
kavin/agents-sdk-interop

Branches

Tags

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

Clone

HTTPS

Download ZIP

core/test/IntegrationTests/IntegrationTestFixture.cs

144lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using MartinCostello.Logging.XUnit;
5using Microsoft.Extensions.Configuration;
6using Microsoft.Extensions.DependencyInjection;
7using Microsoft.Extensions.Logging;
8using Microsoft.Teams.Apps;
9using Microsoft.Teams.Apps.Api.Clients;
10using Microsoft.Teams.Core;
11using Microsoft.Teams.Core.Schema;
12using Xunit.Abstractions;
13
14namespace IntegrationTests;
15
16/// <summary>
17/// Shared fixture that configures DI, acquires tokens, and exposes clients for integration tests.
18/// Reused across test classes via IClassFixture to avoid repeated token acquisition.
19/// </summary>
20public class IntegrationTestFixture : IDisposable, ITestOutputHelperAccessor
21{
22 public ServiceProvider ServiceProvider { get; }
23 public ConversationClient ConversationClient { get; }
24 public ApiClient ApiClient { get; }
25
26 public Uri ServiceUrl { get; }
27 public string ConversationId { get; }
28 public string UserId { get; }
29 public string TeamId { get; }
30 public string ChannelId { get; }
31 public string MeetingId { get; }
32 public string TenantId { get; }
33 public string BotAppId { get; }
34 public string? UserId2 { get; }
35 public AgenticIdentity? AgenticIdentity { get; }
36
37 /// <summary>
38 /// Set by each test class constructor to route ILogger output to xUnit's test output.
39 /// </summary>
40 public ITestOutputHelper? OutputHelper { get; set; }
41
42 public IntegrationTestFixture()
43 {
44 IConfiguration configuration = new ConfigurationBuilder()
45 .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
46 .AddEnvironmentVariables()
47 .Build();
48
49 ServiceCollection services = new();
50 services.AddLogging(builder =>
51 {
52 builder.AddXUnit(this);
53 builder.AddFilter("System.Net", LogLevel.Warning);
54 builder.AddFilter("Microsoft.Identity", LogLevel.Error);
55 builder.AddFilter("Microsoft.Teams", LogLevel.Information);
56 });
57 services.AddSingleton(configuration);
58 services.AddTeamsBotApplication();
59
60 ServiceProvider = services.BuildServiceProvider();
61 ConversationClient = ServiceProvider.GetRequiredService<ConversationClient>();
62 ApiClient = ServiceProvider.GetRequiredService<ApiClient>();
63
64 ServiceUrl = new Uri(Env("TEST_SERVICEURL", "https://smba.trafficmanager.net/teams/"));
65 ConversationId = Env("TEST_CONVERSATIONID");
66 UserId = Env("TEST_USER_ID");
67 TeamId = Env("TEST_TEAMID");
68 ChannelId = Env("TEST_CHANNELID");
69 MeetingId = Env("TEST_MEETINGID");
70 TenantId = Env("TEST_TENANTID");
71 BotAppId = Env("AzureAd__ClientId");
72 UserId2 = Environment.GetEnvironmentVariable("TEST_USER_ID_2");
73
74 string? agenticAppId = Environment.GetEnvironmentVariable("TEST_AGENTIC_APPID");
75 string? agenticUserId = Environment.GetEnvironmentVariable("TEST_AGENTIC_USERID");
76
77 if (!string.IsNullOrEmpty(agenticAppId) && !string.IsNullOrEmpty(agenticUserId))
78 {
79 string appBlueprintId = Env("AzureAd__ClientId");
80 ConversationAccount recipient = new()
81 {
82 AgenticAppBlueprintId = appBlueprintId,
83 AgenticAppId = agenticAppId,
84 AgenticUserId = agenticUserId
85 };
86 AgenticIdentity = AgenticIdentity.FromAccount(recipient);
87 }
88 }
89
90 public ApiClient ScopedApiClient => ApiClient.ForServiceUrl(ServiceUrl);
91
92 public void Dispose()
93 {
94 ServiceProvider.Dispose();
95 GC.SuppressFinalize(this);
96 }
97
98 private static string Env(string name, string? fallback = null) =>
99 Environment.GetEnvironmentVariable(name)
100 ?? fallback
101 ?? throw new InvalidOperationException($"{name} environment variable not set");
102
103 internal static ConversationAccount GetConversationAccountWithAgenticProperties()
104 {
105 string agenticUserId = Env("TEST_AGENTIC_USERID");
106 string agenticAppId = Env("TEST_AGENTIC_APPID");
107 string agenticAppBlueprintId = Env("AzureAd__ClientId");
108
109 if (string.IsNullOrEmpty(agenticUserId))
110 {
111 return new ConversationAccount();
112 }
113
114 ConversationAccount account = new()
115 {
116 Id = agenticUserId,
117 Name = "Agentic User",
118 AgenticAppBlueprintId = agenticAppBlueprintId,
119 AgenticAppId = agenticAppId,
120 AgenticUserId = agenticUserId
121 };
122 return account;
123 }
124
125 internal static AgenticIdentity GetAgenticIdentity()
126 {
127 string agenticUserId = Env("TEST_AGENTIC_USERID");
128 string agenticAppId = Env("TEST_AGENTIC_APPID");
129 string agenticAppBlueprintId = Env("AzureAd__ClientId");
130
131 if (string.IsNullOrEmpty(agenticUserId))
132 {
133 return null!;
134 }
135
136 AgenticIdentity identity = new()
137 {
138 AgenticUserId = agenticUserId,
139 AgenticAppId = agenticAppId,
140 AgenticAppBlueprintId = agenticAppBlueprintId
141 };
142 return identity;
143 }
144}