feat: create request projects for basic CQRS
This commit is contained in:
commit
d614788e06
190 changed files with 12236 additions and 0 deletions
111
src/request.dispatcher.tests/ScalarBehaviourTests.cs
Normal file
111
src/request.dispatcher.tests/ScalarBehaviourTests.cs
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
// Copyright (c) The Geekeey Authors
|
||||
// SPDX-License-Identifier: EUPL-1.2
|
||||
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Geekeey.Request.Dispatcher.Tests;
|
||||
|
||||
internal sealed class ScalarBehaviourTests
|
||||
{
|
||||
[Test]
|
||||
public async Task I_can_execute_the_closed_behaviour()
|
||||
{
|
||||
var sc = new ServiceCollection();
|
||||
sc.AddSingleton<ScalarTestTracker>();
|
||||
sc.AddRequestDispatcher(builder => builder
|
||||
.Add(typeof(ScalarTestHandler))
|
||||
.Add(typeof(ScalarTestBehavior)));
|
||||
var provider = sc.BuildServiceProvider();
|
||||
var dispatcher = provider.GetRequiredService<IRequestDispatcher>();
|
||||
var tracker = provider.GetRequiredService<ScalarTestTracker>();
|
||||
|
||||
var request = new ScalarTestRequest { Value = "Hello" };
|
||||
var result = await dispatcher.DispatchAsync(request);
|
||||
|
||||
await Assert.That(result).IsEquivalentTo("Hello-Handled");
|
||||
await Assert.That(tracker.Executed).IsTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task I_can_execute_the_open_behaviour()
|
||||
{
|
||||
var sc = new ServiceCollection();
|
||||
sc.AddSingleton<ScalarTestTracker>();
|
||||
sc.AddRequestDispatcher(builder => builder
|
||||
.Add(typeof(ScalarTestHandler))
|
||||
.Add(typeof(ScalarOpenBehavior<,>)));
|
||||
var provider = sc.BuildServiceProvider();
|
||||
var dispatcher = provider.GetRequiredService<IRequestDispatcher>();
|
||||
var tracker = provider.GetRequiredService<ScalarTestTracker>();
|
||||
|
||||
var request = new ScalarTestRequest { Value = "Hello" };
|
||||
var result = await dispatcher.DispatchAsync(request);
|
||||
|
||||
await Assert.That(result).IsEquivalentTo("Hello-Handled");
|
||||
await Assert.That(tracker.Executed).IsTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task I_can_chain_the_behaviours_in_order()
|
||||
{
|
||||
var sc = new ServiceCollection();
|
||||
sc.AddSingleton<ScalarTestTracker>();
|
||||
sc.AddRequestDispatcher(builder => builder
|
||||
.Add(typeof(ScalarTestHandler))
|
||||
.Add(typeof(ScalarChainedBehaviour1))
|
||||
.Add(typeof(ScalarChainedBehaviour2)));
|
||||
var provider = sc.BuildServiceProvider();
|
||||
var dispatcher = provider.GetRequiredService<IRequestDispatcher>();
|
||||
var tracker = provider.GetRequiredService<ScalarTestTracker>();
|
||||
|
||||
var request = new ScalarTestRequest { Value = "Hello" };
|
||||
await dispatcher.DispatchAsync(request);
|
||||
|
||||
// They are discovered in the order they appear in the assembly.
|
||||
// In this file: ChainedBehaviour1, ChainedBehaviour2
|
||||
await Assert.That(tracker.Log).Count().IsEqualTo(2);
|
||||
await Assert.That(tracker.Log[0]).IsEquivalentTo("Behaviour1");
|
||||
await Assert.That(tracker.Log[1]).IsEquivalentTo("Behaviour2");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task I_can_work_with_a_generic_wrapper_request_and_the_open_behaviour()
|
||||
{
|
||||
var sc = new ServiceCollection();
|
||||
sc.AddSingleton<ScalarTestTracker>();
|
||||
sc.AddRequestDispatcher(builder => builder
|
||||
.Add(typeof(ScalarTestWrapperHandler<>))
|
||||
.Add(typeof(ScalarWrapperBehavior<>)));
|
||||
var provider = sc.BuildServiceProvider();
|
||||
var dispatcher = provider.GetRequiredService<IRequestDispatcher>();
|
||||
var tracker = provider.GetRequiredService<ScalarTestTracker>();
|
||||
|
||||
var request = new ScalarTestWrapperRequest<int> { Item = 42 };
|
||||
var result = await dispatcher.DispatchAsync(request);
|
||||
|
||||
await Assert.That(result).IsEquivalentTo("Handled-42");
|
||||
await Assert.That(tracker.Executed).IsTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task I_can_maintain_the_ordering_between_open_and_closed_behaviours()
|
||||
{
|
||||
var sc = new ServiceCollection();
|
||||
sc.AddSingleton<ScalarTestTracker>();
|
||||
sc.AddRequestDispatcher(builder => builder
|
||||
.Add(typeof(ScalarTestHandler))
|
||||
.Add(typeof(ScalarOrderingOpenBehavior<,>))
|
||||
.Add(typeof(ScalarOrderingClosedBehavior)));
|
||||
var provider = sc.BuildServiceProvider();
|
||||
var dispatcher = provider.GetRequiredService<IRequestDispatcher>();
|
||||
var tracker = provider.GetRequiredService<ScalarTestTracker>();
|
||||
|
||||
var request = new ScalarTestRequest { Value = "Order" };
|
||||
await dispatcher.DispatchAsync(request);
|
||||
|
||||
await Assert.That(tracker.Log).Contains("OrderingOpen");
|
||||
await Assert.That(tracker.Log).Contains("OrderingClosed");
|
||||
}
|
||||
}
|
||||
|
||||
// Moved to _fixtures
|
||||
Loading…
Reference in a new issue