using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.Security.Ldap; namespace ZB.MOM.WW.OtOpcUa.Security.Tests; public sealed class LdapHelperTests { [Theory] [InlineData("joe", "joe")] [InlineData("jo*e", "jo\\2ae")] [InlineData("jo(e", "jo\\28e")] [InlineData("jo)e", "jo\\29e")] [InlineData("jo\\e", "jo\\5ce")] public void EscapeLdapFilter_escapes_special_chars(string input, string expected) { LdapAuthService.EscapeLdapFilter(input).ShouldBe(expected); } [Theory] [InlineData("cn=joe,ou=Admins,dc=lmxopcua,dc=local", "Admins")] [InlineData("cn=alice,dc=lmxopcua,dc=local", null)] [InlineData("ou=Admins,dc=lmxopcua,dc=local", "Admins")] public void ExtractOuSegment_returns_first_ou(string dn, string? expected) { LdapAuthService.ExtractOuSegment(dn).ShouldBe(expected); } [Theory] [InlineData("cn=Admins,dc=lmxopcua,dc=local", "Admins")] [InlineData("cn=Admins", "Admins")] [InlineData("Admins", "Admins")] public void ExtractFirstRdnValue_handles_full_and_short_dns(string dn, string expected) { LdapAuthService.ExtractFirstRdnValue(dn).ShouldBe(expected); } }