Ejemplo n.º 1
0
        public void WithMessageHandlerWithDefaultContext_WithMessageContextFilterWithMessageBodyFilterWithImplementationFactory_UsesSerializer(bool matchesContext, bool matchesBody)
        {
            // Arrange
            var services        = new MessageHandlerCollection(new ServiceCollection());
            var expectedMessage = new TestMessage();
            var expectedContext = new MessageContext($"message-id-{Guid.NewGuid()}", new Dictionary <string, object>());
            var expectedHandler = new DefaultTestMessageHandler();

            // Act
            services.WithMessageHandler <DefaultTestMessageHandler, TestMessage>(
                messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matchesContext);
            },
                messageBodyFilter: body =>
            {
                Assert.Same(expectedMessage, body);
                return(matchesBody);
            },
                implementationFactory: serviceProvider => expectedHandler);

            // Assert
            IServiceProvider             provider = services.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);

            Assert.NotNull(handlers);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            Assert.NotSame(expectedHandler, handler);
            Assert.Equal(matchesContext, handler.CanProcessMessageBasedOnContext(expectedContext));
            Assert.Equal(matchesBody, handler.CanProcessMessageBasedOnMessage(expectedMessage));
        }
Ejemplo n.º 2
0
        public void WithServiceBusMessageHandler_WithMessageContextFilterWithMessageBodyFilterWithImplementationFactory_UsesSerializer(bool matchesContext, bool matchesBody)
        {
            // Arrange
            var collection      = new ServiceBusMessageHandlerCollection(new ServiceCollection());
            var expectedMessage = new TestMessage();
            var expectedContext = AzureServiceBusMessageContextFactory.Generate();
            var expectedHandler = new TestServiceBusMessageHandler();

            // Act
            collection.WithServiceBusMessageHandler <TestServiceBusMessageHandler, TestMessage>(
                messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matchesContext);
            },
                messageBodyFilter: body =>
            {
                Assert.Same(expectedMessage, body);
                return(matchesBody);
            },
                implementationFactory: serviceProvider => expectedHandler);

            // Assert
            IServiceProvider             provider = collection.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);

            Assert.NotNull(handlers);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            Assert.Same(expectedHandler, handler.GetMessageHandlerInstance());
            Assert.Equal(matchesContext, handler.CanProcessMessageBasedOnContext(expectedContext));
            Assert.Equal(matchesBody, handler.CanProcessMessageBasedOnMessage(expectedMessage));
        }
Ejemplo n.º 3
0
        public void WithMessageHandlerWithCustomContext_WithMessageContextFilterWithMessageBodyFilter_UsesSerializer(bool matchesContext, bool matchesBody)
        {
            // Arrange
            var services        = new MessageHandlerCollection(new ServiceCollection());
            var expectedMessage = new TestMessage();
            var expectedContext = TestMessageContext.Generate();
            var expectedHandler = new DefaultTestMessageHandler();

            // Act
            services.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>(
                messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matchesContext);
            },
                messageBodyFilter: body =>
            {
                Assert.Same(expectedMessage, body);
                return(matchesBody);
            });

            // Assert
            IServiceProvider             provider = services.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);

            Assert.NotNull(handlers);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            Assert.NotSame(expectedHandler, handler);
            Assert.Equal(matchesContext, handler.CanProcessMessageBasedOnContext(expectedContext));
            Assert.Equal(matchesBody, handler.CanProcessMessageBasedOnMessage(expectedMessage));
        }
Ejemplo n.º 4
0
        public void WithMessageHandlerWithCustomContext_WithMessageContextFilterWithImplementationFactory_UsesFilter(bool matches)
        {
            // Arrange
            var services        = new MessageHandlerCollection(new ServiceCollection());
            var expectedHandler = new TestMessageHandler();
            var expectedContext = TestMessageContext.Generate();

            // Act
            services.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>(messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matches);
            }, implementationFactory: serviceProvider => expectedHandler);

            // Assert
            IServiceProvider             provider = services.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            Assert.NotSame(expectedHandler, handler);
            bool actual = handler.CanProcessMessageBasedOnContext(expectedContext);

            Assert.Equal(matches, actual);
        }
        public async Task WithMessageHandlerWithDefaultContext_WithMessageContextFilterMessageBodySerializerImplementationFactory_UsesSerializer(bool matches)
        {
            // Arrange
            var services        = new MessageHandlerCollection(new ServiceCollection());
            var expectedBody    = $"test-message-body-{Guid.NewGuid()}";
            var expectedMessage = new TestMessage();
            var expectedContext = new MessageContext("message-id", new Dictionary <string, object>());
            var serializer      = new TestMessageBodySerializer(expectedBody, expectedMessage);

            // Act
            services.WithMessageHandler <DefaultTestMessageHandler, TestMessage>(
                messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matches);
            },
                messageBodySerializerImplementationFactory: serviceProvider => serializer);

            // Assert
            IServiceProvider             provider = services.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);

            Assert.NotNull(handlers);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            bool actual = handler.CanProcessMessageBasedOnContext(expectedContext);

            Assert.Equal(matches, actual);
            MessageResult result = await handler.TryCustomDeserializeMessageAsync(expectedBody);

            Assert.NotNull(result);
            Assert.Same(expectedMessage, result.DeserializedMessage);
        }
