public async Task WithMessageRouting_WithMessageHandlerContextFilter_GoesThroughRegisteredMessageHandlers() { // Arrange var services = new ServiceCollection(); var collection = new MessageHandlerCollection(services); var spyHandler = new StubTestMessageHandler <TestMessage, TestMessageContext>(); var ignoredSameTypeHandler = new StubTestMessageHandler <TestMessage, TestMessageContext>(); var ignoredDefaultHandler = new DefaultTestMessageHandler(); var ignoredHandler = new TestMessageHandler(); collection.WithMessageHandler <DefaultTestMessageHandler, TestMessage>(serviceProvider => ignoredDefaultHandler) .WithMessageHandler <StubTestMessageHandler <TestMessage, TestMessageContext>, TestMessage, TestMessageContext>( messageContextFilter: ctx => false, implementationFactory: serviceProvider => ignoredSameTypeHandler) .WithMessageHandler <StubTestMessageHandler <TestMessage, TestMessageContext>, TestMessage, TestMessageContext>(serviceProvider => spyHandler) .WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>(serviceProvider => ignoredHandler); // Act services.AddMessageRouting(); // Assert IServiceProvider provider = services.BuildServiceProvider(); var router = provider.GetRequiredService <IMessageRouter>(); var correlationInfo = new MessageCorrelationInfo("operation-id", "transaction-id"); var context = TestMessageContext.Generate(); string json = JsonConvert.SerializeObject(new TestMessage()); await router.RouteMessageAsync(json, context, correlationInfo, CancellationToken.None); Assert.True(spyHandler.IsProcessed); Assert.False(ignoredSameTypeHandler.IsProcessed); Assert.False(ignoredDefaultHandler.IsProcessed); Assert.False(ignoredHandler.IsProcessed); }
public async Task CustomMessageHandler_WithContextFilter_UsesMessageTypeDuringSelection() { // Arrange var spyHandler = new StubTestMessageHandler <Purchase, MessageContext>(); var collection = new MessageHandlerCollection(new ServiceCollection()); collection.WithMessageHandler <StubTestMessageHandler <Order, MessageContext>, Order>(); collection.WithMessageHandler <StubTestMessageHandler <Purchase, TestMessageContext>, Purchase, TestMessageContext>(); collection.WithMessageHandler <StubTestMessageHandler <Purchase, MessageContext>, Purchase>(provider => spyHandler); IServiceProvider serviceProvider = collection.Services.BuildServiceProvider(); var router = new TestMessageRouter(serviceProvider, _logger); var purchase = new Purchase { CustomerName = _bogusGenerator.Name.FullName(), Price = _bogusGenerator.Commerce.Price() }; string purchaseJson = JsonConvert.SerializeObject(purchase); var context = new MessageContext("message-id", new Dictionary <string, object>()); var correlationInfo = new MessageCorrelationInfo("operation-id", "transaction-id"); // Act await router.RouteMessageAsync(purchaseJson, context, correlationInfo, CancellationToken.None); // Assert Assert.True(spyHandler.IsProcessed); }