Beispiel #1
0
        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));
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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)));
            }
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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");
            }
        }
Beispiel #6
0
        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)));
            }
        }