public ISOMensaje Parse(GrupoMensaje grupoMensaje, byte[] data)
        {
            ISOMensaje isoData = new ISOMensaje();
            if (data.Length > 0)
            {
                int index = 0;
                var valoresSelector = new List<string>();
                foreach (var campoMaestro in grupoMensaje.CamposMaestro)
                {
                    byte[] campoData = new byte[campoMaestro.LongitudTotal];
                    Array.Copy(data, index, campoData, 0, campoMaestro.LongitudTotal);
                    isoData.Campos.Add(campoData);
                    index += campoMaestro.LongitudTotal;

                    if (campoMaestro.Selector) valoresSelector.Add(byteConverter.Convert(campoData));
                }

                var mensaje = grupoMensaje.MensajePorSelector(valoresSelector);
                if (mensaje == null)
                    throw new Exception("No se encontró ningun mensaje que concuerde con los selectores enviados");

                foreach (var campo in mensaje.Campos)
                {
                    byte[] campoData = new byte[campo.LongitudTotal];
                    Array.Copy(data, index, campoData, 0, campo.LongitudTotal);
                    isoData.Campos.Add(campoData);
                    index += campo.LongitudTotal;
                }
            }
            return isoData;
        }
        public void RetornaMensajePorSelector()
        {
            GrupoMensaje grupoMensaje = new GrupoMensaje();
            grupoMensaje.Mensajes = new[] { new Mensaje { Campos = new[] { new Campo { Selector = true, SelectorRequest = "123" } } } };

            var mensaje = grupoMensaje.MensajePorSelector(new[] { "123" });

            Assert.AreEqual(mensaje, grupoMensaje.Mensajes[0]);
        }
        public void RetornaNullSinoEncuentraSelectorDadoVariosValores()
        {
            GrupoMensaje grupoMensaje = new GrupoMensaje();
            grupoMensaje.Mensajes = new[] { new Mensaje { Campos = new[]
                {
                    new Campo { Selector = true, SelectorRequest = "123" }
                } } };

            var mensaje = grupoMensaje.MensajePorSelector(new[] { "123", "456" });

            Assert.IsNull(mensaje);
        }
        public void RetornaMensajePorSelectorCuandoElGrupoTieneVariosMensajes()
        {
            GrupoMensaje grupoMensaje = new GrupoMensaje();
            grupoMensaje.Mensajes = new[] {
                new Mensaje { Campos = new[]
                {
                    new Campo { Selector = true,SelectorRequest = "426"},
                    new Campo { Selector = true, SelectorRequest = "123" }
                } },
                new Mensaje { Campos = new[]
                {
                    new Campo { Selector = true,SelectorRequest = "456"},
                    new Campo { Selector = true, SelectorRequest = "123" }
                } }
            };

            var mensaje = grupoMensaje.MensajePorSelector(new[] { "123", "456" });

            Assert.AreEqual(mensaje, grupoMensaje.Mensajes[1]);
        }
        public void RetornaNullSiNoEncuentraUnMensajePorSelector()
        {
            GrupoMensaje grupoMensaje = new GrupoMensaje();
            grupoMensaje.Mensajes = new[] { new Mensaje { Campos = new[] { new Campo { Selector = false } } } };

            var mensaje = grupoMensaje.MensajePorSelector(new[] { "123" });

            Assert.AreEqual(mensaje, null);
        }