/// <summary>
        /// Consulta una estrategia
        /// </summary>
        /// <param name="estrategiaID"></param>
        /// <returns></returns>
        public List <EstrategiaDTO> SelectEstrategia(int estrategiaID)
        {
            List <EstrategiaDTO> listEstrategias = new List <EstrategiaDTO>();
            StringBuilder        query           = new StringBuilder().Append(@"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                            SELECT 
                            T0.ESTRATEGIA_ID,
                            T0.NOMBRE,
                            T2.ESTADO_ID,
                            T2.NOMBRE NOMBREESTADO,
                            T1.APLICACION_ID,
                            T5.NUMERO,
                            T1.DESCRIPCION,
                            T1.ES_WEB,
                            T1.NOMBRE NOMBREAPLICACION,
                            T5.RUTA_APLICACION,
							T3.TIPOPRUEBA_ID,
							T4.NOMBRE,
							T4.MQTIPOPRUEBA_ID,
							T4.CANTIDAD_EJECUCIONES,
							T4.TIEMPO_EJECUCION,
							T4.SEMILLA,
							T4.API_CONTROLLER,
							T4.API_KEY,
							T4.PARAMETROS
                            FROM ESTRATEGIA T0 
                            INNER JOIN APLICACION T1 ON T0.APLICACION_ID=T1.APLICACION_ID
                            INNER JOIN ESTADO T2 ON T0.ESTADO_ID=T2.ESTADO_ID
							INNER JOIN APPVERSION T5 ON T5.ID=T0.APPVERSION_ID
							LEFT JOIN ESTRATEGIA_TIPOPRUEBA T3 ON T0.ESTRATEGIA_ID=T3.ESTRATEGIA_ID
							LEFT JOIN TIPOPRUEBA T4 ON T3.TIPOPRUEBA_ID=T4.TIPOPRUEBA_ID"                            );

            if (estrategiaID != 0)
            {
                query.Append(" WHERE T0.ESTRATEGIA_ID=@ESTRATEGIA_ID");
            }

            using (var con = ConectarDB())
            {
                con.Open();

                try
                {
                    using (SqlCommand command = new SqlCommand(query.ToString(), con))
                    {
                        if (estrategiaID != 0)
                        {
                            command.Parameters.Add(new SqlParameter("@ESTRATEGIA_ID", estrategiaID));
                        }

                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (!listEstrategias.Exists(e => e.Estrategia_ID == Convert.ToInt32(reader[0])))
                                {
                                    EstrategiaDTO estrategia = new EstrategiaDTO();

                                    estrategia.Estrategia_ID = Convert.ToInt32(reader[0]);
                                    estrategia.Nombre        = reader[1].ToString();
                                    EstadoDTO estado = new EstadoDTO();

                                    //diccionario de estado
                                    var estadoDictionary = GetEstrategiaStatus(estrategia.Estrategia_ID);
                                    //estados
                                    estado.ID     = estadoDictionary.First().Key;
                                    estado.Nombre = estadoDictionary.First().Value;
                                    //agregar el estado
                                    estrategia.Estado = estado;

                                    AplicacionDTO aplicacion = new AplicacionDTO();
                                    aplicacion.Aplicacion_ID   = Convert.ToInt32(reader[4]);
                                    aplicacion.Version         = reader[5].ToString();
                                    aplicacion.Descripcion     = reader[6].ToString();
                                    aplicacion.Es_Web          = Convert.ToInt32(reader[7]) == 1 ? true : false;
                                    aplicacion.Nombre          = reader[8].ToString();
                                    aplicacion.Ruta_Aplicacion = reader[9].ToString();
                                    estrategia.Aplicacion      = aplicacion;
                                    listEstrategias.Add(estrategia);
                                }

                                if (!string.IsNullOrEmpty(reader[10].ToString()))
                                {
                                    TipoPruebaDTO tipoPrueba = new TipoPruebaDTO();

                                    tipoPrueba.ID     = Convert.ToInt32(reader[10]);
                                    tipoPrueba.Nombre = reader[11].ToString();
                                    tipoPrueba.CantidadEjecuciones = Convert.ToInt32(reader[13]);
                                    tipoPrueba.TiempoEjecucion     = Convert.ToDouble(reader[14]);
                                    tipoPrueba.Semilla             = string.IsNullOrEmpty(reader[15].ToString()) ? string.Empty : reader[15].ToString();
                                    tipoPrueba.ApiController       = string.IsNullOrEmpty(reader[16].ToString()) ? string.Empty : reader[16].ToString();
                                    tipoPrueba.ApiKey     = string.IsNullOrEmpty(reader[17].ToString()) ? string.Empty : reader[17].ToString();
                                    tipoPrueba.Parametros = string.IsNullOrEmpty(reader[18].ToString()) ? string.Empty : reader[18].ToString();


                                    MQTipoPruebaDTO mqTipo = new MQTipoPruebaDTO();
                                    if (!string.IsNullOrEmpty(reader[12].ToString()))
                                    {
                                        mqTipo.ID = Convert.ToInt32(reader[12]);
                                        tipoPrueba.MQTipoPrueba = mqTipo;
                                    }
                                    listEstrategias.Find(e => e.Estrategia_ID == Convert.ToInt32(reader[0])).TipoPruebas.Add(tipoPrueba);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Count not insert.");
                }
                finally
                {
                    con.Close();
                }
            }
            return(listEstrategias);
        }
        /// <summary>
        /// lista las pruebas asociadas a una estrategia junto con el historial
        /// </summary>
        /// <param name="estrategia_id"></param>
        /// <param name="tipoprueba_id"></param>
        /// <returns></returns>
        public ReturnMessage ListPruebas(int estrategia_id, int tipoprueba_id)
        {
            ReturnMessage        message      = new ReturnMessage();
            List <TipoPruebaDTO> listaPruebas = new List <TipoPruebaDTO>();
            StringBuilder        query        = new StringBuilder().Append(@"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                            SELECT 
                                T3.TIPOPRUEBA_ID,
                                T3.NOMBRE,
                                T3.PARAMETROS,
                                T3.MQTIPOPRUEBA_ID,
								T4.NOMBRE,
                                T2.ESTRATEGIA_ID,
                                T2.NOMBRE,
                                T0.HISTORIAL_ID,
                                T0.FECHA_EJECUCION,
                                T0.FECHA_FINALIZACION,
                                CASE T0.ESTADO
									WHEN 1 THEN 'EN COLA'
									WHEN 2 THEN 'EN EJECUCION' 
									WHEN 3 THEN 'FINALIZADO'END ESTADO,
                                T0.RUTA_RESULTADOS,
                                T3.API_KEY,
                                T3.API_CONTROLLER
                                FROM HISTORIAL_EJECUCION_PRUEBA T0 
                                RIGHT JOIN ESTRATEGIA_TIPOPRUEBA T1 ON T0.ESTRATEGIA_TIPOPRUEBA=T1.ESTRATEGIA_TIPOPRUEBA_ID
                                INNER JOIN ESTRATEGIA T2 ON T2.ESTRATEGIA_ID=T1.ESTRATEGIA_ID
                                INNER JOIN TIPOPRUEBA T3 ON T3.TIPOPRUEBA_ID=T1.TIPOPRUEBA_ID
								INNER JOIN MQTIPOPRUEBA T4 ON T4.MQTIPOPRUEBA_ID=T3.MQTIPOPRUEBA_ID
                                WHERE 1=1");

            if (estrategia_id != 0)
            {
                query.Append(" AND T2.ESTRATEGIA_ID=@ESTRATEGIA_ID");
            }

            if (tipoprueba_id != 0)
            {
                query.Append(" AND T3.TIPOPRUEBA_ID = @TIPOPRUEBA_ID");
            }

            using (var con = ConectarDB())
            {
                con.Open();

                try
                {
                    using (SqlCommand command = new SqlCommand(query.ToString(), con))
                    {
                        if (estrategia_id != 0)
                        {
                            command.Parameters.Add(new SqlParameter("@ESTRATEGIA_ID", estrategia_id));
                        }

                        if (tipoprueba_id != 0)
                        {
                            command.Parameters.Add(new SqlParameter("@TIPOPRUEBA_ID", tipoprueba_id));
                        }

                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (!listaPruebas.Exists(e => e.ID == Convert.ToInt32(reader[0])))
                                {
                                    TipoPruebaDTO tipoPrueba = new TipoPruebaDTO
                                    {
                                        ID            = Convert.ToInt32(reader[0]),
                                        Nombre        = reader[1].ToString(),
                                        Parametros    = reader[2].ToString(),
                                        ApiKey        = reader[12].ToString(),
                                        ApiController = reader[13].ToString()
                                    };
                                    tipoPrueba.MQTipoPrueba.ID     = Convert.ToInt32(reader[3]);
                                    tipoPrueba.MQTipoPrueba.Nombre = reader[4].ToString();

                                    listaPruebas.Add(tipoPrueba);
                                }

                                if (!string.IsNullOrEmpty(reader[7].ToString()))
                                {
                                    HistorialEjecucionPruebaDTO historial = new HistorialEjecucionPruebaDTO();

                                    historial.FechaEjecucion = Convert.ToDateTime(reader[8]);
                                    if (!DBNull.Value.Equals(reader[9]))
                                    {
                                        historial.FechaFinalizacion = Convert.ToDateTime(reader[9]);
                                    }
                                    historial.Estado         = reader[10].ToString();
                                    historial.RutaResultados = !DBNull.Value.Equals(reader[11].ToString()) ? reader[11].ToString() : string.Empty;



                                    listaPruebas.Find(e => e.ID == Convert.ToInt32(reader[0])).HistorialEjecuciones.Add(historial);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Count not insert.");
                    message.TipoMensaje = TipoMensaje.Error;
                    message.Mensaje     = ex.Message;
                    message.obj         = listaPruebas;
                    return(message);
                }
                finally
                {
                    con.Close();
                }
            }

            message.TipoMensaje = TipoMensaje.Correcto;
            message.obj         = listaPruebas;
            return(message);
        }