Пример #1
0
        public IActionResult SelectInversionForRecuperarInversion(SelectedInversionForRecuperarInversionViewModel selectedInversiones)
        {
            if (selectedInversiones.IdsToAdd != null)
            {
                return(RedirectToAction("Create", selectedInversiones));
            }

            //Se mostrará un mensaje de error al usuario para indicar que seleccione alguna inversión.
            ModelState.AddModelError(string.Empty, "Debes seleccionar al menos una inversión");
            SelectInversionForRecuperarInversionViewModel selectInversiones = new SelectInversionForRecuperarInversionViewModel();

            selectInversiones.Areas   = new SelectList(_context.Areas.Select(a => a.Nombre).ToList());
            selectInversiones.Estados = new SelectList(Enum.GetNames(typeof(StartGrow.Models.EstadosInversiones)));
            selectInversiones.Tipos   = new SelectList(_context.TiposInversiones.Select(t => t.Nombre).ToList());
            selectInversiones.Ratings = new SelectList(_context.Rating.Select(r => r.Nombre).ToList());

            selectInversiones.Inversiones = _context.Inversion.Include(m => m.TipoInversiones)
                                            .Include(m => m.Proyecto)
                                            .ThenInclude(p => p.ProyectoAreas).ThenInclude(pa => pa.Areas)
                                            .Include(m => m.Proyecto).ThenInclude(r => r.Rating)
                                            .Where(m => m.EstadosInversiones != "Recaudacion" && m.Inversor.UserName == User.Identity.Name);

            return(View(selectInversiones));
        }
        public async Task Select_NoInversionesSeleccionadas()
        {
            using (context)
            {
                //Arrange

                var controller = new InversionRecuperadasController(context);
                controller.ControllerContext.HttpContext = inversionRecuperadaContext;

                var area   = "Sanidad";
                var rating = new Rating {
                    RatingId = 1, Nombre = "A"
                };
                var tipo = new TiposInversiones {
                    TiposInversionesId = 1, Nombre = "Crownfunding"
                };

                String[] areasEsperadas = new String[1] {
                    "Sanidad"
                };
                String[] ratingsEsperados = new String[1] {
                    "A"
                };
                String[] tiposEsperados = new String[1] {
                    "Crownfunding"
                };

                var areasEsperadasSelect   = new SelectList(areasEsperadas);
                var ratingsEsperadosSelect = new SelectList(ratingsEsperados);
                var tiposEsperadosSelect   = new SelectList(tiposEsperados);


                Proyecto proyecto1 = new Proyecto
                {
                    ProyectoId      = 1,
                    FechaExpiracion = new DateTime(2020, 1, 1),
                    Importe         = 12,
                    Interes         = 2,
                    MinInversion    = 5,
                    Nombre          = "Pruebas en sanidad",
                    NumInversores   = 0,
                    Plazo           = 12,
                    Progreso        = 34,
                    Rating          = rating
                };

                Inversor inversor1 = new Inversor
                {
                    Id               = "1",
                    Nombre           = "*****@*****.**",
                    Email            = "*****@*****.**",
                    Apellido1        = "Girón",
                    Apellido2        = "López",
                    Domicilio        = "C/Cuenca",
                    Municipio        = "Albacete",
                    NIF              = "48259596",
                    Nacionalidad     = "Española",
                    PaisDeResidencia = "España",
                    Provincia        = "Albacete",
                    PasswordHash     = "hola",
                    UserName         = "******"
                };

                var inversionesEsperadas = new Inversion[2]
                {
                    new Inversion {
                        InversionId        = 1,
                        Cuota              = 6,
                        EstadosInversiones = "En_Curso",
                        Intereses          = 12,
                        Inversor           = inversor1,
                        Proyecto           = proyecto1,
                        TipoInversionesId  = 1,
                        Total              = 50
                    },

                    new Inversion {
                        InversionId        = 2,
                        Cuota              = 15,
                        EstadosInversiones = "Finalizado",
                        Intereses          = 23,
                        Inversor           = inversor1,
                        Proyecto           = proyecto1,
                        TipoInversionesId  = 1,
                        Total              = 100,
                    }
                };


                SelectedInversionForRecuperarInversionViewModel inversiones = new SelectedInversionForRecuperarInversionViewModel {
                    IdsToAdd = null
                };

                // Act

                var result = controller.SelectInversionForRecuperarInversion(inversiones);

                // Assert
                var viewResult = Assert.IsType <ViewResult>(result); //Comprueba si el controlador devuelve una vista
                SelectInversionForRecuperarInversionViewModel model = viewResult.Model as SelectInversionForRecuperarInversionViewModel;

                Assert.Equal(inversionesEsperadas, model.Inversiones, Comparer.Get <Inversion>((i1, i2) => i1.Cuota == i2.Cuota && i1.EstadosInversiones == i2.EstadosInversiones &&
                                                                                               i1.TipoInversionesId == i1.TipoInversionesId && i1.Total == i2.Total));

                Assert.Equal(areasEsperadasSelect.Count(), model.Areas.Count());
                Assert.Equal(areasEsperadasSelect, model.Areas, Comparer.Get <SelectListItem>((i1, i2) => i1.Value == i2.Value));

                Assert.Equal(ratingsEsperados.Count(), model.Ratings.Count());
                Assert.Equal(ratingsEsperadosSelect, model.Ratings, Comparer.Get <SelectListItem>((i1, i2) => i1.Value == i2.Value));

                Assert.Equal(tiposEsperados.Count(), model.Tipos.Count());
                Assert.Equal(tiposEsperadosSelect, model.Tipos, Comparer.Get <SelectListItem>((i1, i2) => i1.Value == i2.Value));
            }
        }
        public async Task Select_FiltroEstado()
        {
            using (context) //Base SQL ya generada con datos incluidos
            {
                //ARRANGE (Organizar) --> Creación de condiciones para la prueba.
                var controller = new InversionRecuperadasController(context);
                controller.ControllerContext.HttpContext = inversionRecuperadaContext;

                var area   = "Sanidad";
                var rating = new Rating {
                    RatingId = 1, Nombre = "A"
                };
                var tipo = new TiposInversiones {
                    TiposInversionesId = 1, Nombre = "Crownfunding"
                };

                String[] areasEsperadas = new String[1] {
                    "Sanidad"
                };
                String[] ratingsEsperados = new String[1] {
                    "A"
                };
                String[] tiposEsperados = new String[1] {
                    "Crownfunding"
                };

                var areasEsperadasSelect   = new SelectList(areasEsperadas);
                var ratingsEsperadosSelect = new SelectList(ratingsEsperados);
                var tiposEsperadosSelect   = new SelectList(tiposEsperados);


                Proyecto proyecto1 = new Proyecto
                {
                    ProyectoId      = 1,
                    FechaExpiracion = new DateTime(2020, 1, 1),
                    Importe         = 12,
                    Interes         = 2,
                    MinInversion    = 5,
                    Nombre          = "Pruebas en sanidad",
                    NumInversores   = 0,
                    Plazo           = 12,
                    Progreso        = 34,
                    Rating          = rating
                };

                Inversor inversor1 = new Inversor
                {
                    Id               = "1",
                    Nombre           = "*****@*****.**",
                    Email            = "*****@*****.**",
                    Apellido1        = "Girón",
                    Apellido2        = "López",
                    Domicilio        = "C/Cuenca",
                    Municipio        = "Albacete",
                    NIF              = "48259596",
                    Nacionalidad     = "Española",
                    PaisDeResidencia = "España",
                    Provincia        = "Albacete",
                    PasswordHash     = "hola",
                    UserName         = "******"
                };

                var inversionesEsperadas = new Inversion[1]
                {
                    new Inversion {
                        InversionId        = 1,
                        Cuota              = 6,
                        EstadosInversiones = "En_Curso",
                        Intereses          = 12,
                        Inversor           = inversor1,
                        Proyecto           = proyecto1,
                        TipoInversionesId  = 1,
                        Total              = 50
                    }
                };

                //ACT (Actuar) --> Realización de la prueba
                var result = controller.SelectInversionForRecuperarInversion(0, null, "En_Curso", null, null);

                //ASSERT --> Verificación de que el resultado fue el que se esperaba
                var viewResult = Assert.IsType <ViewResult>(result); //Comprueba si el controlador devuelve una vista
                SelectInversionForRecuperarInversionViewModel model = viewResult.Model as SelectInversionForRecuperarInversionViewModel;

                Assert.Equal(inversionesEsperadas, model.Inversiones, Comparer.Get <Inversion>((i1, i2) => i1.Cuota == i2.Cuota && i1.EstadosInversiones == i2.EstadosInversiones &&
                                                                                               i1.TipoInversionesId == i1.TipoInversionesId && i1.Total == i2.Total));

                Assert.Equal(areasEsperadasSelect.Count(), model.Areas.Count());
                Assert.Equal(areasEsperadasSelect, model.Areas, Comparer.Get <SelectListItem>((i1, i2) => i1.Value == i2.Value));

                Assert.Equal(ratingsEsperados.Count(), model.Ratings.Count());
                Assert.Equal(ratingsEsperadosSelect, model.Ratings, Comparer.Get <SelectListItem>((i1, i2) => i1.Value == i2.Value));

                Assert.Equal(tiposEsperados.Count(), model.Tipos.Count());
                Assert.Equal(tiposEsperadosSelect, model.Tipos, Comparer.Get <SelectListItem>((i1, i2) => i1.Value == i2.Value));
            }
        }
