public async Task <IActionResult> Edit(int id, [Bind("InversionRecuperadaId,FechaRecuperacion,Comentario,CantidadRecuperada,MonederoId,InversionId")] InversionRecuperada inversionRecuperada) { if (id != inversionRecuperada.InversionRecuperadaId) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(inversionRecuperada); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!InversionRecuperadaExists(inversionRecuperada.InversionRecuperadaId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["InversionId"] = new SelectList(_context.Inversion, "InversionId", "Id", inversionRecuperada.InversionId); ViewData["MonederoId"] = new SelectList(_context.Monedero, "MonederoId", "Id", inversionRecuperada.MonederoId); return(View(inversionRecuperada)); }
public InversionRecuperadasController_Details_test() { _contextOptions = CreateNewContextOptions(); context = new ApplicationDbContext(_contextOptions); //Insertar datos semilla en la base de datos usando una instancia de contexto var rating = new Rating { Nombre = "A" }; context.Rating.Add(rating); var area = new Areas { Nombre = "Sanidad" }; context.Areas.Add(area); var tipo = new TiposInversiones { Nombre = "Crownfunding" }; context.TiposInversiones.Add(tipo); Proyecto proyecto1 = new Proyecto { ProyectoId = 1, FechaExpiracion = new DateTime(2020, 1, 1), Importe = 12, Interes = 50, MinInversion = 5, Nombre = "Pruebas en sanidad", NumInversores = 0, Plazo = 12, Progreso = 34, Rating = rating }; context.Proyecto.Add(proyecto1); context.ProyectoAreas.Add(new ProyectoAreas { Proyecto = proyecto1, Areas = area }); Monedero monedero1 = new Monedero { MonederoId = 1, Dinero = 500 }; context.Monedero.Add(monedero1); 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 = "******", Monedero = monedero1 }; context.Users.Add(inversor1); Inversion inversion1 = new Inversion { InversionId = 1, Cuota = 150, EstadosInversiones = "En_Curso", Intereses = 50, Inversor = inversor1, Proyecto = proyecto1, TipoInversionesId = 1, Total = 200 }; context.Inversion.Add(inversion1); Inversion inversion2 = new Inversion { InversionId = 2, Cuota = 150, EstadosInversiones = "Finalizado", Intereses = 50, Inversor = inversor1, Proyecto = proyecto1, TipoInversionesId = 1, Total = 200 }; context.Inversion.Add(inversion2); InversionRecuperada invRec1 = new InversionRecuperada { InversionRecuperadaId = 1, CantidadRecuperada = 5, Inversion = inversion1, Comentario = "OK 1", FechaRecuperacion = DateTime.Now, }; InversionRecuperada invRec2 = new InversionRecuperada { InversionRecuperadaId = 2, CantidadRecuperada = 10, Inversion = inversion1, Comentario = "OK 2", FechaRecuperacion = DateTime.Now, }; context.InversionRecuperada.Add(invRec1); context.InversionRecuperada.Add(invRec2); context.SaveChanges(); //Para simular la conexión: System.Security.Principal.GenericIdentity user = new System.Security.Principal.GenericIdentity("*****@*****.**"); System.Security.Claims.ClaimsPrincipal identity = new System.Security.Claims.ClaimsPrincipal(user); inversionRecuperadaContext = new Microsoft.AspNetCore.Http.DefaultHttpContext(); inversionRecuperadaContext.User = identity; }
public async Task Details_GET_ConInversionesRecuperadas() { 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; int[] ids = new int[2] { 1, 2 }; InversionRecuperadaDetailsViewModel detailsVM = new InversionRecuperadaDetailsViewModel() { IdsToAdd = ids }; var rating = new Rating { RatingId = 1, Nombre = "A" }; Proyecto proyecto1 = new Proyecto { ProyectoId = 1, FechaExpiracion = new DateTime(2020, 1, 1), Importe = 12, Interes = 50, 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 = "******" }; Inversion inversion1 = new Inversion { InversionId = 1, Cuota = 150, EstadosInversiones = "En_Curso", Intereses = 50, Inversor = inversor1, Proyecto = proyecto1, TipoInversionesId = 1, Total = 200 }; var invRecEsperadas = new InversionRecuperada[] { new InversionRecuperada { InversionRecuperadaId = 1, InversionId = 1, CantidadRecuperada = 5, Inversion = inversion1, Comentario = "OK 1", FechaRecuperacion = DateTime.Now, }, new InversionRecuperada { InversionRecuperadaId = 2, InversionId = 1, CantidadRecuperada = 10, Inversion = inversion1, Comentario = "OK 2", FechaRecuperacion = DateTime.Now, } }; //ACT (Actuar) --> Realización de la prueba var result = controller.Details(detailsVM); //ASSERT --> Verificación de que el resultado fue el que se esperaba ViewResult viewResult = Assert.IsType <ViewResult>(result.Result); //Comprueba si el controlador devuelve una vista var model = viewResult.Model as IEnumerable <InversionRecuperada>; Assert.Equal(invRecEsperadas, model, Comparer.Get <InversionRecuperada>((i1, i2) => i1.Equals(i2))); } }
public async Task <IActionResult> Create(InversionRecuperadaCreateViewModel invRecViewModel) { Inversion inversion; List <int> idsInversionesRecuperadas = new List <int>(); ModelState.Clear(); for (int i = 0; i < invRecViewModel.Inversiones.Count(); i++) { inversion = await _context.Inversion.FirstOrDefaultAsync <Inversion>(m => m.InversionId == invRecViewModel.Inversiones[i].InversionId); InversionRecuperada invRec = invRecViewModel.InversionesRecuperadas[i]; if (invRec.CantidadRecuperada == 0) { ModelState.AddModelError("CantidadNoIndicada", $"Debe indicar una cantidad mayor que 0 en la inversión {invRecViewModel.Inversiones[i].InversionId}."); } else if (invRec.Comentario == null) { ModelState.AddModelError("ComentarioNoIndicado", $"Debe indicar un comentario para la inversión {invRecViewModel.Inversiones[i].InversionId}."); } else if (invRec.CantidadRecuperada > (inversion.Total)) { ModelState.AddModelError("CantidadNoPermitida", $"No se puede recuperar dicha cantidad para la inversión {invRecViewModel.Inversiones[i].InversionId}, eliga una cantidad menor."); } else { invRec.Inversion = inversion; invRec.FechaRecuperacion = DateTime.Now; //Recuperamos el inversor que está conectado, a la vez que recuperamos su monedero. inversion.Inversor = await _context.Users.OfType <Inversor>().Include(m => m.Monedero).FirstOrDefaultAsync <Inversor>(c => c.UserName.Equals(User.Identity.Name)); if (invRec.CantidadRecuperada <= inversion.Intereses) { inversion.Total = inversion.Total - invRec.CantidadRecuperada; inversion.Intereses = inversion.Intereses - invRec.CantidadRecuperada; } else { inversion.Total = inversion.Total - invRec.CantidadRecuperada; inversion.Intereses = 0; float resto = invRec.CantidadRecuperada - inversion.Intereses; inversion.Cuota = inversion.Cuota - resto; } //Actualizamos el dinero del monedero del inversor. ((Inversor)inversion.Inversor).Monedero.Dinero = ((Inversor)inversion.Inversor).Monedero.Dinero + (decimal)invRec.CantidadRecuperada; invRec.Monedero = ((Inversor)inversion.Inversor).Monedero; _context.Add(invRec); } } if (ModelState.ErrorCount > 0) { return(View(invRecViewModel)); } await _context.SaveChangesAsync(); InversionRecuperadaDetailsViewModel detailsVM = new InversionRecuperadaDetailsViewModel(); detailsVM.IdsToAdd = invRecViewModel.InversionesRecuperadas.Select(invrec => invrec.InversionRecuperadaId).ToArray(); return(RedirectToAction("Details", detailsVM)); }
public async Task Create_POST_DatosCorrectos_Cuota() { 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; String[] ids = new string[1] { "1" }; SelectedInversionForRecuperarInversionViewModel inversiones = new SelectedInversionForRecuperarInversionViewModel() { IdsToAdd = ids }; var rating = new Rating { RatingId = 1, Nombre = "A" }; Monedero monedero1 = new Monedero { MonederoId = 1, Dinero = 500 }; 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 = "******", Monedero = monedero1 }; IList <Inversion> inversions = new Inversion[1] { new Inversion { InversionId = 1, Cuota = 150, EstadosInversiones = "En_Curso", Intereses = 50, Inversor = inversor1, Proyecto = proyecto1, TipoInversionesId = 1, Total = 200 } }; IList <InversionRecuperada> listaInvRec = new InversionRecuperada[1] { new InversionRecuperada { InversionRecuperadaId = 1, Inversion = inversions[0], CantidadRecuperada = 100, Comentario = "OK", FechaRecuperacion = DateTime.Now } }; InversionRecuperadaCreateViewModel inversionEsperada = new InversionRecuperadaCreateViewModel { Inversiones = inversions, InversionesRecuperadas = listaInvRec }; //ACT (Actuar) --> Realización de la prueba var result = controller.Create(inversionEsperada); //ASSERT --> Verificación de que el resultado fue el que se esperaba var viewResult = Assert.IsType <RedirectToActionResult>(result.Result); var current = context.InversionRecuperada.FirstOrDefault(); Assert.Equal(current, inversionEsperada.InversionesRecuperadas[0], Comparer.Get <InversionRecuperada>((i1, i2) => i1.Equals(i2))); Assert.Equal(viewResult.ActionName, "Details"); } }
public async Task Create_POST_CantidadNoPermitida() { 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; String[] ids = new string[1] { "1" }; SelectedInversionForRecuperarInversionViewModel inversiones = new SelectedInversionForRecuperarInversionViewModel() { IdsToAdd = ids }; var rating = new Rating { RatingId = 1, Nombre = "A" }; 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 = "******" }; IList <Inversion> inversions = new Inversion[1] { new Inversion { InversionId = 1, Cuota = 6, EstadosInversiones = "En_Curso", Intereses = 12, Inversor = inversor1, Proyecto = proyecto1, TipoInversionesId = 1, Total = 50 } }; IList <InversionRecuperada> listaInvRec = new InversionRecuperada[1] { new InversionRecuperada { InversionRecuperadaId = 1, Inversion = inversions[0], CantidadRecuperada = 50000, Comentario = "OK", FechaRecuperacion = DateTime.Now } }; InversionRecuperadaCreateViewModel inversionEsperada = new InversionRecuperadaCreateViewModel { Inversiones = inversions, InversionesRecuperadas = listaInvRec }; //ACT (Actuar) --> Realización de la prueba var result = controller.Create(inversionEsperada); //ASSERT --> Verificación de que el resultado fue el que se esperaba ViewResult viewResult = Assert.IsType <ViewResult>(result.Result); //Comprueba si el controlador devuelve una vista InversionRecuperadaCreateViewModel model = viewResult.Model as InversionRecuperadaCreateViewModel; var error = viewResult.ViewData.ModelState["CantidadNoPermitida"].Errors.FirstOrDefault(); Assert.Equal("No se puede recuperar dicha cantidad para la inversión 1, eliga una cantidad menor.", error.ErrorMessage); Assert.Equal(inversionEsperada.Inversiones, model.Inversiones, Comparer.Get <Inversion>((i1, i2) => i1.Equals(i2))); } }