/// <summary>
        /// Dada una lista de preguntas, las inserta en la base de datos
        /// Devuelve la cantidad de preguntas insertada con exito
        /// </summary>
        public static int CargarPreguntas(IEnumerable <Pregunta> pPreguntas)
        {
            /// Este metodo es horriblemente ineficiente
            /// Pero fue la unica forma que encontre de hacerlo andar
            int cantidad = 0;

            foreach (Pregunta pre in pPreguntas)
            {
                using (var db = new TrabajoDbContext())
                {
                    using (var UoW = new UnitOfWork(db))
                    {
                        // si la pregunta no existe
                        if (UoW.RepositorioPreguntas.Get(pre.Id) == null)
                        {
                            cantidad++;
                            ConjuntoPreguntas conjunto = UoW.RepositorioConjuntoPregunta.Get(pre.Conjunto.Id);
                            pre.Conjunto = conjunto;
                            UoW.RepositorioPreguntas.Add(pre);
                        }

                        UoW.Complete();
                    }
                }
            }

            return(cantidad);
        }
Esempio n. 2
0
        /// <summary>
        /// Dada una web response y un conjunto, construye las preguntas
        /// </summary>
        /// <exception cref="JsonReaderException">Si webResponse no tiene formato adecuado</exception>
        /// <param name="webResponse"></param>
        /// <param name="pConjunto"></param>
        /// <returns>Preguntas construidas</returns>
        public IEnumerable <Pregunta> ParseResponse(WebResponse webResponse, ConjuntoPreguntas pConjunto)
        {
            var preguntas = new List <Pregunta>();


            using (Stream responseStream = webResponse.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);

                // Se parsea la respuesta y se serializa a JSON a un objeto dynamic
                dynamic mResponseJSON = JsonConvert.DeserializeObject(reader.ReadToEnd());

                // Se iteran cada uno de los resultados.
                foreach (var bResponseItem in mResponseJSON.results)
                {
                    // De esta manera se accede a los componentes de cada item
                    string textoPregunta    = HttpUtility.HtmlDecode(bResponseItem.question.ToString());
                    string nombreCategoria  = bResponseItem.category.ToString();
                    string nombreDificultad = HttpUtility.HtmlDecode(bResponseItem.difficulty.ToString());
                    var    respuestas       = new List <Respuesta>();


                    if ((nombreCategoria != pConjunto.Categoria.Id) || (nombreDificultad != pConjunto.Dificultad.Id))
                    {
                        throw new FormatException(String.Format("Recibio otra cosa de la api {0} = {1}, {2} = {3}",
                                                                nombreCategoria, pConjunto.Categoria.Id, nombreDificultad, pConjunto.Dificultad.Id));
                    }


                    //Obtiene el texto de la respuesta correcta
                    string textorespuestaCorrecta = HttpUtility.HtmlDecode(bResponseItem.correct_answer.ToString());
                    //Obtiene el texto de las respuestas incorrectas
                    List <string> textoincorrectas = bResponseItem.incorrect_answers.ToObject <List <string> >();

                    //Crea la pregunta
                    Pregunta preg = new Pregunta(textoPregunta, pConjunto);

                    //Crea la respuesta correcta
                    Respuesta respuestaCorrecta = new Respuesta(textorespuestaCorrecta, true);

                    //Añade respuesta correcta a la lista
                    respuestas.Add(respuestaCorrecta);


                    //Por cada respuesta incorrecta, crea una respuesta y la añade a la lista
                    foreach (string tri in textoincorrectas)
                    {
                        Respuesta res = new Respuesta(HttpUtility.HtmlDecode(tri), false);
                        respuestas.Add(res);
                    }

                    // Asocias las respuestas con la pregunta
                    preg.Respuestas = respuestas;

                    //se agrega cada una de las preguntas a la lista
                    preguntas.Add(preg);
                }
            }
            return(preguntas);
        }
