// Copyright (c) Microsoft. All rights reserved. using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using AgentConformance.IntegrationTests; using AgentConformance.IntegrationTests.Support; using CopilotStudio.IntegrationTests.Support; using Microsoft.Agents.AI; using Microsoft.Agents.AI.CopilotStudio; using Microsoft.Agents.CopilotStudio.Client; using Microsoft.Extensions.AI; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging.Abstractions; using Shared.IntegrationTests; namespace CopilotStudio.IntegrationTests; public class CopilotStudioFixture : IAgentFixture { public AIAgent Agent { get; private set; } = null!; public Task> GetChatHistoryAsync(AIAgent agent, AgentSession session) => throw new NotSupportedException("CopilotStudio doesn't allow retrieval of chat history."); public Task DeleteSessionAsync(AgentSession session) => // Chat Completion does not require/support deleting threads, so this is a no-op. Task.CompletedTask; public Task InitializeAsync() { const string CopilotStudioHttpClientName = nameof(CopilotStudioAgent); var settings = new CopilotStudioConnectionSettings( TestConfiguration.GetRequiredValue(TestSettings.CopilotStudioTenantId), TestConfiguration.GetRequiredValue(TestSettings.CopilotStudioAgentAppId)) { DirectConnectUrl = TestConfiguration.GetRequiredValue(TestSettings.CopilotStudioDirectConnectUrl), }; ServiceCollection services = new(); services .AddSingleton(settings) .AddSingleton() .AddHttpClient(CopilotStudioHttpClientName) .ConfigurePrimaryHttpMessageHandler(); IHttpClientFactory httpClientFactory = services .BuildServiceProvider() .GetRequiredService(); CopilotClient client = new(settings, httpClientFactory, NullLogger.Instance, CopilotStudioHttpClientName); this.Agent = new CopilotStudioAgent(client); return Task.CompletedTask; } public Task DisposeAsync() => Task.CompletedTask; }