示例#1
0
 /// <summary>
 /// Fija el precio mínimo del Perfil. No acepta valores negativos
 /// </summary>
 /// <param name="idPerfil">Número identificador del Perfil</param>
 /// <param name="precioMin">Valor nuevo del precio mínimo</param>
 public static void SetPrecioMin(long idPerfil, int precioMin)
 {
     if (precioMin < 1)
     {
         throw new ArgumentOutOfRangeException();
     }
     BibliotecaPerfiles.GetUsuario(idPerfil).PrecioMin = precioMin;
 }
示例#2
0
 /// <summary>
 /// Fija el valor de la edad del perfil.static No acepta valores negativos ni mayores a 120
 /// </summary>
 /// <param name="idPerfil">Número identificador del Perfil</param>
 /// <param name="edad">Valor nuevo de la edad</param>
 public static void SetEdad(long idPerfil, int edad)
 {
     if (edad < 0 || edad > 120)
     {
         throw new ArgumentOutOfRangeException();
     }
     BibliotecaPerfiles.GetUsuario(idPerfil).Edad = edad;
 }
示例#3
0
        public override async void Handle(Mensaje m)
        {
            Perfil perfil = BibliotecaPerfiles.GetUsuario(m.Id);

            await Preguntar(m.Id, m.Plataforma);

            BibliotecaPerfiles.EliminarUsuario(m.Id);
        }