Esempio n. 3
0
        public void DescargarPreguintas_ConjuntoInvalido_DevuelveListaDePreguntas()
        {
            IEstrategiaObtenerPreguntas opentDb = new OpentDbEstrategiaObtenerPreguntas();
            var conjuntoVacio = new ConjuntoPreguntas();

            Assert.ThrowsException <ArgumentNullException>(() => opentDb.DescargarPreguntas(0, conjuntoVacio));
            Assert.ThrowsException <ArgumentNullException>(() => opentDb.DescargarPreguntas(10, conjuntoVacio));
        }
        public string CrearUrl(int pCantidad, ConjuntoPreguntas pConjunto)
        {
            var url = string.Format("https://opentdb.com/api.php?amount={0}&category={1}&difficulty={2}&type=multiple",
                                    pCantidad,
                                    pConjunto.Categoria.ProviderId,
                                    pConjunto.Dificultad.Id);

            return(url);
        }
        public void TestDescargarPreguntas_ParametrosValidos_DevuelvePreguntas()
        {
            var dificultad = new Dificultad("easy");
            var categoria  = new CategoriaPregunta("Science: Computers", "18");
            var conjunto   = new ConjuntoPreguntas("OpentDb", dificultad, categoria);

            var opentdb = new OpentDbEstrategiaObtenerPreguntas();
            var res     = opentdb.DescargarPreguntas(10, conjunto);

            Assert.IsTrue(res.Any());
        }
Esempio n. 6
0
 /// <summary>
 /// Metodo que modifica el tiempo esperado por respuesta de un conjunto pasado como parametro.
 /// </summary>
 /// <param name="pConjuntoPreguntas"></param>
 /// <param name="pTiempo"></param>
 public void ModificarTiempo(string pConjuntoPreguntas, float pTiempo)
 {
     using (var db = new TrabajoDbContext())
     {
         using (var UoW = new UnitOfWork(db))
         {
             ConjuntoPreguntas conjunto = UoW.RepositorioConjuntoPregunta.Get(pConjuntoPreguntas);
             conjunto.Id = pConjuntoPreguntas;
             UoW.Complete();
         }
     }
 }
        public void TestDescargarPreguntas_CantidadCero_DevuelveListaVacia()
        {
            var opentdb    = new OpentDbEstrategiaObtenerPreguntas();
            var dificultad = new Dificultad("easy");
            var categoria  = new CategoriaPregunta("Science: Computers", "18");
            var conjunto   = new ConjuntoPreguntas("OpentDb", dificultad, categoria);


            var res = opentdb.DescargarPreguntas(0, conjunto);

            Assert.IsFalse(res.Any());
        }
Esempio n. 8
0
        public void DescargarPreguintas_ConjuntoValido_DevuelveListaDePreguntas()
        {
            IEstrategiaObtenerPreguntas opentDb = new OpentDbEstrategiaObtenerPreguntas();
            var dificultad        = new Dificultad("easy");
            var categoria         = new CategoriaPregunta("Science: Computers", "18");
            var conjuntoExistente = new ConjuntoPreguntas("OpentDb", dificultad, categoria);
            var preguntasVacio    = opentDb.DescargarPreguntas(0, conjuntoExistente);
            var preguntas         = opentDb.DescargarPreguntas(10, conjuntoExistente);

            Assert.IsFalse(preguntasVacio.Any());
            Assert.IsTrue(preguntas.ToList().Count > 1);
        }
