public void Updating_the_message_to_a_new_type_should_update_the_MessageType()
        {
            var mapper  = new MessageMapper();
            var message = mapper.CreateInstance <IMyMessage>(m => m.Id = Guid.NewGuid());

            var context = new OutgoingLogicalMessageContext("message1234", new Dictionary <string, string>(), new OutgoingLogicalMessage(typeof(IMyMessage), message), null, null);

            var differentMessage = new MyDifferentMessage
            {
                Id = Guid.NewGuid()
            };

            context.UpdateMessage(differentMessage);

            Assert.AreEqual(typeof(MyDifferentMessage), context.Message.MessageType);
        }
        public void Updating_the_message_proxy_instance_with_a_new_property_value_should_retain_the_original_interface_type()
        {
            var mapper  = new MessageMapper();
            var message = mapper.CreateInstance <IMyMessage>(m => m.Id = Guid.NewGuid());

            var context = new OutgoingLogicalMessageContext("message1234", new Dictionary <string, string>(), new OutgoingLogicalMessage(typeof(IMyMessage), message), null, null);

            var newMessageId = Guid.NewGuid();
            var newMessage   = context.Message.Instance;

            newMessage.GetType().InvokeMember("Id",
                                              BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
                                              Type.DefaultBinder, newMessage, new object[]
            {
                newMessageId
            });

            context.UpdateMessage(newMessage);

            Assert.AreEqual(typeof(IMyMessage), context.Message.MessageType);
            Assert.AreEqual(newMessageId, ((IMyMessage)context.Message.Instance).Id);
        }