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"); } }