public void FromMessageWithNonMatchingMessageType()
        {
            var serializers = new Mock <IStoreObjectSerializers>();
            var translator  = new CommandInvocationConverter(serializers.Object);

            var msg  = new SuccessMessage(new EndpointId("a"), new MessageId());
            var data = translator.FromMessage(msg);

            Assert.IsInstanceOf(typeof(UnknownMessageTypeData), data);
            Assert.AreSame(msg.Id, data.Id);
            Assert.AreSame(msg.Sender, data.Sender);
            Assert.AreSame(msg.InResponseTo, data.InResponseTo);
        }
        public void FromMessage()
        {
            var serializers = new Mock <IStoreObjectSerializers>();
            {
                serializers.Setup(s => s.HasSerializerFor(It.IsAny <Type>()))
                .Returns(true);
                serializers.Setup(s => s.SerializerFor(It.IsAny <Type>()))
                .Returns(new NonTransformingObjectSerializer());
            }

            var translator = new CommandInvocationConverter(serializers.Object);

            var id  = CommandId.Create(typeof(int).GetMethod("CompareTo", new[] { typeof(object) }));
            var msg = new CommandInvokedMessage(
                new EndpointId("a"),
                new CommandInvokedData(
                    id,
                    new[]
            {
                new CommandParameterValueMap(
                    new CommandParameterDefinition(typeof(object), "other", CommandParameterOrigin.FromCommand),
                    1),
            }));
            var data = translator.FromMessage(msg);

            Assert.IsInstanceOf(typeof(CommandInvocationData), data);
            Assert.AreSame(msg.Id, data.Id);
            Assert.AreSame(msg.Sender, data.Sender);
            Assert.AreSame(msg.InResponseTo, data.InResponseTo);
            Assert.AreEqual(CommandIdExtensions.Serialize(id), ((CommandInvocationData)data).CommandId);
            Assert.AreEqual(msg.Invocation.Parameters.Length, ((CommandInvocationData)data).ParameterTypes.Length);
            Assert.AreEqual(
                msg.Invocation.Parameters[0].Parameter.Type.FullName,
                ((CommandInvocationData)data).ParameterTypes[0].FullName);
            Assert.AreEqual(
                msg.Invocation.Parameters[0].Parameter.Type.Assembly.GetName().Name,
                ((CommandInvocationData)data).ParameterTypes[0].AssemblyName);

            Assert.AreEqual(msg.Invocation.Parameters.Length, ((CommandInvocationData)data).ParameterNames.Length);
            Assert.AreEqual(
                msg.Invocation.Parameters[0].Parameter.Name,
                ((CommandInvocationData)data).ParameterNames[0]);

            Assert.AreEqual(msg.Invocation.Parameters.Length, ((CommandInvocationData)data).ParameterValues.Length);
            Assert.AreEqual(
                msg.Invocation.Parameters[0].Value,
                ((CommandInvocationData)data).ParameterValues[0]);
        }