add tests
All checks were successful
SonarQube / Build and analyze (push) Successful in 3m54s
Unit Tests / Run Tests (push) Successful in 2m23s

This commit is contained in:
Leonid Pershin
2025-10-20 15:11:42 +03:00
parent f8fd16edb2
commit 1c910d7b7f
8 changed files with 549 additions and 154 deletions

View File

@@ -136,6 +136,73 @@ public class ProgramConfigurationTests
Environment.SetEnvironmentVariable("DB_PASSWORD", null);
}
[Fact]
public void EnvironmentVariableFallbacks_ShouldUseConfigWhenEnvMissing()
{
// Arrange: ensure env vars are not set
Environment.SetEnvironmentVariable("TELEGRAM_BOT_TOKEN", null);
Environment.SetEnvironmentVariable("OLLAMA_URL", null);
Environment.SetEnvironmentVariable("OLLAMA_DEFAULT_MODEL", null);
Environment.SetEnvironmentVariable("DB_HOST", null);
Environment.SetEnvironmentVariable("DB_PORT", null);
Environment.SetEnvironmentVariable("DB_NAME", null);
Environment.SetEnvironmentVariable("DB_USER", null);
Environment.SetEnvironmentVariable("DB_PASSWORD", null);
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(
new Dictionary<string, string?>
{
{
"TelegramBot:BotToken",
"config-token-0000000000000000000000000000000000000000"
},
{ "Ollama:Url", "http://config-ollama:11434" },
{ "Ollama:DefaultModel", "config-model" },
{
"Database:ConnectionString",
"Host=config-host;Port=5432;Database=config-db;Username=config-user;Password=config-password"
},
}
)
.Build();
// Act - Simulate Program.cs binding and env override logic
var telegramSettings = new TelegramBotSettings();
configuration.GetSection("TelegramBot").Bind(telegramSettings);
telegramSettings.BotToken =
Environment.GetEnvironmentVariable("TELEGRAM_BOT_TOKEN") ?? telegramSettings.BotToken;
var ollamaSettings = new OllamaSettings();
configuration.GetSection("Ollama").Bind(ollamaSettings);
ollamaSettings.Url = Environment.GetEnvironmentVariable("OLLAMA_URL") ?? ollamaSettings.Url;
ollamaSettings.DefaultModel =
Environment.GetEnvironmentVariable("OLLAMA_DEFAULT_MODEL")
?? ollamaSettings.DefaultModel;
var databaseSettings = new DatabaseSettings();
configuration.GetSection("Database").Bind(databaseSettings);
var host = Environment.GetEnvironmentVariable("DB_HOST") ?? "localhost";
var port = Environment.GetEnvironmentVariable("DB_PORT") ?? "5432";
var name = Environment.GetEnvironmentVariable("DB_NAME") ?? "chatbot";
var user = Environment.GetEnvironmentVariable("DB_USER") ?? "postgres";
var password = Environment.GetEnvironmentVariable("DB_PASSWORD") ?? "postgres";
var expectedConnectionString =
$"Host={host};Port={port};Database={name};Username={user};Password={password}";
databaseSettings.ConnectionString =
$"Host={host};Port={port};Database={name};Username={user};Password={password}";
// Assert - values should remain from configuration when env vars are missing
telegramSettings
.BotToken.Should()
.Be("config-token-0000000000000000000000000000000000000000");
ollamaSettings.Url.Should().Be("http://config-ollama:11434");
ollamaSettings.DefaultModel.Should().Be("config-model");
// Because our fallback block reconstructs from env with defaults when missing,
// ensure it equals the configuration's original connection string when all envs are missing
databaseSettings.ConnectionString.Should().Be(expectedConnectionString);
}
[Fact]
public void DatabaseContext_ShouldBeConfiguredCorrectly()
{