using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using ZB.MOM.WW.Auth.Abstractions.ApiKeys; using ZB.MOM.WW.Auth.ApiKeys.SqlServer.DependencyInjection; namespace ZB.MOM.WW.Auth.ApiKeys.SqlServer.Tests; public sealed class SqlServerApiKeyServiceCollectionExtensionsTests { private static IConfiguration MinimalConfig() => new ConfigurationBuilder().AddInMemoryCollection(new Dictionary { ["ApiKeys:TokenPrefix"] = "sbk", ["ApiKeys:PepperSecretName"] = "Pepper", ["Pepper"] = "0123456789abcdef", ["ApiKeys:SqlServer:ConnectionString"] = "Server=unused;TrustServerCertificate=true", }).Build(); [Fact] public void AddZbApiKeyAuthSqlServer_DisplacesSqliteStoresAndMigrator() { var services = new ServiceCollection(); services.AddZbApiKeyAuthSqlServer(MinimalConfig(), "ApiKeys", "ApiKeys:SqlServer"); using ServiceProvider sp = services.BuildServiceProvider(); Assert.IsType(sp.GetRequiredService()); Assert.IsType(sp.GetRequiredService()); Assert.IsType(sp.GetRequiredService()); Assert.IsType(sp.GetRequiredService()); Assert.NotNull(sp.GetRequiredService()); Assert.NotNull(sp.GetRequiredService()); } [Fact] public void AddZbApiKeyAuthSqlServer_BindsSqlServerOptionsFromSection() { var config = new ConfigurationBuilder().AddInMemoryCollection(new Dictionary { ["ApiKeys:TokenPrefix"] = "sbk", ["ApiKeys:PepperSecretName"] = "Pepper", ["Pepper"] = "0123456789abcdef", ["ApiKeys:SqlServer:ConnectionString"] = "Server=my-shared-sql;TrustServerCertificate=true", ["ApiKeys:SqlServer:Schema"] = "zbauth_custom", }).Build(); var services = new ServiceCollection(); services.AddZbApiKeyAuthSqlServer(config, "ApiKeys", "ApiKeys:SqlServer"); using ServiceProvider sp = services.BuildServiceProvider(); SqlServerApiKeyOptions options = sp.GetRequiredService>().Value; Assert.Equal("Server=my-shared-sql;TrustServerCertificate=true", options.ConnectionString); Assert.Equal("zbauth_custom", options.Schema); } [Fact] public void AddZbApiKeyAuthSqlServer_RegistersMigrationHostedService() { var services = new ServiceCollection(); services.AddZbApiKeyAuthSqlServer(MinimalConfig(), "ApiKeys", "ApiKeys:SqlServer"); using ServiceProvider sp = services.BuildServiceProvider(); IEnumerable hostedServices = sp.GetServices(); Assert.Contains(hostedServices, s => s.GetType().Name == "ApiKeyMigrationHostedService"); } }