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,452 @@
using ChatBot.Models.Configuration;
using FluentAssertions;
namespace ChatBot.Tests.Models;
public class DatabaseSettingsTests
{
[Fact]
public void Constructor_ShouldInitializePropertiesWithDefaultValues()
{
// Arrange & Act
var settings = new DatabaseSettings();
// Assert
settings.ConnectionString.Should().Be(string.Empty);
settings.EnableSensitiveDataLogging.Should().BeFalse();
settings.CommandTimeout.Should().Be(30);
}
[Fact]
public void ConnectionString_ShouldBeSettable()
{
// Arrange
var settings = new DatabaseSettings();
var expectedConnectionString =
"Server=localhost;Database=testdb;User Id=user;Password=testpass;";
// Act
settings.ConnectionString = expectedConnectionString;
// Assert
settings.ConnectionString.Should().Be(expectedConnectionString);
}
[Fact]
public void EnableSensitiveDataLogging_ShouldBeSettable()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.EnableSensitiveDataLogging = true;
// Assert
settings.EnableSensitiveDataLogging.Should().BeTrue();
}
[Fact]
public void CommandTimeout_ShouldBeSettable()
{
// Arrange
var settings = new DatabaseSettings();
var expectedTimeout = 60;
// Act
settings.CommandTimeout = expectedTimeout;
// Assert
settings.CommandTimeout.Should().Be(expectedTimeout);
}
[Theory]
[InlineData("")]
[InlineData("Server=localhost;Database=testdb;")]
[InlineData("Server=localhost;Port=5432;Database=chatbot;User Id=admin;Password=testpass;")]
[InlineData(
"Host=localhost;Port=5432;Database=chatbot;Username=admin;Password=testpass;Pooling=true;MinPoolSize=0;MaxPoolSize=100;"
)]
[InlineData("Data Source=localhost;Initial Catalog=chatbot;Integrated Security=true;")]
[InlineData(
"Server=localhost;Database=chatbot;Trusted_Connection=true;MultipleActiveResultSets=true;"
)]
public void ConnectionString_ShouldAcceptVariousFormats(string connectionString)
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.ConnectionString = connectionString;
// Assert
settings.ConnectionString.Should().Be(connectionString);
}
[Theory]
[InlineData(true)]
[InlineData(false)]
public void EnableSensitiveDataLogging_ShouldAcceptBooleanValues(bool enabled)
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.EnableSensitiveDataLogging = enabled;
// Assert
settings.EnableSensitiveDataLogging.Should().Be(enabled);
}
[Theory]
[InlineData(0)]
[InlineData(1)]
[InlineData(30)]
[InlineData(60)]
[InlineData(300)]
[InlineData(int.MaxValue)]
public void CommandTimeout_ShouldAcceptVariousValues(int timeout)
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.CommandTimeout = timeout;
// Assert
settings.CommandTimeout.Should().Be(timeout);
}
[Fact]
public void AllProperties_ShouldBeMutable()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.ConnectionString = "Server=test;Database=testdb;";
settings.EnableSensitiveDataLogging = true;
settings.CommandTimeout = 120;
// Assert
settings.ConnectionString.Should().Be("Server=test;Database=testdb;");
settings.EnableSensitiveDataLogging.Should().BeTrue();
settings.CommandTimeout.Should().Be(120);
}
[Fact]
public void Settings_ShouldSupportEmptyConnectionString()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.ConnectionString = "";
// Assert
settings.ConnectionString.Should().Be("");
}
[Fact]
public void Settings_ShouldSupportNullConnectionString()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.ConnectionString = null!;
// Assert
settings.ConnectionString.Should().BeNull();
}
[Fact]
public void Settings_ShouldSupportVeryLongConnectionString()
{
// Arrange
var settings = new DatabaseSettings();
var longConnectionString = new string('A', 1000);
// Act
settings.ConnectionString = longConnectionString;
// Assert
settings.ConnectionString.Should().Be(longConnectionString);
settings.ConnectionString.Length.Should().Be(1000);
}
[Fact]
public void Settings_ShouldSupportPostgreSQLConnectionString()
{
// Arrange
var settings = new DatabaseSettings();
var postgresConnectionString =
"Host=localhost;Port=5432;Database=chatbot;Username=admin;Password=testpass;Pooling=true;MinPoolSize=0;MaxPoolSize=100;Connection Lifetime=0;";
// Act
settings.ConnectionString = postgresConnectionString;
// Assert
settings.ConnectionString.Should().Be(postgresConnectionString);
}
[Fact]
public void Settings_ShouldSupportSQLServerConnectionString()
{
// Arrange
var settings = new DatabaseSettings();
var sqlServerConnectionString =
"Server=localhost;Database=chatbot;User Id=admin;Password=testpass;TrustServerCertificate=true;";
// Act
settings.ConnectionString = sqlServerConnectionString;
// Assert
settings.ConnectionString.Should().Be(sqlServerConnectionString);
}
[Fact]
public void Settings_ShouldSupportSQLiteConnectionString()
{
// Arrange
var settings = new DatabaseSettings();
var sqliteConnectionString = "Data Source=chatbot.db;Cache=Shared;";
// Act
settings.ConnectionString = sqliteConnectionString;
// Assert
settings.ConnectionString.Should().Be(sqliteConnectionString);
}
[Fact]
public void Settings_ShouldSupportMySQLConnectionString()
{
// Arrange
var settings = new DatabaseSettings();
var mysqlConnectionString =
"Server=localhost;Port=3306;Database=chatbot;Uid=admin;Pwd=testpass;";
// Act
settings.ConnectionString = mysqlConnectionString;
// Assert
settings.ConnectionString.Should().Be(mysqlConnectionString);
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithSpecialCharacters()
{
// Arrange
var settings = new DatabaseSettings();
var connectionStringWithSpecialChars =
"Server=localhost;Database=test-db;User Id=user@domain.com;Password=testpass123!;";
// Act
settings.ConnectionString = connectionStringWithSpecialChars;
// Assert
settings.ConnectionString.Should().Be(connectionStringWithSpecialChars);
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithUnicode()
{
// Arrange
var settings = new DatabaseSettings();
var connectionStringWithUnicode =
"Server=localhost;Database=тестовая_база;User Id=пользователь;Password=testpass;";
// Act
settings.ConnectionString = connectionStringWithUnicode;
// Assert
settings.ConnectionString.Should().Be(connectionStringWithUnicode);
}
[Fact]
public void Settings_ShouldSupportZeroCommandTimeout()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.CommandTimeout = 0;
// Assert
settings.CommandTimeout.Should().Be(0);
}
[Fact]
public void Settings_ShouldSupportNegativeCommandTimeout()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.CommandTimeout = -1;
// Assert
settings.CommandTimeout.Should().Be(-1);
}
[Fact]
public void Settings_ShouldSupportMaxIntCommandTimeout()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.CommandTimeout = int.MaxValue;
// Assert
settings.CommandTimeout.Should().Be(int.MaxValue);
}
[Fact]
public void Settings_ShouldSupportMinIntCommandTimeout()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.CommandTimeout = int.MinValue;
// Assert
settings.CommandTimeout.Should().Be(int.MinValue);
}
[Fact]
public void Settings_ShouldSupportDevelopmentMode()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.EnableSensitiveDataLogging = true;
settings.ConnectionString = "Server=localhost;Database=chatbot_dev;";
// Assert
settings.EnableSensitiveDataLogging.Should().BeTrue();
settings.ConnectionString.Should().Be("Server=localhost;Database=chatbot_dev;");
}
[Fact]
public void Settings_ShouldSupportProductionMode()
{
// Arrange
var settings = new DatabaseSettings();
// Act
settings.EnableSensitiveDataLogging = false;
settings.ConnectionString = "Server=prod-server;Database=chatbot_prod;";
// Assert
settings.EnableSensitiveDataLogging.Should().BeFalse();
settings.ConnectionString.Should().Be("Server=prod-server;Database=chatbot_prod;");
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithMultipleParameters()
{
// Arrange
var settings = new DatabaseSettings();
var complexConnectionString =
"Server=localhost;Port=5432;Database=chatbot;Username=admin;Password=testpass;Pooling=true;MinPoolSize=5;MaxPoolSize=100;Connection Lifetime=300;Command Timeout=60;";
// Act
settings.ConnectionString = complexConnectionString;
// Assert
settings.ConnectionString.Should().Be(complexConnectionString);
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithSpaces()
{
// Arrange
var settings = new DatabaseSettings();
var connectionStringWithSpaces =
"Server = localhost ; Database = chatbot ; User Id = admin ; Password = testpass ;";
// Act
settings.ConnectionString = connectionStringWithSpaces;
// Assert
settings.ConnectionString.Should().Be(connectionStringWithSpaces);
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithQuotes()
{
// Arrange
var settings = new DatabaseSettings();
var connectionStringWithQuotes =
"Server=\"localhost\";Database=\"chatbot\";User Id=\"admin\";Password=\"testpass\";";
// Act
settings.ConnectionString = connectionStringWithQuotes;
// Assert
settings.ConnectionString.Should().Be(connectionStringWithQuotes);
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithSemicolons()
{
// Arrange
var settings = new DatabaseSettings();
var connectionStringWithSemicolons =
"Server=localhost;;Database=chatbot;;User Id=admin;;Password=testpass;;";
// Act
settings.ConnectionString = connectionStringWithSemicolons;
// Assert
settings.ConnectionString.Should().Be(connectionStringWithSemicolons);
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithEquals()
{
// Arrange
var settings = new DatabaseSettings();
var connectionStringWithEquals =
"Server=localhost;Database=chatbot;User Id=admin;Password=testpass=123;";
// Act
settings.ConnectionString = connectionStringWithEquals;
// Assert
settings.ConnectionString.Should().Be(connectionStringWithEquals);
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithNewlines()
{
// Arrange
var settings = new DatabaseSettings();
var connectionStringWithNewlines =
"Server=localhost;\nDatabase=chatbot;\nUser Id=admin;\nPassword=testpass;";
// Act
settings.ConnectionString = connectionStringWithNewlines;
// Assert
settings.ConnectionString.Should().Be(connectionStringWithNewlines);
}
[Fact]
public void Settings_ShouldSupportConnectionStringWithTabs()
{
// Arrange
var settings = new DatabaseSettings();
var connectionStringWithTabs =
"Server=localhost;\tDatabase=chatbot;\tUser Id=admin;\tPassword=testpass;";
// Act
settings.ConnectionString = connectionStringWithTabs;
// Assert
settings.ConnectionString.Should().Be(connectionStringWithTabs);
}
}