add tests
All checks were successful
SonarQube / Build and analyze (push) Successful in 2m25s
Unit Tests / Run Tests (push) Successful in 1m9s

This commit is contained in:
Leonid Pershin
2025-10-20 06:07:45 +03:00
parent 92df3b32c5
commit af9773e7d6
8 changed files with 4031 additions and 0 deletions

View File

@@ -0,0 +1,568 @@
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");
}
}