using pgLabII.PgUtils.ConnectionStrings; namespace pgLabII.PgUtils.Tests.ConnectionStrings; public class JdbcCodecTests { [Fact] public void Parse_Basic() { var codec = new JdbcCodec(); var r = codec.TryParse("jdbc:postgresql://localhost:5433/mydb?sslmode=require&applicationName=app&connectTimeout=12"); Assert.True(r.IsSuccess); var d = r.Value; Assert.Single(d.Hosts); Assert.Equal("localhost", d.Hosts[0].Host); Assert.Equal((ushort)5433, d.Hosts[0].Port); Assert.Equal("mydb", d.Database); Assert.Equal(Npgsql.SslMode.Require, d.SslMode); Assert.Equal("app", d.ApplicationName); Assert.Equal(12, d.TimeoutSeconds); } [Fact] public void Parse_MultiHost_MixedPorts() { var codec = new JdbcCodec(); var r = codec.TryParse("jdbc:postgresql://host1:5432,[::1]:5544,host3/db"); Assert.True(r.IsSuccess); var d = r.Value; Assert.Equal(3, d.Hosts.Count); Assert.Equal("host1", d.Hosts[0].Host); Assert.Equal((ushort)5432, d.Hosts[0].Port); Assert.Equal("::1", d.Hosts[1].Host); Assert.Equal((ushort)5544, d.Hosts[1].Port); Assert.Equal("host3", d.Hosts[2].Host); Assert.Null(d.Hosts[2].Port); Assert.Equal("db", d.Database); } [Fact] public void Format_RoundTrip() { var codec = new JdbcCodec(); var parsed = codec.TryParse("jdbc:postgresql://hostA,hostB:5555/test_db?applicationName=cli¶m=x%20y"); Assert.True(parsed.IsSuccess); var formatted = codec.TryFormat(parsed.Value); Assert.True(formatted.IsSuccess); var parsed2 = codec.TryParse(formatted.Value); Assert.True(parsed2.IsSuccess); Assert.Equal(parsed.Value.Hosts.Count, parsed2.Value.Hosts.Count); Assert.Equal(parsed.Value.Database, parsed2.Value.Database); Assert.Equal("cli", parsed2.Value.ApplicationName); Assert.Equal("x y", parsed2.Value.Properties["param"]); } }