569 lines
13 KiB
C#
569 lines
13 KiB
C#
using ChatBot.Models.Configuration;
|
|
using FluentAssertions;
|
|
|
|
namespace ChatBot.Tests.Models;
|
|
|
|
public class OllamaSettingsTests
|
|
{
|
|
[Fact]
|
|
public void Constructor_ShouldInitializePropertiesWithDefaultValues()
|
|
{
|
|
// Arrange & Act
|
|
var settings = new OllamaSettings();
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("http://localhost:11434");
|
|
settings.DefaultModel.Should().Be("llama3");
|
|
}
|
|
|
|
[Fact]
|
|
public void Url_ShouldBeSettable()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
var expectedUrl = "http://ollama.example.com:11434";
|
|
|
|
// Act
|
|
settings.Url = expectedUrl;
|
|
|
|
// Assert
|
|
settings.Url.Should().Be(expectedUrl);
|
|
}
|
|
|
|
[Fact]
|
|
public void DefaultModel_ShouldBeSettable()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
var expectedModel = "llama3.1:8b";
|
|
|
|
// Act
|
|
settings.DefaultModel = expectedModel;
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be(expectedModel);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("")]
|
|
[InlineData("http://localhost:11434")]
|
|
[InlineData("https://ollama.example.com:11434")]
|
|
[InlineData("http://192.168.1.100:11434")]
|
|
[InlineData("https://api.ollama.com")]
|
|
[InlineData("http://localhost")]
|
|
[InlineData("https://ollama.example.com")]
|
|
public void Url_ShouldAcceptVariousFormats(string url)
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = url;
|
|
|
|
// Assert
|
|
settings.Url.Should().Be(url);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("")]
|
|
[InlineData("llama3")]
|
|
[InlineData("llama3.1")]
|
|
[InlineData("llama3.1:8b")]
|
|
[InlineData("llama3.1:70b")]
|
|
[InlineData("gemma2")]
|
|
[InlineData("gemma2:2b")]
|
|
[InlineData("gemma2:9b")]
|
|
[InlineData("mistral")]
|
|
[InlineData("mistral:7b")]
|
|
[InlineData("codellama")]
|
|
[InlineData("codellama:7b")]
|
|
[InlineData("phi3")]
|
|
[InlineData("phi3:3.8b")]
|
|
[InlineData("qwen2")]
|
|
[InlineData("qwen2:7b")]
|
|
public void DefaultModel_ShouldAcceptVariousModels(string model)
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = model;
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be(model);
|
|
}
|
|
|
|
[Fact]
|
|
public void AllProperties_ShouldBeMutable()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "https://custom-ollama.example.com:8080";
|
|
settings.DefaultModel = "custom-model:latest";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("https://custom-ollama.example.com:8080");
|
|
settings.DefaultModel.Should().Be("custom-model:latest");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportEmptyUrl()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportEmptyModel()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportNullUrl()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = null!;
|
|
|
|
// Assert
|
|
settings.Url.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportNullModel()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = null!;
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportLocalhostUrl()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "http://localhost:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("http://localhost:11434");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportHttpsUrl()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "https://ollama.example.com:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("https://ollama.example.com:11434");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportCustomPort()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "http://localhost:8080";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("http://localhost:8080");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportIpAddress()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "http://192.168.1.100:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("http://192.168.1.100:11434");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportDomainName()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "https://api.ollama.com";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("https://api.ollama.com");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportLlama3Model()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "llama3";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("llama3");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportLlama31Model()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "llama3.1:8b";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("llama3.1:8b");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportGemmaModel()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "gemma2:9b";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("gemma2:9b");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportMistralModel()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "mistral:7b";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("mistral:7b");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportCodeLlamaModel()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "codellama:7b";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("codellama:7b");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportPhi3Model()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "phi3:3.8b";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("phi3:3.8b");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportQwen2Model()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "qwen2:7b";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("qwen2:7b");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportVeryLongUrl()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
var longUrl =
|
|
"https://very-long-domain-name-that-might-be-used-in-some-cases.example.com:11434";
|
|
|
|
// Act
|
|
settings.Url = longUrl;
|
|
|
|
// Assert
|
|
settings.Url.Should().Be(longUrl);
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportVeryLongModelName()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
var longModelName = "very-long-model-name-that-might-be-used-in-some-cases:latest";
|
|
|
|
// Act
|
|
settings.DefaultModel = longModelName;
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be(longModelName);
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithPath()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "https://ollama.example.com/api/v1";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("https://ollama.example.com/api/v1");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithQueryParameters()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "https://ollama.example.com:11434?timeout=30&retries=3";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("https://ollama.example.com:11434?timeout=30&retries=3");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithFragment()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "https://ollama.example.com:11434#api";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("https://ollama.example.com:11434#api");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportModelWithVersion()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "llama3.1:8b-instruct-q4_0";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("llama3.1:8b-instruct-q4_0");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportModelWithCustomTag()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "custom-model:my-tag";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("custom-model:my-tag");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportModelWithSpecialCharacters()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "model-name_with.special+chars:version-tag";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("model-name_with.special+chars:version-tag");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithSpecialCharacters()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "https://user:pass@ollama.example.com:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("https://user:pass@ollama.example.com:11434");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportModelWithUnicode()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "модель:версия";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("модель:версия");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithUnicode()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "https://оллама.пример.ком:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("https://оллама.пример.ком:11434");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportModelWithNumbers()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "model123:version456";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("model123:version456");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithNumbers()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "http://192.168.1.100:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("http://192.168.1.100:11434");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportModelWithUnderscores()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "my_model_name:my_version_tag";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("my_model_name:my_version_tag");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithUnderscores()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "http://my_ollama_server.example.com:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("http://my_ollama_server.example.com:11434");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportModelWithHyphens()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "my-model-name:my-version-tag";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("my-model-name:my-version-tag");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithHyphens()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "http://my-ollama-server.example.com:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("http://my-ollama-server.example.com:11434");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportModelWithDots()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.DefaultModel = "my.model.name:my.version.tag";
|
|
|
|
// Assert
|
|
settings.DefaultModel.Should().Be("my.model.name:my.version.tag");
|
|
}
|
|
|
|
[Fact]
|
|
public void Settings_ShouldSupportUrlWithDots()
|
|
{
|
|
// Arrange
|
|
var settings = new OllamaSettings();
|
|
|
|
// Act
|
|
settings.Url = "http://my.ollama.server.example.com:11434";
|
|
|
|
// Assert
|
|
settings.Url.Should().Be("http://my.ollama.server.example.com:11434");
|
|
}
|
|
}
|