All checks were successful
default / dotnet-default-workflow (push) Successful in 1m29s
Add a simple in memory dispatcher for scalar requests and stream request.
120 lines
No EOL
4.2 KiB
C#
120 lines
No EOL
4.2 KiB
C#
// Copyright (c) The Geekeey Authors
|
|
// SPDX-License-Identifier: EUPL-1.2
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace Geekeey.Request.Tests;
|
|
|
|
internal sealed class RequestDispatcherBuilderExtensionsTests
|
|
{
|
|
[Test]
|
|
public async Task I_can_add_a_type_and_register_the_options()
|
|
{
|
|
// Arrange
|
|
var services = new ServiceCollection();
|
|
var builder = services.AddRequestDispatcher();
|
|
var type = typeof(TestHandler);
|
|
|
|
// Act
|
|
builder.Add(type);
|
|
|
|
// Assert
|
|
var provider = services.BuildServiceProvider();
|
|
var options = provider.GetRequiredService<IOptions<RequestDispatcherOptions>>().Value;
|
|
|
|
var handlers = options.GetRequestHandlers<IScalarRequestHandler<TestRequest, string>>(provider);
|
|
await Assert.That(handlers).Count().IsEqualTo(1);
|
|
await Assert.That(handlers.First()).IsTypeOf<TestHandler>();
|
|
}
|
|
|
|
[Test]
|
|
public async Task I_can_add_a_type_with_a_lifetime_and_register_the_options_and_service()
|
|
{
|
|
// Arrange
|
|
var services = new ServiceCollection();
|
|
var builder = services.AddRequestDispatcher();
|
|
var type = typeof(TestHandler);
|
|
var lifetime = ServiceLifetime.Scoped;
|
|
|
|
// Act
|
|
builder.Add(type, lifetime);
|
|
|
|
// Assert
|
|
var serviceDescriptor = services.FirstOrDefault(sd => sd.ServiceType == type);
|
|
await Assert.That(serviceDescriptor).IsNotNull();
|
|
await Assert.That(serviceDescriptor.Lifetime).IsEqualTo(lifetime);
|
|
await Assert.That(serviceDescriptor.ImplementationType).IsEqualTo(type);
|
|
|
|
var provider = services.BuildServiceProvider();
|
|
var options = provider.GetRequiredService<IOptions<RequestDispatcherOptions>>().Value;
|
|
var handlers = options.GetRequestHandlers<IScalarRequestHandler<TestRequest, string>>(provider);
|
|
|
|
await Assert.That(handlers).Count().IsEqualTo(1);
|
|
}
|
|
|
|
[Test]
|
|
public async Task I_can_add_an_enumerable_of_types_and_register_the_options()
|
|
{
|
|
// Arrange
|
|
var services = new ServiceCollection();
|
|
var builder = services.AddRequestDispatcher();
|
|
var types = new[] { typeof(TestHandler), typeof(AnotherTestHandler) };
|
|
|
|
// Act
|
|
builder.Add(types);
|
|
|
|
// Assert
|
|
var provider = services.BuildServiceProvider();
|
|
var options = provider.GetRequiredService<IOptions<RequestDispatcherOptions>>().Value;
|
|
|
|
var handlers1 = options.GetRequestHandlers<IScalarRequestHandler<TestRequest, string>>(provider);
|
|
await Assert.That(handlers1).Count().IsEqualTo(1);
|
|
await Assert.That(handlers1.First()).IsTypeOf<TestHandler>();
|
|
|
|
var handlers2 = options.GetRequestHandlers<IScalarRequestHandler<AnotherTestRequest, string>>(provider);
|
|
await Assert.That(handlers2).Count().IsEqualTo(1);
|
|
await Assert.That(handlers2.First()).IsTypeOf<AnotherTestHandler>();
|
|
}
|
|
|
|
[Test]
|
|
public async Task I_can_add_an_enumerable_of_types_with_a_lifetime_and_register_the_options_and_services()
|
|
{
|
|
// Arrange
|
|
var services = new ServiceCollection();
|
|
var builder = services.AddRequestDispatcher();
|
|
var types = new[] { typeof(TestHandler), typeof(AnotherTestHandler) };
|
|
var lifetime = ServiceLifetime.Singleton;
|
|
|
|
// Act
|
|
builder.Add(types, lifetime);
|
|
|
|
// Assert
|
|
foreach (var type in types)
|
|
{
|
|
var serviceDescriptor = services.FirstOrDefault(sd => sd.ServiceType == type);
|
|
await Assert.That(serviceDescriptor).IsNotNull();
|
|
await Assert.That(serviceDescriptor.Lifetime).IsEqualTo(lifetime);
|
|
}
|
|
|
|
var provider = services.BuildServiceProvider();
|
|
var options = provider.GetRequiredService<IOptions<RequestDispatcherOptions>>().Value;
|
|
|
|
await Assert.That(options.GetRequestHandlers<IScalarRequestHandler<TestRequest, string>>(provider)).Count().IsEqualTo(1);
|
|
await Assert.That(options.GetRequestHandlers<IScalarRequestHandler<AnotherTestRequest, string>>(provider)).Count().IsEqualTo(1);
|
|
}
|
|
|
|
[Test]
|
|
public async Task I_can_see_it_throw_when_the_builder_is_null()
|
|
{
|
|
IRequestDispatcherBuilder builder = null!;
|
|
|
|
using (Assert.Multiple())
|
|
{
|
|
await Assert.That(() => builder.Add(typeof(TestHandler))).Throws<ArgumentNullException>();
|
|
await Assert.That(() => builder.Add(typeof(TestHandler), ServiceLifetime.Transient)).Throws<ArgumentNullException>();
|
|
await Assert.That(() => builder.Add([typeof(TestHandler)])).Throws<ArgumentNullException>();
|
|
await Assert.That(() => builder.Add([typeof(TestHandler)], ServiceLifetime.Transient)).Throws<ArgumentNullException>();
|
|
}
|
|
}
|
|
} |