Files
ChatBot/ChatBot.Tests/Models/DatabaseSettingsTests.cs
Leonid Pershin af9773e7d6
All checks were successful
SonarQube / Build and analyze (push) Successful in 2m25s
Unit Tests / Run Tests (push) Successful in 1m9s
add tests
2025-10-20 06:07:45 +03:00

453 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
}
}