Пример #4
0
        //SELECT (GET)
        public IActionResult SelectInversionForRecuperarInversion(int?idInv, string inversionAreaSeleccionada,
                                                                  string inversionEstadoSeleccionado, string inversionTipoSeleccionado, string inversionRatingSeleccionado)
        {
            //Creamos un OBJETO de tipo SelectInversionForRecuperarInversionViewModel usado para renderizar la vista SelectInversionForRecuperarInversion.
            SelectInversionForRecuperarInversionViewModel selectInversiones = new SelectInversionForRecuperarInversionViewModel();


            //Solo mostrará las inversiones que estén en estado FINALIZADO o EN CURSO


            selectInversiones.Inversiones = _context.Inversion.Include(m => m.TipoInversiones)
                                            .Include(m => m.Proyecto)
                                            .ThenInclude(p => p.ProyectoAreas).ThenInclude(pa => pa.Areas)
                                            .Include(m => m.Proyecto).ThenInclude(r => r.Rating)
                                            .Where(m => m.EstadosInversiones != "Recaudacion" && m.Inversor.UserName == User.Identity.Name);


            //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

            //******* FILTRAR POR ID *********
            if (idInv != null && idInv > 0)
            {
                selectInversiones.Inversiones = selectInversiones.Inversiones.Where(id => id.InversionId == idInv);
            }



            //******* FILTRAR POR AREA *******

            //Para que el desplegable ofrezca la lista de Estados que hay en la BD.
            selectInversiones.Areas = new SelectList(_context.Areas.Select(a => a.Nombre).ToList());

            //Utilizado si el usuario selecciona un Area en el desplegable. Al seleccionar dicha Area,
            //se añadirá al IEnumerable Inversiones todas las inversiones donde el Area sea el Area seleccionado.
            if (inversionAreaSeleccionada != null)
            {
                selectInversiones.Inversiones = selectInversiones.Inversiones.Where(i => i.Proyecto.ProyectoAreas.Any(p => p.Areas.Nombre.Contains(inversionAreaSeleccionada)));
            }



            //******* FILTRAR POR ESTADO *******

            //Para que el desplegable ofrezca la lista de Estados que hay en la BD.
            selectInversiones.Estados = new SelectList(Enum.GetNames(typeof(StartGrow.Models.EstadosInversiones)));

            //Utilizado si el usuario selecciona un Estado en el desplegable. Al seleccionar dicho Estado,
            //se añadirá al IEnumerable Inversiones todas las inversiones donde el Estado sea el Estado seleccionado.
            if (inversionEstadoSeleccionado != null)
            {
                selectInversiones.Inversiones = selectInversiones.Inversiones.Where(i => i.EstadosInversiones.Equals(inversionEstadoSeleccionado));
            }


            //******* FILTRAR POR TIPO *******

            //Para que el desplegable ofrezca la lista de TIPOS que hay en la BD.
            selectInversiones.Tipos = new SelectList(_context.TiposInversiones.Select(t => t.Nombre).ToList());

            //Utilizado si el usuario selecciona un Tipo en el desplegable. Al seleccionar dicho Tipo,

            //se añadirá al IEnumerable Inversiones todas las inversiones donde el Tipo sea el Tipo seleccionado.
            if (inversionTipoSeleccionado != null)
            {
                selectInversiones.Inversiones = selectInversiones.Inversiones.Where(i => i.TipoInversiones.Nombre.Contains(inversionTipoSeleccionado));
            }



            //******* FILTRAR POR RATING *******

            //Para que el desplegable ofrezca la lista de Ratings que hay en la BD.
            selectInversiones.Ratings = new SelectList(_context.Rating.Select(r => r.Nombre).ToList());

            //Utilizado si el usuario selecciona un Rating en el desplegable. Al seleccionar dicho Rating,
            //se añadirá al IEnumerable Inversiones todas las inversiones donde el rating sea el rating seleccionado.
            if (inversionRatingSeleccionado != null)
            {
                selectInversiones.Inversiones = selectInversiones.Inversiones.Where(i => i.Proyecto.Rating.Nombre.Contains(inversionRatingSeleccionado));
            }

            //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


            //En este punto ejecuta la consulta con los filtros que hemos establecido.
            selectInversiones.Inversiones.ToList();
            return(View(selectInversiones));
        }