using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using ZB.MOM.WW.Auth.Abstractions.Ldap; using ZB.MOM.WW.Auth.AspNetCore; using ZB.MOM.WW.Auth.Ldap; namespace ZB.MOM.WW.Auth.AspNetCore.Tests; public class ServiceCollectionExtensionsTests { private const string LdapSection = "Auth:Ldap"; private const string LdapServer = "ldap.example.com"; private static IConfiguration BuildConfiguration() => new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary { [$"{LdapSection}:Server"] = LdapServer, [$"{LdapSection}:SearchBase"] = "dc=example,dc=com", [$"{LdapSection}:ServiceAccountDn"] = "cn=svc,dc=example,dc=com", [$"{LdapSection}:Transport"] = nameof(LdapTransport.Ldaps), }) .Build(); [Fact] public void AddZbLdapAuth_ResolvesLdapAuthService() { IConfiguration config = BuildConfiguration(); var services = new ServiceCollection(); services.AddZbLdapAuth(config, LdapSection); using ServiceProvider provider = services.BuildServiceProvider(); var service = provider.GetRequiredService(); Assert.NotNull(service); } [Fact] public void AddZbLdapAuth_ILdapAuthService_IsSingleton() { IConfiguration config = BuildConfiguration(); var services = new ServiceCollection(); services.AddZbLdapAuth(config, LdapSection); using ServiceProvider provider = services.BuildServiceProvider(); var first = provider.GetRequiredService(); var second = provider.GetRequiredService(); Assert.Same(first, second); } [Fact] public void AddZbLdapAuth_BindsOptionsFromSection() { IConfiguration config = BuildConfiguration(); var services = new ServiceCollection(); services.AddZbLdapAuth(config, LdapSection); using ServiceProvider provider = services.BuildServiceProvider(); var options = provider.GetRequiredService>(); Assert.Equal(LdapServer, options.Value.Server); Assert.Equal("dc=example,dc=com", options.Value.SearchBase); Assert.Equal(LdapTransport.Ldaps, options.Value.Transport); } [Fact] public void AddZbLdapAuth_RegistersOptionsValidator() { IConfiguration config = BuildConfiguration(); var services = new ServiceCollection(); services.AddZbLdapAuth(config, LdapSection); using ServiceProvider provider = services.BuildServiceProvider(); var validators = provider.GetServices>().ToList(); Assert.Contains(validators, v => v is LdapOptionsValidator); } }