public void ResolveWithPayloadTypeAsWildcardAndNoConverter()
        {
            resolver = new MessageMethodArgumentResolver();

            var message   = MessageBuilder.WithPayload("test").Build();
            var parameter = method.GetParameters()[0];

            Assert.True(resolver.SupportsParameter(parameter));
            Assert.Same(message, resolver.ResolveArgument(parameter, message));
        }
        public MessageMethodArgumentResolverTest()
        {
            method = typeof(MessageMethodArgumentResolverTest)
                     .GetMethod(
                "Handle",
                BindingFlags.NonPublic | BindingFlags.Instance);

            mock      = new Mock <IMessageConverter>();
            converter = mock.Object;
            resolver  = new MessageMethodArgumentResolver(converter);
        }
        public void ResolveWithConversionNeededButNoConverter()
        {
            resolver = new MessageMethodArgumentResolver();

            var message   = MessageBuilder.WithPayload("test").Build();
            var parameter = method.GetParameters()[1];

            Assert.True(resolver.SupportsParameter(parameter));
            var ex = Assert.Throws <MessageConversionException>(() => resolver.ResolveArgument(parameter, message));

            Assert.Contains("Int32", ex.Message);
            Assert.Contains("String", ex.Message);
        }
        public void ResolveWithNewtonJSonConverter()
        {
            var inMessage = MessageBuilder.WithPayload("{\"prop\":\"bar\"}").Build();
            var parameter = method.GetParameters()[5];

            resolver = new MessageMethodArgumentResolver(new NewtonJsonMessageConverter());
            var actual = resolver.ResolveArgument(parameter, inMessage);

            var condition1 = actual is IMessage;

            Assert.True(condition1);
            var outMessage = (IMessage)actual;
            var condition  = outMessage.Payload is Foo;

            Assert.True(condition);
            Assert.Equal("bar", ((Foo)outMessage.Payload).Prop);
        }