feat: add inital in memory dispatcher
All checks were successful
default / dotnet-default-workflow (push) Successful in 1m29s
All checks were successful
default / dotnet-default-workflow (push) Successful in 1m29s
Add a simple in memory dispatcher for scalar requests and stream request.
This commit is contained in:
commit
af610beb8f
145 changed files with 6384 additions and 0 deletions
120
src/request.tests/RequestDispatcherBuilderExtensionsTests.cs
Normal file
120
src/request.tests/RequestDispatcherBuilderExtensionsTests.cs
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
// 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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue