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)); } }
//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)); }