Ejemplo n.º 6
0
        public async Task WithMessageHandler_WithMessageContextFilterWithMessageBodySerializer_UsesSerializer(bool matches)
        {
            // Arrange
            var collection      = new ServiceBusMessageHandlerCollection(new ServiceCollection());
            var expectedBody    = $"test-message-body-{Guid.NewGuid()}";
            var expectedMessage = new TestMessage();
            var expectedContext = AzureServiceBusMessageContextFactory.Generate();
            var serializer      = new TestMessageBodySerializer(expectedBody, expectedMessage);

            // Act
            collection.WithServiceBusMessageHandler <TestServiceBusMessageHandler, TestMessage>(
                messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matches);
            },
                messageBodySerializer: serializer);

            // Assert
            IServiceProvider             provider = collection.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);

            Assert.NotNull(handlers);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            bool actual = handler.CanProcessMessageBasedOnContext(expectedContext);

            Assert.Equal(matches, actual);
            MessageResult result = await handler.TryCustomDeserializeMessageAsync(expectedBody);

            Assert.NotNull(result);
            Assert.Same(expectedMessage, result.DeserializedMessage);
        }
Ejemplo n.º 7
0
        public void CustomMessageHandlerFactory_WithMessageBodyAndContextFilter_SubtractsRegistration(bool matchesBody, bool matchesContext)
        {
            // Arrange
            var collection = new MessageHandlerCollection(new ServiceCollection());
            var spyHandler = new TestMessageHandler();

            collection.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>(
                (TestMessageContext messageContext) => matchesContext,
                (TestMessage messageBody) => matchesBody,
                provider => spyHandler);
            ServiceProvider serviceProvider = collection.Services.BuildServiceProvider();

            // Act
            IEnumerable <MessageHandler> messageHandlers = MessageHandler.SubtractFrom(serviceProvider, _logger);

            // Assert
            MessageHandler messageHandler = Assert.Single(messageHandlers);

            Assert.NotNull(messageHandler);

            var context = TestMessageContext.Generate();

            Assert.Equal(matchesContext, messageHandler.CanProcessMessageBasedOnContext(messageContext: context));
            Assert.Equal(matchesBody, messageHandler.CanProcessMessageBasedOnMessage(new TestMessage()));
        }
Ejemplo n.º 8
0
        public void CustomMessageHandlerConstructor_WithDefaultContextFilter_SubtractsRegistration(bool matchesContext)
        {
            // Arrange
            var collection = new MessageHandlerCollection(new ServiceCollection());

            collection.WithMessageHandler <DefaultTestMessageHandler, TestMessage>((MessageContext messageContext) => matchesContext);
            ServiceProvider serviceProvider = collection.Services.BuildServiceProvider();

            // Act
            IEnumerable <MessageHandler> messageHandlers = MessageHandler.SubtractFrom(serviceProvider, _logger);

            // Assert
            MessageHandler messageHandler = Assert.Single(messageHandlers);

            Assert.NotNull(messageHandler);

            var context = new MessageContext("message-id", new Dictionary <string, object>());

            Assert.Equal(matchesContext, messageHandler.CanProcessMessageBasedOnContext(context));
        }
Ejemplo n.º 9
0
        public async Task WithMessageHandlerCustomContext_WithContextFilterWithMessageBodySerializerImplementationFactoryWithMessageBodyFilterWithMessageHandlerImplementationFactory_UsesFilter(bool matchesContext, bool matchesBody)
        {
            // Arrange
            var services        = new MessageHandlerCollection(new ServiceCollection());
            var expectedBody    = $"test-message-body-{Guid.NewGuid()}";
            var expectedMessage = new TestMessage();
            var expectedContext = TestMessageContext.Generate();
            var serializer      = new TestMessageBodySerializer(expectedBody, expectedMessage);
            var expectedHandler = new TestMessageHandler();

            // Act
            services.WithMessageHandler <TestMessageHandler, TestMessage, TestMessageContext>(
                messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matchesContext);
            },
                messageBodySerializerImplementationFactory: serviceProvider => serializer,
                messageBodyFilter: body =>
            {
                Assert.Same(expectedMessage, body);
                return(matchesBody);
            },
                messageHandlerImplementationFactory: serviceProvider => expectedHandler);

            // Assert
            IServiceProvider             provider = services.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            Assert.Same(expectedHandler, handler.GetMessageHandlerInstance());
            Assert.Equal(matchesBody, handler.CanProcessMessageBasedOnMessage(expectedMessage));
            Assert.Equal(matchesContext, handler.CanProcessMessageBasedOnContext(expectedContext));
            MessageResult result = await handler.TryCustomDeserializeMessageAsync(expectedBody);

            Assert.NotNull(result);
            Assert.Same(expectedMessage, result.DeserializedMessage);
        }
Ejemplo n.º 10
0
        public void WithMessageHandlerWithDefaultContext_WithMessageContextFilter_UsesFilter(bool matches)
        {
            // Arrange
            var services        = new MessageHandlerCollection(new ServiceCollection());
            var expectedContext = new MessageContext("message-id", new Dictionary <string, object>());

            // Act
            services.WithMessageHandler <DefaultTestMessageHandler, TestMessage>(messageContextFilter: context =>
            {
                Assert.Same(expectedContext, context);
                return(matches);
            });

            // Assert
            IServiceProvider             provider = services.Services.BuildServiceProvider();
            IEnumerable <MessageHandler> handlers = MessageHandler.SubtractFrom(provider, NullLogger.Instance);
            MessageHandler handler = Assert.Single(handlers);

            Assert.NotNull(handler);
            bool actual = handler.CanProcessMessageBasedOnContext(expectedContext);

            Assert.Equal(matches, actual);
        }