Skip to content

Commit f645b68

Browse files
committed
added test to ensure that open handlers are resolved when the handler for the request does not have a defined closed implementation / registration.
1 parent d40d0f4 commit f645b68

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

test/MediatR.Tests/SendTests.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,18 @@ public Task Handle(VoidGenericPing<T> request, CancellationToken cancellationTok
105105
}
106106
}
107107

108+
public class PongExtension : Pong
109+
{
110+
111+
}
108112

109-
public class TestClass1PingRequestHandler : IRequestHandler<VoidGenericPing<Pong>>
113+
public class TestClass1PingRequestHandler : IRequestHandler<VoidGenericPing<PongExtension>>
110114
{
111115
private readonly Dependency _dependency;
112116

113117
public TestClass1PingRequestHandler(Dependency dependency) => _dependency = dependency;
114118

115-
public Task Handle(VoidGenericPing<Pong> request, CancellationToken cancellationToken)
119+
public Task Handle(VoidGenericPing<PongExtension> request, CancellationToken cancellationToken)
116120
{
117121
_dependency.CalledSpecific = true;
118122
return Task.CompletedTask;
@@ -246,14 +250,32 @@ public async Task Should_resolve_closed_handler_if_defined()
246250
var services = new ServiceCollection();
247251
services.AddSingleton(dependency);
248252
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly()));
249-
services.AddTransient<IRequestHandler<VoidGenericPing<Pong>>,TestClass1PingRequestHandler>();
253+
services.AddTransient<IRequestHandler<VoidGenericPing<PongExtension>>,TestClass1PingRequestHandler>();
250254
var serviceProvider = services.BuildServiceProvider();
251255
var mediator = serviceProvider.GetService<IMediator>()!;
252256

253-
var request = new VoidGenericPing<Pong>();
257+
var request = new VoidGenericPing<PongExtension>();
254258
await mediator.Send(request);
255259

256260
dependency.Called.ShouldBeFalse();
257261
dependency.CalledSpecific.ShouldBeTrue();
258262
}
263+
264+
[Fact]
265+
public async Task Should_resolve_open_handler_if_not_defined()
266+
{
267+
var dependency = new Dependency();
268+
var services = new ServiceCollection();
269+
services.AddSingleton(dependency);
270+
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly()));
271+
services.AddTransient<IRequestHandler<VoidGenericPing<PongExtension>>, TestClass1PingRequestHandler>();
272+
var serviceProvider = services.BuildServiceProvider();
273+
var mediator = serviceProvider.GetService<IMediator>()!;
274+
275+
var request = new VoidGenericPing<Pong>();
276+
await mediator.Send(request);
277+
278+
dependency.Called.ShouldBeTrue();
279+
dependency.CalledSpecific.ShouldBeFalse();
280+
}
259281
}

0 commit comments

Comments
 (0)