using FluentAssertions; using FreeCode.ApiProviders; using FreeCode.Core.Interfaces; using FreeCode.Tests.Unit.Helpers; using Xunit; namespace FreeCode.Tests.Unit.ApiProviders; public sealed class ProviderRouterTests { [Fact] public void GetActiveProvider_DefaultsToAnthropic() { Environment.SetEnvironmentVariable("CLAUDE_CODE_USE_OPENAI", null); var services = CreateServices(); var sut = new ApiProviderRouter(services); sut.GetActiveProvider().Should().BeOfType(); } [Fact] public void GetActiveProvider_WithOpenAiFlag_SelectsCodex() { Environment.SetEnvironmentVariable("CLAUDE_CODE_USE_OPENAI", "1"); try { var services = CreateServices(); var sut = new ApiProviderRouter(services); sut.GetActiveProvider().Should().BeOfType(); } finally { Environment.SetEnvironmentVariable("CLAUDE_CODE_USE_OPENAI", null); } } private static IServiceProvider CreateServices() => new SimpleServiceProvider() .AddService(typeof(AnthropicProvider), new AnthropicProvider(new HttpClient(new MockHttpHandler("data: {\"type\":\"message_stop\"}"))) ) .AddService(typeof(CodexProvider), new CodexProvider(new HttpClient(new MockHttpHandler("data: {\"type\":\"response.completed\"}")))) .AddService(typeof(BedrockProvider), new BedrockProvider()) .AddService(typeof(VertexProvider), new VertexProvider()) .AddService(typeof(FoundryProvider), new FoundryProvider()); }