using Omika.Data.HfSql.Connection; namespace Omika.Tests.Connection; public class HfSqlOleDbConnectionStringBuilderTests { private static HfSqlConnectionOptions CreateOptions() => new() { Server = "hfsql-serveur", Port = 4900, Database = "Omika", User = "tech", Credential = "secret" }; [Fact] public void Build_ContainsProvider() { var connectionString = HfSqlOleDbConnectionStringBuilder.Build(CreateOptions()); Assert.Contains("PCSOFT.HFSQL", connectionString); } [Fact] public void Build_ContainsServerAndPort() { var connectionString = HfSqlOleDbConnectionStringBuilder.Build(CreateOptions()); Assert.Contains("hfsql-serveur:4900", connectionString); } [Fact] public void Build_ContainsDatabase() { var connectionString = HfSqlOleDbConnectionStringBuilder.Build(CreateOptions()); Assert.Contains("Omika", connectionString); } [Fact] public void Build_ContainsUser() { var connectionString = HfSqlOleDbConnectionStringBuilder.Build(CreateOptions()); Assert.Contains("tech", connectionString); } [Fact] public void Build_ContainsCredential() { var connectionString = HfSqlOleDbConnectionStringBuilder.Build(CreateOptions()); Assert.Contains("secret", connectionString); } [Fact] public void Build_OmitsExtendedPropertiesWhenNull() { var connectionString = HfSqlOleDbConnectionStringBuilder.Build(CreateOptions()); Assert.DoesNotContain("Extended Properties", connectionString); } [Fact] public void Build_IncludesExtendedPropertiesWhenProvided() { var connectionString = HfSqlOleDbConnectionStringBuilder.Build( CreateOptions(), "Password=Client:abc123"); Assert.Contains("Extended Properties", connectionString); Assert.Contains("Password=Client:abc123", connectionString); } [Fact] public void Build_NullOptions_Throws() { Assert.Throws(() => HfSqlOleDbConnectionStringBuilder.Build(null!)); } [Fact] public void EscapeExtendedPropertyValue_EscapesSpecialCharacters() { var escaped = HfSqlOleDbConnectionStringBuilder.EscapeExtendedPropertyValue("a=b;c:d\\e"); Assert.Equal("a\\=b\\;c\\:d\\\\e", escaped); } [Fact] public void BuildFilePasswordEntry_DoesNotEscapeStructuralColon() { var entry = HfSqlOleDbConnectionStringBuilder.BuildFilePasswordEntry("Client", "abc123"); Assert.Equal("Password=Client:abc123", entry); } [Fact] public void BuildFilePasswordEntry_EscapesFilenameAndPasswordIndividually() { var entry = HfSqlOleDbConnectionStringBuilder.BuildFilePasswordEntry("a=b", "c;d"); Assert.Equal("Password=a\\=b:c\\;d", entry); } }