示例#4
0
        /// <summary>
        /// Método que corresponde al patrón Chain of Responsibility.
        /// En caso de que el precio minimo correspondiente al perfil que envía el mensaje
        /// esté fijado en el valor inicial de -1, se pide un valor de Precio Minimo,
        /// y se agrega el ID a la lista de UsuariosPreguntados.
        ///
        /// En caso de que el Perfil correspondiente tenga el valor inicial de Precio Minimo,
        /// y esté en la lista de preguntados, se procesa el valor ingresado en el
        /// último mensaje para validarlo.
        /// De ser correcto, se modifica el campo Precio Minimo de Perfil y se pasa al siguiente eslabón.
        /// De no ser correcto, se pide al usuario que ingrese un valor adecuado.
        ///
        ///
        /// Si al ingresar al método, el valor de Precio minimo no es el inicial, se asume que ya fue fijado por el usuario,
        /// por lo que se envía el mensaje hacia el siguiente eslabón.
        /// </summary>
        /// <param name="m">Mensaje que se transmite por patrón COR</param>
        public override async void Handle(Mensaje m)
        {
            Perfil perfil = BibliotecaPerfiles.GetUsuario(m.Id);

            if (perfil.PrecioMin == -1)
            {
                if (!perfil.RegistroPreguntas.PrecioMin)
                {
                    perfil.RegistroPreguntas.PrecioMin = true;
                    await Preguntar(m.Id, m.Plataforma);
                }
                else
                {
                    /// <summary>
                    /// Intento parsear el contenido del mensaje a un numero entero, si lo consigue pasa al siguiente eslabón.
                    /// </summary>

                    try
                    {
                        int precioMin = Int32.Parse(m.Contenido);
                        EditorPerfil.SetPrecioMin(m.Id, precioMin);
                        //Si está todo OK, paso al siguiente eslabón
                        Siguiente.Handle(m);
                    }
                    /// <summary>
                    /// Si el parseo falla, por ejemplo si recibo una letra, captura la excepción y envia un mensaje al usuario
                    /// pidiendo que ingrese un valor valido de edad
                    /// </summary>
                    catch (FormatException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                    catch (NullReferenceException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        await Respuesta.ErrorPrecioMin(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                    catch (ArgumentNullException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                }
            }

            else
            {
                Siguiente.Handle(m);
            }
        }
        public void NoIngresaNumeroLanzaExcepcion()
        {
            Library.BibliotecaPerfiles biblioteca = Library.BibliotecaPerfiles.Instance;
            biblioteca.CrearUsuario(0);
            Mensaje mensaje = new Mensaje("stub", 0, TipoPlataforma.Consola);
            ControlPrecioMaxStub control = new ControlPrecioMaxStub();

            BibliotecaPerfiles.GetUsuario(0).RegistroPreguntas.PrecioMax = true;

            control.Handle(mensaje);

            Assert.Throws <FormatException>(() => Int32.Parse(mensaje.Contenido));
        }
        public void SiPrecioMaxCorrectoSeteaPerfil()
        {
            Library.BibliotecaPerfiles biblioteca = Library.BibliotecaPerfiles.Instance;
            biblioteca.CrearUsuario(0);
            Mensaje mensaje = new Mensaje("25", 0, TipoPlataforma.Consola);
            ControlPrecioMaxStub control = new ControlPrecioMaxStub();

            BibliotecaPerfiles.GetUsuario(0).RegistroPreguntas.PrecioMax = true;

            control.Handle(mensaje);

            Assert.AreEqual(BibliotecaPerfiles.GetUsuario(0).PrecioMax, 25);
        }
        public void SiTodoOKContinuoASiguienteEslabon()
        {
            Library.BibliotecaPerfiles biblioteca = Library.BibliotecaPerfiles.Instance;
            biblioteca.CrearUsuario(0);
            Mensaje            mensaje = new Mensaje("Rock", 0, TipoPlataforma.Consola);
            ControlInteresStub control = new ControlInteresStub();

            BibliotecaPerfiles.GetUsuario(0).RegistroPreguntas.Interes = true;

            control.Handle(mensaje);

            Assert.IsTrue(control.passed);
        }
示例#8
0
        public void SiTodoOKSeteaEdad()
        {
            Library.BibliotecaPerfiles biblioteca = Library.BibliotecaPerfiles.Instance;
            biblioteca.CrearUsuario(0);
            Mensaje         mensaje = new Mensaje("25", 0, TipoPlataforma.Consola);
            ControlEdadStub control = new ControlEdadStub();

            BibliotecaPerfiles.GetUsuario(0).RegistroPreguntas.Edad = true;

            control.Handle(mensaje);

            Assert.AreEqual(BibliotecaPerfiles.GetUsuario(0).Edad, 25);
        }
示例#9
0
        /// <summary>
        /// Método que corresponde al patrón Chain of Responsibility.
        /// En caso de que el género correspondiente al Perfil que envía el mensaje
        /// esté fijado en el valor inicial de null, se pide un género,
        /// y se agrega el ID a la lista de UsuariosPreguntados.
        ///
        /// En caso de que el Perfil correspondiente tenga el valor nulo de Género,
        /// y esté en la lista de preguntados, se procesa el valor ingresado en el
        /// último mensaje para validarlo.
        /// De ser correcto, se modifica el campo Genero de Perfil y se pasa al siguiente eslabón.
        /// De no ser correcto, se pide al usuario que ingrese un valor adecuado.
        ///
        ///
        /// Si al ingresar al método, el valor de Genero no es el nulo, se asume que ya fue fijado por el usuario,
        /// por lo que se envía el mensaje hacia el siguiente eslabón.
        /// </summary>
        /// <param name="m">Mensaje que se transmite por patrón COR</param>
        public override async void Handle(Mensaje m)
        {
            Perfil perfil = BibliotecaPerfiles.GetUsuario(m.Id);

            if (perfil.Genero == TipoGenero.Vacio)
            {
                if (!perfil.RegistroPreguntas.Genero)
                {
                    perfil.RegistroPreguntas.Genero = true;
                    await Preguntar(m.Id, m.Plataforma);
                }
                else
                {
                    try
                    {
                        TipoGenero genero;
                        if (masculino.Contains(m.Contenido.ToLower()))
                        {
                            genero = TipoGenero.Masculino;
                        }
                        else if (femenino.Contains(m.Contenido.ToLower()))
                        {
                            genero = TipoGenero.Femenino;
                        }
                        else
                        {
                            genero = TipoGenero.Indefinido;
                        }

                        EditorPerfil.SetGenero(m.Id, genero);
                        Siguiente.Handle(m);
                    }
                    catch (NullReferenceException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                    catch (ArgumentNullException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                }
            }
            else
            {
                Siguiente.Handle(m);
            }
        }
示例#10
0
        /// <summary>
        /// Método que corresponde al patrón Chain of Responsibility.
        /// En caso de que el atributo Interes correspondiente al Perfil que envía el mensaje
        /// esté fijado en el valor inicial de null, se pide un interés,
        /// y se agrega el ID a la lista de UsuariosPreguntados.
        ///
        /// En caso de que el Perfil correspondiente tenga el valor nulo de Interes,
        /// y esté en la lista de preguntados, se procesa el valor ingresado en el
        /// último mensaje para validarlo.
        /// De ser correcto, se modifica el campo Interes de Perfil y se pasa al siguiente eslabón.
        /// De no ser correcto, se pide al usuario que ingrese un valor adecuado.
        ///
        ///
        /// Si al ingresar al método, el valor de Interes no es el nulo, se asume que ya fue fijado por el usuario,
        /// por lo que se envía el mensaje hacia el siguiente eslabón.
        /// </summary>
        /// <param name="m">Mensaje que se transmite por patrón COR</param>

        public override async void Handle(Mensaje m)
        {
            Perfil perfil = BibliotecaPerfiles.GetUsuario(m.Id);

            if (perfil.Interes == null)
            {
                if (!perfil.RegistroPreguntas.Interes)
                {
                    await Preguntar(m.Id, m.Plataforma);

                    perfil.RegistroPreguntas.Interes = true;
                }
                else
                {
                    try
                    {
                        EditorPerfil.SetInteres(m.Id, m.Contenido);
                        Siguiente.Handle(m);
                    }
                    catch (NullReferenceException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                    catch (ArgumentNullException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                }
            }
            else
            {
                Siguiente.Handle(m);
            }
        }
示例#11
0
        /// <summary>
        /// Método que corresponde al patrón Chain of Responsibility.
        /// En caso de que el atributo Relacion correspondiente al Perfil que envía el mensaje
        /// esté fijado en el valor inicial de null, se pide una relación,
        /// y se agrega el ID a la lista de UsuariosPreguntados.
        ///
        /// En caso de que el Perfil correspondiente tenga el valor nulo de Relación,
        /// y esté en la lista de preguntados, se procesa el valor ingresado en el
        /// último mensaje para validarlo.
        /// De ser correcto, se modifica el campo Relacion de Perfil y se pasa al siguiente eslabón.
        /// De no ser correcto, se pide al usuario que ingrese un valor adecuado.
        ///
        ///
        /// Si al ingresar al método, el valor de Relacion no es el nulo, se asume que ya fue fijado por el usuario,
        /// por lo que se envía el mensaje hacia el siguiente eslabón.
        /// </summary>
        /// <param name="m">Mensaje que se transmite por patrón COR</param>
        public override async void Handle(Mensaje m)
        {
            Perfil perfil = BibliotecaPerfiles.GetUsuario(m.Id);

            if (perfil.Relacion == TipoAfinidad.Vacio)
            {
                if (!perfil.RegistroPreguntas.Relacion)
                {
                    perfil.RegistroPreguntas.Relacion = true;
                    await Preguntar(m.Id, m.Plataforma);
                }
                else
                {
                    try
                    {
                        TipoAfinidad afinidad = BuscoAfinidad(m.Contenido);
                        EditorPerfil.SetRelacion(m.Id, afinidad);
                        Siguiente.Handle(m);
                    }
                    catch (ArgumentException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                    catch (NullReferenceException)
                    {
                        await Respuesta.PedirAclaracion(m.Id, m.Plataforma);
                        await Preguntar(m.Id, m.Plataforma);
                    }
                }
            }
            else
            {
                Siguiente.Handle(m);
            }
        }
示例#12
0
 /// <summary>
 /// Fija el interés del Perfil
 /// </summary>
 /// <param name="idPerfil">Número identificador del Perfil</param>
 /// <param name="interes">Interés a agregar</param>
 public static void SetInteres(long idPerfil, string interes)
 {
     BibliotecaPerfiles.GetUsuario(idPerfil).Interes = interes;
 }
示例#13
0
 /// <summary>
 /// Fija el tipo de relación del Perfil
 /// </summary>
 /// <param name="idPerfil">Número identificador del Perfil</param>
 /// <param name="relacion">Valor nuevo de la relación</param>
 public static void SetRelacion(long idPerfil, TipoAfinidad relacion)
 {
     BibliotecaPerfiles.GetUsuario(idPerfil).Relacion = relacion;
 }
示例#14
0
 /// <summary>
 /// Fija el tipo de género del Perfil
 /// </summary>
 /// <param name="idPerfil">Número identificador del Perfil</param>
 /// <param name="genero">Valor nuevo del género</param>
 public static void SetGenero(long idPerfil, TipoGenero genero)
 {
     BibliotecaPerfiles.GetUsuario(idPerfil).Genero = genero;
 }