//DETAILS // GET: Inversions public async Task <IActionResult> Details(InversionDetailsViewModel detailsIds) { if (detailsIds.ids == null || detailsIds.ids.Count() == 0) { return(RedirectToAction("Create")); } int[] ids = detailsIds.ids; var inversion = _context.Inversion.Include(s => s.TipoInversiones). Include(s => s.Proyecto). ThenInclude <Inversion, Proyecto, Rating>(s => s.Rating). Where(s => ids.Contains(s.InversionId)).ToList(); return(View(inversion)); }
//Details con ids pero vacío. public async Task Details_Inversion_NotFound() { using (context) { //Arrange var controller = new InversionsController(context); controller.ControllerContext.HttpContext = inversionContext; InversionDetailsViewModel detailsViewModel = new InversionDetailsViewModel(); detailsViewModel.ids = new int[0]; //Act var result = await controller.Details(detailsViewModel); //Assert var viewResult = Assert.IsType <RedirectToActionResult>(result); Assert.Equal(viewResult.ActionName, "Create"); } }
//Details sin ids public async Task Details_withoutIds() { using (context) { // Arrenge var controller = new InversionsController(context); //Simular una conexion de usuario controller.ControllerContext.HttpContext = inversionContext; InversionDetailsViewModel detailsViewModel = new InversionDetailsViewModel(); //Act var result = await controller.Details(detailsViewModel); //Assert var viewResult = Assert.IsType <RedirectToActionResult>(result); Assert.Equal(viewResult.ActionName, "Create"); } }
public async Task <IActionResult> Create(InversionesCreateViewModel inversionCreate) { //var inversiones = new List<InversionCreateViewModel>(); Inversion inversion; Proyecto proyecto; Inversor inversor = _context.Users.OfType <Inversor>().Include(m => m.Monedero).FirstOrDefault <Inversor>(p => p.UserName.Equals(User.Identity.Name)); int[] idsInversion; ModelState.Clear(); int i = 0; foreach (InversionCreateViewModel itemInversion in inversionCreate.inversiones) { proyecto = await _context.Proyecto.FirstOrDefaultAsync <Proyecto>(m => m.ProyectoId == itemInversion.inversion.Proyecto.ProyectoId); inversion = new Inversion(); if (itemInversion.Cuota.CompareTo(itemInversion.MinInver) <= 0 && itemInversion.TiposInversionSelected == null) { ModelState.AddModelError("Cuota y Tipo de Inversión incorrecto", $"Cuota y Tipo de Inversión incorrectos en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else if (itemInversion.Cuota.CompareTo((float)itemInversion.Cantidad) >= 0 && itemInversion.TiposInversionSelected == null) { ModelState.AddModelError("Cuota y Tipo de Inversión incorrecto", $"Cuota y Tipo de Inversión incorrectos en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else if (itemInversion.Cuota.CompareTo(itemInversion.MinInver) <= 0) { ModelState.AddModelError("Ha introducido una cuota incorrecta", $"Ha introducido una cuota incorrecta en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else if (itemInversion.Cuota.CompareTo((float)itemInversion.Cantidad) >= 0) { ModelState.AddModelError("Ha introducido una cuota incorrecta", $"Ha introducido una cuota incorrecta en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else if (itemInversion.TiposInversionSelected == null) { ModelState.AddModelError("No ha seleccionado un tipo de inversión", $"No ha seleccionado un tipo de inversión en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else { itemInversion.inversion.Cuota = itemInversion.Cuota; itemInversion.inversion.Intereses = (float)itemInversion.Interes; itemInversion.inversion.Inversor = inversor; if (itemInversion.TiposInversionSelected == "Business Angels") { itemInversion.inversion.TipoInversionesId = 1; } else if (itemInversion.TiposInversionSelected == "Crownfunding") { itemInversion.inversion.TipoInversionesId = 2; } else { itemInversion.inversion.TipoInversionesId = 3; } itemInversion.inversion.EstadosInversiones = "En Curso"; itemInversion.inversion.Total = (itemInversion.Cuota * (itemInversion.Interes / 100)) + itemInversion.Cuota; itemInversion.inversion.Inversor.Monedero.Dinero = itemInversion.Cantidad - (decimal)itemInversion.Cuota; _context.Add(itemInversion.inversion); } i++; } if (ModelState.ErrorCount > 0) { inversionCreate.Name = inversor.Nombre; inversionCreate.FirstSurname = inversor.Apellido1; inversionCreate.SecondSurname = inversor.Apellido2; SelectedProyectosForInversionViewModel selectedProyectos = new SelectedProyectosForInversionViewModel(); int j = 0; int tam = inversionCreate.inversiones.Count; String[] IdsToAdd2 = new string[tam]; foreach (InversionCreateViewModel itemInversion2 in inversionCreate.inversiones) { int proyId = itemInversion2.ProyectoId; string str = Convert.ToString(proyId); IdsToAdd2[j] = str; selectedProyectos.IdsToAdd = IdsToAdd2; j++; } selectedProyectos.IdsToAdd = IdsToAdd2; return(Create(selectedProyectos)); } await _context.SaveChangesAsync(); //DETAILS idsInversion = new int[inversionCreate.inversiones.Count]; for (int k = 0; k < idsInversion.Length; k++) { idsInversion[k] = inversionCreate.inversiones[k].inversion.InversionId; } InversionDetailsViewModel detailsViewModel = new InversionDetailsViewModel(); detailsViewModel.ids = idsInversion; return(RedirectToAction("Details", detailsViewModel)); }
public async Task Details_Inversion_Found() { using (context) { // Arrenge var controller = new InversionsController(context); //Simular una conexion de usuario controller.ControllerContext.HttpContext = inversionContext; int[] ids = new int[2] { 1, 2 }; InversionDetailsViewModel detailsViewModel = new InversionDetailsViewModel() { ids = ids }; //Inversor esperado Inversor expectedinversor = new Inversor { Id = "1", Nombre = "Yasin", Email = "*****@*****.**", Apellido1 = "Muñoz", Apellido2 = "El Merabety", Domicilio = "C/Gabriel Ciscar", Municipio = "Albacete", NIF = "47446245", Nacionalidad = "Española", PaisDeResidencia = "España", Provincia = "Albacete", PhoneNumber = "684010548", PasswordHash = "password", UserName = "******" }; //Proyectos esperados var expectedProyectos = new Proyecto[2] { new Proyecto { ProyectoId = 1, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 30000, Interes = (float)5.90, MinInversion = 50, Nombre = "E-MEDICA", NumInversores = 0, Plazo = 12, Progreso = 0, RatingId = 1 }, new Proyecto { ProyectoId = 2, FechaExpiracion = new DateTime(2019, 01, 14), Importe = 70000, Interes = (float)7.25, MinInversion = 0, Nombre = "PROTOS", NumInversores = 0, Plazo = 48, Progreso = 0, RatingId = 1 } }; //Inversion esperada var expectedInversiones = new Inversion[] { new Inversion { InversionId = 1, Cuota = 750, EstadosInversiones = "En Curso", Intereses = (float)5.9, InversorId = "1", Proyecto = expectedProyectos[0], Inversor = expectedinversor, TipoInversionesId = 2, Total = (float)794.25 }, new Inversion { InversionId = 2, Cuota = 850, EstadosInversiones = "En Curso", Intereses = (float)7.25, InversorId = "2", Proyecto = expectedProyectos[1], Inversor = expectedinversor, TipoInversionesId = 1, Total = (float)911.625 } }; //Act var result = await controller.Details(detailsViewModel); //Assert ViewResult viewResult = Assert.IsType <ViewResult>(result); var model = viewResult.Model as IEnumerable <Inversion>; Assert.Equal(expectedInversiones, model, Comparer.Get <Inversion>((i1, i2) => i1.Equals(i2))); } }