// Copyright (c) Microsoft. All rights reserved.
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Microsoft.Agents.AI.Hosting.OpenAI.UnitTests;
///
/// Tests for EndpointRouteBuilderExtensions.MapOpenAIResponses method.
///
public sealed class EndpointRouteBuilderExtensionsTests
{
///
/// Verifies that MapOpenAIResponses throws ArgumentNullException for null endpoints.
///
[Fact]
public void MapOpenAIResponses_NullEndpoints_ThrowsArgumentNullException()
{
// Arrange
AspNetCore.Routing.IEndpointRouteBuilder endpoints = null!;
AIAgent agent = null!;
// Act & Assert
ArgumentNullException exception = Assert.Throws(() =>
endpoints.MapOpenAIResponses(agent));
Assert.Equal("endpoints", exception.ParamName);
}
///
/// Verifies that MapOpenAIResponses throws ArgumentNullException for null agent.
///
[Fact]
public void MapOpenAIResponses_NullAgent_ThrowsArgumentNullException()
{
// Arrange
WebApplicationBuilder builder = WebApplication.CreateBuilder();
builder.AddOpenAIResponses();
using WebApplication app = builder.Build();
// Act & Assert
AIAgent agent = null!;
ArgumentNullException exception = Assert.Throws(() =>
app.MapOpenAIResponses(agent));
Assert.Equal("agent", exception.ParamName);
}
///
/// Verifies that MapOpenAIResponses validates agent name characters for URL safety.
///
[Theory]
[InlineData("agent with spaces")]
[InlineData("agent