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>(validator); } [Fact] public void ValidateOptions_Valid_ReturnsSuccess() { IValidateOptions validator = new SyncConnectionOptionsValidator(); var result = validator.Validate(null, CreateValidOptions()); Assert.Equal(ValidateOptionsResult.Success, result); } [Fact] public void ValidateOptions_Invalid_ReturnsFailure() { IValidateOptions 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); } }