fix(DIExtensions): ConsumerOptions-Eingabe in AddAuthService-Methode hinzugefügt, um Konsuemrn nach der Übernahme aus der Config arrangieren zu können.

- Standardiezd consumerKey Benennung
This commit is contained in:
Developer 02 2025-02-11 13:20:54 +01:00
parent 6694e4b626
commit 7873542aca
3 changed files with 18 additions and 20 deletions

View File

@ -5,7 +5,6 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using DigitalData.Auth.API.Services;
using DigitalData.Auth.API.Services.Contracts;
using Microsoft.Extensions.Configuration;
namespace DigitalData.Auth.Tests.API;
@ -17,7 +16,7 @@ public class AuthHubTests
private Func<Action<ClientParams>, ServiceProvider> Build;
private WebApplication? _app = null;
private readonly WebApplication? _app = null;
private readonly Queue<IAsyncDisposable> _disposableAsync = new();
@ -52,13 +51,12 @@ public class AuthHubTests
// Create and run test server
// Create builder and add SignalR service
var builder = WebApplication.CreateBuilder();
builder.Configuration.AddInMemoryCollection(new Dictionary<string, string?>()
{
{ "Consumers", null }
});
var config = builder.Configuration;
builder.Services.AddSignalR();
builder.Services.AddAuthService(config);
builder.Services.AddAuthService(
config,
consumers => consumers.Add(new(0, "mock", "123", "client.mock")) // Set mock consumer
);
// Listen AvailablePort and map hub
var _app = builder.Build();
@ -69,8 +67,6 @@ public class AuthHubTests
_app.MapHub<Auth.API.Hubs.AuthHub>(hubRoute);
_app.Start();
_disposableAsync.Enqueue(_app);
// Create notifier by app services
_notifier = _app.Services.GetRequiredService<INotifier>();
}
@ -82,6 +78,7 @@ public class AuthHubTests
if (_app is not null)
{
await _app.StopAsync();
await _app.DisposeAsync();
Console.WriteLine("Test server stopped.");
}

View File

@ -13,17 +13,8 @@
<None Remove="API\appsettings.json" />
</ItemGroup>
<ItemGroup>
<Content Include="API\appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit.Analyzers" Version="3.9.0" />

View File

@ -6,9 +6,19 @@ namespace DigitalData.Auth.API.Services;
public static class DIExtensions
{
public static IServiceCollection AddAuthService(this IServiceCollection services, IConfiguration configuration, string key = "Consumers")
public static IServiceCollection AddAuthService(this IServiceCollection services, IConfiguration configuration, Action<List<Consumer>>? consumerOptions = null)
{
var consumers = configuration.GetSection(key).Get<IEnumerable<Consumer>>() ?? throw new InvalidOperationException($"No Consumer list found in {key} in configuration.");
List<Consumer> consumers = new();
var consumerKey = $"{nameof(Consumer)}s";
if (configuration.GetSection(consumerKey).Get<IEnumerable<Consumer>>() is IEnumerable<Consumer> consumersFromConfig)
consumers.AddRange(consumersFromConfig);
consumerOptions?.Invoke(consumers);
if(consumers.Count == 0)
throw new InvalidOperationException($"No Consumer list found in {consumerKey} in configuration.");
services.AddSingleton(Options.Create(consumers));
services.AddSingleton<IConsumerService, ConfiguredConsumerService>();
services.AddSingleton<INotifier, Notifier>();