public void TestMethod1()
        {
            var listaContratos = DatosPruebaContrato.ContratoIND();
            var listaReglas    = DatosPruebaRegla.ReglaCambioNombrePosicionPreIND();

            // Act

            var contrato       = listaContratos.FirstOrDefault();
            var fechaInicioAux = contrato.GetType().GetProperty("FechaInicio").ToString();
            var re             = listaContratos.FirstOrDefault();

            EjecutarSalida.Inicio(contrato, new System.Collections.Generic.List <SalidaGenerica>()
            {
                new SalidaGenerica
                {
                    NombrePropiedad = "Region",
                    Valor           = "Costa",
                },
                new SalidaGenerica
                {
                    NombrePropiedad = "Version",
                    Valor           = "1000000",
                },
                new SalidaGenerica
                {
                    NombrePropiedad = "DeducibleTotal",
                    Valor           = "55.23",
                },
                new SalidaGenerica
                {
                    NombrePropiedad = "FechaInicio",
                    Valor           = "20/20/2019",
                },
                new SalidaGenerica
                {
                    NombrePropiedad = "EsDeducibleAnual",
                    Valor           = "true",
                }
            });

            // Assert
            Assert.AreEqual("Costa", contrato.GetType().GetProperty("Region").ToString());
            Assert.AreEqual(1000000, contrato.GetType().GetProperty("Version").ToString());
            Assert.AreEqual(55.23, contrato.GetType().GetProperty("DeducibleTotal").ToString());
            if (contrato.GetType().GetProperty("FechaInicio").ToString() != fechaInicioAux)
            {
                Assert.AreEqual("10/09/2019 00:00:00", contrato.GetType().GetProperty("FechaInicio").ToString());
            }

            Assert.AreEqual(true, contrato.GetType().GetProperty("EsDeducibleAnual").ToString());
        }
        public void ValidarReglasAprobadas()
        {
            var listaContratos = DatosPruebaContrato.Contrato743089();
            var listaReglas    = DatosPruebaRegla.ReglasAprobadas();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes, 52876, 92);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarDeducibleContrato()
        {
            var listaContratos = DatosPruebaContrato.Contrato743089();
            var listaReglas    = DatosPruebaRegla.ReglaDeducibleCendiavia();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes, 5045201, 10319);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarReglaCambioNombrePosicionDesconocidaContratoIND()
        {
            var listaContratos = DatosPruebaContrato.ContratoIND();
            var listaReglas    = DatosPruebaRegla.ReglaCambioNombrePosicionDesconocidaIND();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                Assert.AreEqual("Ideal 4d Sierra", listaContratosRespuesta.FirstOrDefault().NombrePlan);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarReglaCambioNombreSobreescribirContratoIND()
        {
            var listaContratos = DatosPruebaContrato.ContratoIND();
            var listaReglas    = DatosPruebaRegla.ReglaCambioNombreSobreescribirIND();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                Assert.AreEqual("Producto Individual -", listaContratosRespuesta.FirstOrDefault().NombrePlan);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarReglaCambioObservacionPosicionDesconocidaPlanContratoIND()
        {
            var listaContratos = DatosPruebaContrato.ContratoIND();
            var listaReglas    = DatosPruebaRegla.ReglaCambioObservacionPosicionDesconocidaIND();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                Assert.AreEqual("Contrato impago, favor comuníquese con Saludsa al 6020920 o escribe al [email protected]", listaContratosRespuesta.FirstOrDefault().Observaciones);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarReglaEntradaBeneficiarioNull()
        {
            var listaContratos = DatosPruebaContrato.ContratoIND();
            var listaReglas    = DatosPruebaRegla.ReglaEntradaBeneficiarioNull();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                Assert.AreEqual(mensajes.Count, 0);
                Assert.AreEqual(listaContratosRespuesta[0].NombrePlan, "Producto Individual");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarReglaEdadContratoCOR()
        {
            var listaContratos = DatosPruebaContrato.ContratoCOR();
            var listaReglas    = DatosPruebaRegla.ReglaEdad1Prep();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                Assert.IsTrue(mensajes.Count == 0);
                Assert.IsTrue(listaContratosRespuesta[0].Beneficiarios.Where(b => b.Edad >= 18).ToList().TrueForAll(b => b.Observaciones.Equals("Producto corporativo")));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarReglaCodigoPlanContratoINDFueraRango()
        {
            var listaContratos = DatosPruebaContrato.ContratoIND();
            var listaReglas    = DatosPruebaRegla.ReglaCodigoPlan1PrepFueraRango();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                Assert.IsTrue(mensajes.Count == 0);
                Assert.IsTrue(listaContratosRespuesta[0].NombrePlan.Equals("Ideal 4d Sierra", StringComparison.InvariantCultureIgnoreCase));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarReglaDeducibleTotal2PrepContratoIND()
        {
            var listaContratos = DatosPruebaContrato.ContratoIND();
            var listaReglas    = DatosPruebaRegla.ReglaDeducibleTotal2Prep();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                Assert.IsTrue(mensajes.Count == 0);
                Assert.IsTrue(listaContratosRespuesta[0].NombrePlan.Equals("Producto Individual", StringComparison.InvariantCultureIgnoreCase));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarReglaContratoYReglaVacia()
        {
            var listaContratos = DatosPruebaContrato.ContratoVacio();
            var listaReglas    = DatosPruebaRegla.ReglaVacia();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var temp   = gestor.AplicarReglasContratoCobertura(out var mensajes);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Assert.AreEqual(0, listaContratos.Count);
            Assert.AreEqual(0, listaReglas.Count);
        }
        public void ValidarReglaSuperaDeducible()
        {
            var listaContratos = DatosPruebaContrato.ContratoCOR();
            var listaReglas    = DatosPruebaRegla.ReglaSuperaDeducible();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                var beneficiario            = listaContratosRespuesta[0].Beneficiarios.First(b => b.NumeroPersona == 692540);

                Assert.IsNotNull(beneficiario);
                Assert.AreEqual(mensajes.Count, 0);
                Assert.AreEqual(beneficiario.BeneficiosPlan.First(bp => bp.CodigoBeneficio == "A002").Valor, 12);
                Assert.IsTrue(beneficiario.BeneficiosPlan.Where(bp => bp.EsPorcentaje).ToList().TrueForAll(bp => !bp.Credito));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void ValidarCambioNombrePlan()
        {
            var listaContratos = DatosPruebaContrato.ContratosUsuario0908848617();
            var listaReglas    = DatosPruebaRegla.ReglasCambioNombrePlanDifare_ObservacionContratoVigente_NoCumpleDeducible_CreditoFalso();

            try
            {
                var gestor = new GestorReglaContrato <Contrato>(listaReglas, listaContratos);
                var listaContratosRespuesta = gestor.AplicarReglasContratoCobertura(out var mensajes);
                var contratosINDXPR         = listaContratosRespuesta.Where(c => new[] { "IND", "XPR" }.Contains(c.Producto)).ToList();
                var contratosCORPOO         = listaContratosRespuesta.Where(c => new[] { "COR", "POO" }.Contains(c.Producto)).ToList();

                //Assert.AreEqual(listaMensajes.Count, 1);
                //Assert.IsTrue(listaMensajes[0].Codigo.Equals("LISTA_REGLAS_VACIA"));

                Assert.AreEqual(mensajes.Count, 0);
                Assert.IsTrue(contratosINDXPR.TrueForAll(c => c.NombrePlan.Contains("<<SALUD - Cobro Fee + Min $ 10.00>>")));
                Assert.IsTrue(contratosCORPOO.TrueForAll(c => c.NombrePlan.Contains("<<SALUD>>")));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }