// Copyright (c) Microsoft. All rights reserved. using System; using System.Linq; using Azure.AI.AgentServer.Responses; using Microsoft.Agents.AI.Foundry.Hosting; using Microsoft.Extensions.DependencyInjection; using Moq; namespace Microsoft.Agents.AI.Foundry.UnitTests.Hosting; public class ServiceCollectionExtensionsTests { [Fact] public void AddFoundryResponses_RegistersResponseHandler() { var services = new ServiceCollection(); services.AddLogging(); services.AddFoundryResponses(); var descriptor = services.FirstOrDefault( d => d.ServiceType == typeof(ResponseHandler)); Assert.NotNull(descriptor); Assert.Equal(typeof(AgentFrameworkResponseHandler), descriptor.ImplementationType); } [Fact] public void AddFoundryResponses_CalledTwice_RegistersOnce() { var services = new ServiceCollection(); services.AddLogging(); services.AddFoundryResponses(); services.AddFoundryResponses(); var count = services.Count(d => d.ServiceType == typeof(ResponseHandler)); Assert.Equal(1, count); } [Fact] public void AddFoundryResponses_NullServices_ThrowsArgumentNullException() { Assert.Throws( () => FoundryHostingExtensions.AddFoundryResponses(null!)); } [Fact] public void AddFoundryResponses_WithAgent_RegistersAgentAndHandler() { var services = new ServiceCollection(); services.AddLogging(); var mockAgent = new Mock(); services.AddFoundryResponses(mockAgent.Object); var handlerDescriptor = services.FirstOrDefault( d => d.ServiceType == typeof(ResponseHandler)); Assert.NotNull(handlerDescriptor); var agentDescriptor = services.FirstOrDefault( d => d.ServiceType == typeof(AIAgent)); Assert.NotNull(agentDescriptor); } [Fact] public void AddFoundryResponses_WithNullAgent_ThrowsArgumentNullException() { var services = new ServiceCollection(); Assert.Throws( () => services.AddFoundryResponses(null!)); } [Fact] public void ApplyOpenTelemetry_NonInstrumentedAgent_WrapsWithOpenTelemetryAgent() { var mockAgent = new Mock(); var result = FoundryHostingExtensions.ApplyOpenTelemetry(mockAgent.Object); Assert.NotNull(result.GetService()); } [Fact] public void ApplyOpenTelemetry_AlreadyInstrumentedAgent_ReturnsSameReference() { var mockAgent = new Mock(); var instrumented = mockAgent.Object.AsBuilder() .UseOpenTelemetry() .Build(); var result = FoundryHostingExtensions.ApplyOpenTelemetry(instrumented); Assert.Same(instrumented, result); } }