add tests
This commit is contained in:
452
ChatBot.Tests/Models/DatabaseSettingsTests.cs
Normal file
452
ChatBot.Tests/Models/DatabaseSettingsTests.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user