115 lines
3.3 KiB
C#
115 lines
3.3 KiB
C#
using Microsoft.Extensions.Options;
|
|
using Omika.Data.Configuration;
|
|
|
|
namespace Omika.Tests.Connection;
|
|
|
|
public class SyncConnectionOptionsValidatorTests
|
|
{
|
|
private static SyncConnectionOptions CreateValidOptions() => new()
|
|
{
|
|
Server = "127.0.0.1",
|
|
Port = 4900,
|
|
DatabaseName = "BASE_SYNC",
|
|
Login = "susana"
|
|
};
|
|
|
|
[Fact]
|
|
public void Validate_ValidOptions_ReturnsSuccess()
|
|
{
|
|
var result = SyncConnectionOptionsValidator.Validate(CreateValidOptions());
|
|
|
|
Assert.True(result.IsSuccess);
|
|
}
|
|
|
|
[Fact]
|
|
public void Validate_MissingServer_ReturnsFailure()
|
|
{
|
|
var options = CreateValidOptions();
|
|
options.Server = null;
|
|
|
|
var result = SyncConnectionOptionsValidator.Validate(options);
|
|
|
|
Assert.True(result.IsFailure);
|
|
Assert.Contains(result.Errors, e => e.Contains("serveur", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Fact]
|
|
public void Validate_InvalidPort_ReturnsFailure()
|
|
{
|
|
var options = CreateValidOptions();
|
|
options.Port = 0;
|
|
|
|
var result = SyncConnectionOptionsValidator.Validate(options);
|
|
|
|
Assert.True(result.IsFailure);
|
|
Assert.Contains(result.Errors, e => e.Contains("port", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Fact]
|
|
public void Validate_MissingDatabase_ReturnsFailure()
|
|
{
|
|
var options = CreateValidOptions();
|
|
options.DatabaseName = null;
|
|
|
|
var result = SyncConnectionOptionsValidator.Validate(options);
|
|
|
|
Assert.True(result.IsFailure);
|
|
Assert.Contains(result.Errors, e => e.Contains("base", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Fact]
|
|
public void Validate_MissingLogin_ReturnsFailure()
|
|
{
|
|
var options = CreateValidOptions();
|
|
options.Login = null;
|
|
|
|
var result = SyncConnectionOptionsValidator.Validate(options);
|
|
|
|
Assert.True(result.IsFailure);
|
|
Assert.Contains(result.Errors, e => e.Contains("compte", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Fact]
|
|
public void Validate_ImplementsIValidateOptions()
|
|
{
|
|
var validator = new SyncConnectionOptionsValidator();
|
|
|
|
Assert.IsAssignableFrom<IValidateOptions<SyncConnectionOptions>>(validator);
|
|
}
|
|
|
|
[Fact]
|
|
public void ValidateOptions_Valid_ReturnsSuccess()
|
|
{
|
|
IValidateOptions<SyncConnectionOptions> validator = new SyncConnectionOptionsValidator();
|
|
|
|
var result = validator.Validate(null, CreateValidOptions());
|
|
|
|
Assert.Equal(ValidateOptionsResult.Success, result);
|
|
}
|
|
|
|
[Fact]
|
|
public void ValidateOptions_Invalid_ReturnsFailure()
|
|
{
|
|
IValidateOptions<SyncConnectionOptions> validator = new SyncConnectionOptionsValidator();
|
|
var options = CreateValidOptions();
|
|
options.Server = null;
|
|
|
|
var result = validator.Validate(null, options);
|
|
|
|
Assert.True(result.Failed);
|
|
Assert.Contains(result.Failures, e => e.Contains("serveur", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Fact]
|
|
public void ToString_DoesNotExposePassword()
|
|
{
|
|
var options = CreateValidOptions();
|
|
options.Password = "secret";
|
|
options.FilePasswords.ProtectionStd = "secret-std";
|
|
|
|
var text = options.ToString();
|
|
|
|
Assert.DoesNotContain("secret", text, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
}
|