using NewLife.Studio.AI;
using NewLife.Studio.AI.Providers;
using Xunit;
namespace NewLife.Studio.AI.Tests;
public class AIProviderFactoryTests : IDisposable
{
private const string DefaultEndpoint = "https://api.openai.com/v1";
private const string DefaultApiKey = "sk-test-key";
private const string DefaultModel = "gpt-4o";
private readonly HttpClient _httpClient;
public AIProviderFactoryTests()
{
_httpClient = new HttpClient();
}
public void Dispose()
{
_httpClient.Dispose();
}
[Fact]
public void Create_WithOpenAI_ReturnsOpenAIProvider()
{
var provider = AIProviderFactory.Create(_httpClient, "openai", DefaultEndpoint, DefaultApiKey, DefaultModel);
Assert.NotNull(provider);
Assert.IsType<OpenAIProvider>(provider);
Assert.Equal("OpenAI", provider.ProviderName);
}
[Fact]
public void Create_WithAzure_ReturnsOpenAIProvider()
{
var provider = AIProviderFactory.Create(_httpClient, "azure", DefaultEndpoint, DefaultApiKey, DefaultModel);
Assert.NotNull(provider);
Assert.IsType<OpenAIProvider>(provider);
}
[Fact]
public void Create_WithOllama_ReturnsOpenAIProvider()
{
var provider = AIProviderFactory.Create(_httpClient, "ollama", DefaultEndpoint, DefaultApiKey, DefaultModel);
Assert.NotNull(provider);
Assert.IsType<OpenAIProvider>(provider);
}
[Fact]
public void Create_WithUpperCaseProviderType_ReturnsCorrectProvider()
{
var provider = AIProviderFactory.Create(_httpClient, "OPENAI", DefaultEndpoint, DefaultApiKey, DefaultModel);
Assert.NotNull(provider);
Assert.IsType<OpenAIProvider>(provider);
}
[Fact]
public void Create_WithMixedCaseProviderType_ReturnsCorrectProvider()
{
var provider = AIProviderFactory.Create(_httpClient, "OpenAi", DefaultEndpoint, DefaultApiKey, DefaultModel);
Assert.NotNull(provider);
Assert.IsType<OpenAIProvider>(provider);
}
[Fact]
public void Create_WithUnknownProviderType_ThrowsArgumentException()
{
var exception = Assert.Throws<ArgumentException>(() =>
AIProviderFactory.Create(_httpClient, "unknown", DefaultEndpoint, DefaultApiKey, DefaultModel));
Assert.Contains("unknown", exception.Message);
Assert.Contains("Unknown provider type", exception.Message);
}
[Fact]
public void Create_WithEmptyProviderType_ThrowsArgumentException()
{
Assert.Throws<ArgumentException>(() =>
AIProviderFactory.Create(_httpClient, "", DefaultEndpoint, DefaultApiKey, DefaultModel));
}
[Theory]
[InlineData("openai")]
[InlineData("azure")]
[InlineData("ollama")]
public void Create_WithValidProviderTypes_ReturnsNonNullProvider(string providerType)
{
var provider = AIProviderFactory.Create(_httpClient, providerType, DefaultEndpoint, DefaultApiKey, DefaultModel);
Assert.NotNull(provider);
}
}
|