93 lines
2.6 KiB
C#
93 lines
2.6 KiB
C#
using ChatBot.Models.Configuration;
|
|
using ChatBot.Models.Configuration.Validators;
|
|
using FluentAssertions;
|
|
|
|
namespace ChatBot.Tests.Configuration.Validators;
|
|
|
|
public class DatabaseSettingsValidatorTests
|
|
{
|
|
private readonly DatabaseSettingsValidator _validator = new();
|
|
|
|
[Fact]
|
|
public void Validate_ShouldReturnSuccess_WhenSettingsAreValid()
|
|
{
|
|
// Arrange
|
|
var settings = new DatabaseSettings
|
|
{
|
|
ConnectionString =
|
|
"Host=localhost;Port=5432;Database=chatbot;Username=user;Password=pass",
|
|
CommandTimeout = 30,
|
|
EnableSensitiveDataLogging = false,
|
|
};
|
|
|
|
// Act
|
|
var result = _validator.Validate(null, settings);
|
|
|
|
// Assert
|
|
result.Succeeded.Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void Validate_ShouldReturnFailure_WhenConnectionStringIsEmpty()
|
|
{
|
|
// Arrange
|
|
var settings = new DatabaseSettings
|
|
{
|
|
ConnectionString = "",
|
|
CommandTimeout = 30,
|
|
EnableSensitiveDataLogging = false,
|
|
};
|
|
|
|
// Act
|
|
var result = _validator.Validate(null, settings);
|
|
|
|
// Assert
|
|
result.Succeeded.Should().BeFalse();
|
|
result.Failures.Should().Contain(f => f.Contains("Database connection string is required"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Validate_ShouldReturnFailure_WhenCommandTimeoutIsInvalid()
|
|
{
|
|
// Arrange
|
|
var settings = new DatabaseSettings
|
|
{
|
|
ConnectionString =
|
|
"Host=localhost;Port=5432;Database=chatbot;Username=user;Password=pass",
|
|
CommandTimeout = 0, // Invalid: <= 0
|
|
EnableSensitiveDataLogging = false,
|
|
};
|
|
|
|
// Act
|
|
var result = _validator.Validate(null, settings);
|
|
|
|
// Assert
|
|
result.Succeeded.Should().BeFalse();
|
|
result.Failures.Should().Contain(f => f.Contains("Command timeout must be greater than 0"));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(null)]
|
|
[InlineData("")]
|
|
[InlineData(" ")]
|
|
public void Validate_ShouldReturnFailure_WhenConnectionStringIsNullOrWhitespace(
|
|
string? connectionString
|
|
)
|
|
{
|
|
// Arrange
|
|
var settings = new DatabaseSettings
|
|
{
|
|
ConnectionString = connectionString!,
|
|
CommandTimeout = 30,
|
|
EnableSensitiveDataLogging = false,
|
|
};
|
|
|
|
// Act
|
|
var result = _validator.Validate(null, settings);
|
|
|
|
// Assert
|
|
result.Succeeded.Should().BeFalse();
|
|
result.Failures.Should().Contain(f => f.Contains("Database connection string is required"));
|
|
}
|
|
}
|