Esempio n. 9
0
        /// <summary>
        /// </summary>
        /// <exception cref="WebException"></exception>
        /// <exception cref="FormatException"></exception>
        /// <exception cref="ArgumentNullException"></exception>
        /// <param name="pCantidad"></param>
        /// <param name="pConjunto"></param>
        /// <returns></returns>
        public override IEnumerable <Pregunta> DescargarPreguntas(int pCantidad, ConjuntoPreguntas pConjunto)
        {
            if ((pConjunto == null) ||
                (pConjunto.Categoria == null) ||
                (pConjunto.Dificultad == null) ||
                String.IsNullOrEmpty(pConjunto.Nombre))
            {
                throw new ArgumentNullException();
            }

            if (pCantidad == 0)
            {
                return(new List <Pregunta>());
            }
            var url      = iUrlCreador.CrearUrl(pCantidad, pConjunto);
            var response = iWebRequester.PeticionAUrl(url);

            return(iParser.ParseResponse(response, pConjunto));
        }
        public void TestDescargarPreguntas_ParametrosInvalidos_DevuelveExcepcion()
        {
            var opentdb = new OpentDbEstrategiaObtenerPreguntas();

            Assert.ThrowsException <ArgumentNullException>(() => opentdb.DescargarPreguntas(0, null));
            Assert.ThrowsException <ArgumentNullException>(() => opentdb.DescargarPreguntas(100, null));

            var dificultad = new Dificultad("easy");
            var categoria  = new CategoriaPregunta("Science: Computers", "18");
            var conjuntoConPropiedadNull = new ConjuntoPreguntas("OpentDb", dificultad, categoria);

            conjuntoConPropiedadNull.Categoria = null;

            Assert.ThrowsException <ArgumentNullException>(() => opentdb.DescargarPreguntas(0, conjuntoConPropiedadNull));
            Assert.ThrowsException <ArgumentNullException>(() => opentdb.DescargarPreguntas(100, conjuntoConPropiedadNull));
            conjuntoConPropiedadNull.Categoria  = categoria;
            conjuntoConPropiedadNull.Dificultad = null;

            Assert.ThrowsException <ArgumentNullException>(() => opentdb.DescargarPreguntas(0, conjuntoConPropiedadNull));
            Assert.ThrowsException <ArgumentNullException>(() => opentdb.DescargarPreguntas(100, conjuntoConPropiedadNull));
        }
Esempio n. 11
0
 public abstract IEnumerable <Pregunta> DescargarPreguntas(int pCantidad, ConjuntoPreguntas pConjunto);
 public override IEnumerable <Pregunta> DescargarPreguntas(int pCantidad, ConjuntoPreguntas pConjunto)
 {
     throw new NotImplementedException();
 }
Esempio n. 13
0
 public ConjuntoPreguntasDTO(ConjuntoPreguntas conjuntoPreguntas)
 {
     this.TiempoEsperadoRespuesta = conjuntoPreguntas.TiempoEsperadoRespuesta;
     this.Id = conjuntoPreguntas.Id;
     this.Nombre = conjuntoPreguntas.Nombre;
 }
Esempio n. 14
0
        /// <summary>
        /// Dada una lista de preguntas, las inserta en la base de datos
        /// </summary>
        public void CargarPreguntas(List <Pregunta> pPreguntas)
        {
            try
            {
                using (var db = new TrabajoDbContext())
                {
                    using (var UoW = new UnitOfWork(db))
                    {
                        foreach (Pregunta pre in pPreguntas)
                        {
                            if (db.Preguntas.Find(pre.Id) == null)
                            {
                                CategoriaPregunta categoria  = db.Categorias.Find(pre.Categoria.Id);
                                Dificultad        dificultad = db.Dificultades.Find(pre.Dificultad.Id);
                                ConjuntoPreguntas conjunto   = db.ConjuntoPreguntas.Find(pre.Conjunto.Id);

                                ///Si la categoria esta en la base de datos la referencia,
                                ///sino crea una nueva y la inserta en la db
                                if (categoria == null)
                                {
                                    CategoriaPregunta categoriaNueva = new CategoriaPregunta(pre.Categoria.Id);
                                }
                                else
                                {
                                    pre.Categoria = categoria;
                                }


                                ///Si la dificultad esta en la base de datos la referencia,
                                ///sino crea una nueva y la inserta en la db
                                if (dificultad == null)
                                {
                                    Dificultad dificultadNueva = new Dificultad(pre.Dificultad.Id);
                                }
                                else
                                {
                                    pre.Dificultad = dificultad;
                                }

                                ///Si el conjunto esta en la base de datos la referencia,
                                ///sino crea uno nuevo y la inserta en la db
                                if (conjunto == null)
                                {
                                    ConjuntoPreguntas conjuntoNuevo = new ConjuntoPreguntas(pre.Conjunto.Id);
                                }
                                else
                                {
                                    pre.Conjunto = conjunto;
                                }


                                UoW.RepositorioPreguntas.Add(pre);
                            }
                        }
                        UoW.Complete();
                    }
                }
            }
            catch (Exception ex)
            {
                Bitacora.GuardarLog(ex.Message.ToString());
            }
        }