示例#1
0
        public async Task Select_NoProyectoSeleccionados()
        {
            using (context)
            {
                // ARRANGE: Set the test case will use the inMemoty database created in the constructor
                var controller = new InversionsController(context);
                controller.ControllerContext.HttpContext = inversionContext;

                //Proyectos
                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 = 3
                    },
                    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 = 2
                    }
                };

                //Areas
                var expectedAreas = new Areas[1] {
                    new Areas {
                        Nombre = "Sanidad"
                    }
                };

                //Tipos de Inversiones
                var expectedTiposInversiones = new TiposInversiones[1] {
                    new TiposInversiones {
                        Nombre = "Crowdfunding"
                    }
                };

                //Rating
                var expectedRating = new Rating[1] {
                    new Rating {
                        Nombre = "A"
                    }
                };

                SelectedProyectosForInversionViewModel Proyectos = new SelectedProyectosForInversionViewModel {
                    IdsToAdd = null
                };

                // ACT
                var result = controller.SelectProyectosForInversion(Proyectos);

                //ASSERT
                var viewResult = Assert.IsType <ViewResult>(result);
                SelectProyectosForInversionViewModel model = viewResult.Model as SelectProyectosForInversionViewModel;

                Assert.Equal(expectedProyectos, model.Proyectos, Comparer.Get <Proyecto>((p1, p2) => p1.Nombre == p2.Nombre &&
                                                                                         p1.Importe == p2.Importe && p1.MinInversion == p2.MinInversion && p1.Progreso == p2.Progreso && p1.ProyectoId == p2.ProyectoId));

                Assert.Equal(expectedTiposInversiones, model.TiposInversiones, Comparer.Get <TiposInversiones>((p1, p2) => p1.Nombre == p2.Nombre));
                Assert.Equal(expectedAreas, model.Areas, Comparer.Get <Areas>((a1, b2) => a1.Nombre == a1.Nombre));
                Assert.Equal(expectedRating, model.Rating, Comparer.Get <Rating>((r1, r2) => r1.Nombre == r2.Nombre));
                // Check that both collections (expected and result returned) have the same elements with the same name
            }
        }
        public async Task Select_NoProyectoSeleccionados()
        {
            using (context)
            {
                //Arrange

                var controller = new SolicitudesController(context);
                controller.ControllerContext.HttpContext = solicitudContext;
                var proyectosesperados = new Proyecto[2]
                {
                    new Proyecto {
                        ProyectoId = 1, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 70000, Interes = null, MinInversion = 50, Nombre = "POCHOLO RULES", NumInversores = 0, Plazo = null, Progreso = 0, RatingId = null
                    },
                    new Proyecto {
                        ProyectoId = 2, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 30000, Interes = null, MinInversion = 50, Nombre = "GRE-GYM", NumInversores = 0, Plazo = null, Progreso = 0, RatingId = null
                    }
                };
                //Areas y Tipos que se espera que se retornen

                var tiposEsperados = new TiposInversiones[1] {
                    new TiposInversiones {
                        Nombre = "Crowdfunding"
                    }
                };
                var areasEsperadas = new Areas[1] {
                    new Areas {
                        Nombre = "TIC"
                    }
                };

                SelectedProyectosForSolicitudViewModel proyectos = new SelectedProyectosForSolicitudViewModel {
                    IdsToAdd = null
                };

                // Act

                var result = controller.SelectProyectosForSolicitud(proyectos);

                // Assert
                var viewResult = Assert.IsType <ViewResult>(result);
                SelectProyectosForSolicitudViewModel model = viewResult.Model as SelectProyectosForSolicitudViewModel;
                //Comprobamos los proyectos devueltos
                Assert.Equal(proyectosesperados, model.proyectos, Comparer.Get <Proyecto>((p1, p2) => p1.Nombre == p2.Nombre &&
                                                                                          p1.Importe == p2.Importe && p1.MinInversion == p2.MinInversion && p1.Progreso == p2.Progreso && p1.ProyectoId == p2.ProyectoId));
                //Comprobamos las areas y tipos devueltos
                Assert.Equal(tiposEsperados, model.Tipos, Comparer.Get <TiposInversiones>((p1, p2) => p1.Nombre == p2.Nombre));
                Assert.Equal(areasEsperadas, model.areas, Comparer.Get <Areas>((p1, p2) => p1.Nombre == p2.Nombre));
            }
        }
        public async Task Select_FiltroDeCapital()
        {
            //Arrenge
            //Base SQL ya generada con datos incluidos
            using (context)
            {
                var proyectosesperados = new Proyecto[1] {
                    new Proyecto {
                        ProyectoId = 1, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 70000, Interes = null, MinInversion = 50, Nombre = "POCHOLO RULES", NumInversores = 0, Plazo = null, Progreso = 0, RatingId = null
                    }
                };

                //Areas y Tipos que se espera que se retornen

                var tiposEsperados = new TiposInversiones[1] {
                    new TiposInversiones {
                        Nombre = "Crowdfunding"
                    }
                };
                var areasEsperadas = new Areas[1] {
                    new Areas {
                        Nombre = "TIC"
                    }
                };

                var controller = new SolicitudesController(context);
                controller.ControllerContext.HttpContext = solicitudContext;
                //Act
                string[] vacia  = new string[0];
                var      result = controller.SelectProyectosForSolicitud(null, vacia, vacia, 65000, null);

                //Assert
                var viewResult = Assert.IsType <ViewResult>(result);
                SelectProyectosForSolicitudViewModel model = viewResult.Model as SelectProyectosForSolicitudViewModel;
                //Comprobamos los proyectos devueltos
                Assert.Equal(proyectosesperados, model.proyectos, Comparer.Get <Proyecto>((p1, p2) => p1.Nombre == p2.Nombre &&
                                                                                          p1.Importe == p2.Importe && p1.MinInversion == p2.MinInversion && p1.Progreso == p2.Progreso && p1.ProyectoId == p2.ProyectoId));
                //Comprobamos las areas y tipos devueltos
                Assert.Equal(tiposEsperados, model.Tipos, Comparer.Get <TiposInversiones>((p1, p2) => p1.Nombre == p2.Nombre));
                Assert.Equal(areasEsperadas, model.areas, Comparer.Get <Areas>((p1, p2) => p1.Nombre == p2.Nombre));
            }
        }
示例#4
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;
        }
示例#5
0
        public SolicitudesController_Details_test()
        {
            _contextOptions = CreateNewContextOptions();
            // Insert seed data into the database using one instance of the
            context = new ApplicationDbContext(_contextOptions);


            context.Users.Add(new Trabajador
            {
                UserName         = "******",
                Email            = "*****@*****.**",
                Apellido1        = "Ruiz",
                Apellido2        = "Villafranca",
                Domicilio        = "C/Hellin",
                Municipio        = "Albacete",
                NIF              = "06290424",
                Nacionalidad     = "Española",
                PaisDeResidencia = "España",
                Provincia
                    = "Albacete"
            });


            Areas area = new Areas {
                Nombre = "TIC"
            };

            context.Areas.Add(area);

            TiposInversiones tipo = new TiposInversiones {
                Nombre = "Crowdfunding"
            };

            context.TiposInversiones.Add(tipo);
            Rating rating1 = new Rating {
                Nombre = "A"
            };
            Rating rating2 = new Rating {
                Nombre = "F"
            };

            context.Rating.Add(rating1);
            context.Rating.Add(rating2);

            context.Proyecto.Add(new Proyecto {
                ProyectoId = 1, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 70000, Interes = 10, MinInversion = 50, Nombre = "POCHOLO RULES", NumInversores = 0, Plazo = 5, Progreso = 0, RatingId = 1
            });
            context.Proyecto.Add(new Proyecto {
                ProyectoId = 2, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 30000, Interes = null, MinInversion = 50, Nombre = "GRE-GYM", NumInversores = 0, Plazo = null, Progreso = 0, RatingId = 2
            });
            context.Proyecto.Add(new Proyecto {
                ProyectoId = 3, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 30000, Interes = null, MinInversion = 50, Nombre = "EINSTEIN-MANIA", NumInversores = 0, Plazo = null, Progreso = 0, RatingId = 1
            });

            context.Solicitud.Add(new Solicitud
            {
                SolicitudId = 1,
                Estado      = Estados.Aceptada,
                Proyecto    = new Proyecto {
                    ProyectoId = 1, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 70000, Interes = 10, MinInversion = 50, Nombre = "POCHOLO RULES", NumInversores = 0, Plazo = 5, Progreso = 0, RatingId = 1
                },
                Trabajador = new Trabajador
                {
                    UserName         = "******",
                    Email            = "*****@*****.**",
                    Apellido1        = "Ruiz",
                    Apellido2        = "Villafranca",
                    Domicilio        = "C/Hellin",
                    Municipio        = "Albacete",
                    NIF              = "06290424",
                    Nacionalidad     = "Española",
                    PaisDeResidencia = "España",
                    Provincia        = "Albacete"
                }
            });

            context.Solicitud.Add(new Solicitud
            {
                SolicitudId = 2,
                Estado      = Estados.Rechazada,
                Proyecto    = new Proyecto {
                    ProyectoId = 2, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 30000, Interes = null, MinInversion = 50, Nombre = "GRE-GYM", NumInversores = 0, Plazo = null, Progreso = 0, RatingId = 2
                },
                Trabajador = new Trabajador
                {
                    UserName         = "******",
                    Email            = "*****@*****.**",
                    Apellido1        = "Ruiz",
                    Apellido2        = "Villafranca",
                    Domicilio        = "C/Hellin",
                    Municipio        = "Albacete",
                    NIF              = "06290424",
                    Nacionalidad     = "Española",
                    PaisDeResidencia = "España",
                    Provincia        = "Albacete"
                }
            });

            context.SaveChanges();

            foreach (var proyecto in context.Proyecto.ToList())
            {
                context.ProyectoAreas.Add(new ProyectoAreas {
                    Proyecto = proyecto, Areas = context.Areas.First()
                });
                context.ProyectoTiposInversiones.Add(new ProyectoTiposInversiones {
                    Proyecto = proyecto, TiposInversiones = context.TiposInversiones.First()
                });
            }
            context.SaveChanges();

            //how to simulate the connection
            System.Security.Principal.GenericIdentity user     = new System.Security.Principal.GenericIdentity("*****@*****.**");
            System.Security.Claims.ClaimsPrincipal    identity = new System.Security.Claims.ClaimsPrincipal(user);
            solicitudContext      = new DefaultHttpContext();
            solicitudContext.User = identity;
        }
        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));
            }
        }
        //Constructor -> Iniciamos la base de datos InMemory.
        public InversionsController_Details_Test()
        {
            _contextOptions = CreateNewContextOptions();
            context         = new ApplicationDbContext(_contextOptions);

            // Insert seed data into the database using one instance of the context

            //Tipos de Inversiones
            TiposInversiones tipo1 = new TiposInversiones {
                Nombre = "Crowdfunding"
            };
            TiposInversiones tipo2 = new TiposInversiones {
                Nombre = "Venture Capital"
            };

            context.TiposInversiones.Add(tipo1);
            context.TiposInversiones.Add(tipo2);

            //Rating
            Rating rating = new Rating {
                Nombre = "A"
            };

            context.Rating.Add(rating);

            //Monedero
            Monedero monedero = new Monedero
            {
                MonederoId = 1,
                Dinero     = 8000
            };

            context.Monedero.Add(monedero);

            //Proyectos
            Proyecto proyecto1 = 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,
                Rating          = rating
            };

            context.Proyecto.Add(proyecto1);

            //Inversor
            Inversor inversor = 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         = "******",
                Monedero         = monedero
            };

            context.Users.Add(inversor);

            //Inversiones
            context.Inversion.Add(new Inversion
            {
                InversionId        = 1,
                Cuota              = 750,
                Intereses          = (float)5.9,
                Total              = (float)794.25,
                EstadosInversiones = "En Curso",
                TipoInversionesId  = 1,
                Proyecto           = 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
                },
                Inversor = 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         = "******"
                }
            });
            context.Inversion.Add(new Inversion
            {
                InversionId        = 2,
                Cuota              = 850,
                Intereses          = (float)5.9,
                Total              = (float)911.625,
                EstadosInversiones = "En Curso",
                TipoInversionesId  = 2,
                Proyecto           = 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
                },
                Inversor = 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         = "******"
                }
            });

            context.SaveChanges();

            //Simulación conexión de un usuario
            System.Security.Principal.GenericIdentity user     = new System.Security.Principal.GenericIdentity("*****@*****.**");
            System.Security.Claims.ClaimsPrincipal    identity = new System.Security.Claims.ClaimsPrincipal(user);
            inversionContext      = new Microsoft.AspNetCore.Http.DefaultHttpContext();
            inversionContext.User = identity;
        }
        public async Task Select_FallandoAreasyTiposInversiones()
        {
            // Arrange
            using (context) //Set the test case will use the inMemory database created in the constructor
            {
                var controller = new AccountController(null, null, null, null, context);

                //Areas
                var areaEsperada = new Areas[18] {
                    new Areas {
                        AreasId = 1, Nombre = "Sanidad"
                    }, new Areas {
                        AreasId = 2, Nombre = "Consultoria"
                    }, new Areas {
                        AreasId = 3, Nombre = "Educación"
                    }, new Areas {
                        AreasId = 4, Nombre = "Seguridad"
                    }, new Areas {
                        AreasId = 5, Nombre = "Construcción"
                    }, new Areas {
                        AreasId = 6, Nombre = "Transporte"
                    }, new Areas {
                        AreasId = 7, Nombre = "TIC"
                    }, new Areas {
                        AreasId = 8, Nombre = "Ingeniería"
                    }, new Areas {
                        AreasId = 9, Nombre = "Hogar"
                    }, new Areas {
                        AreasId = 10, Nombre = "Alimentación"
                    }, new Areas {
                        AreasId = 11, Nombre = "Textil"
                    }, new Areas {
                        AreasId = 12, Nombre = "Comercio"
                    }, new Areas {
                        AreasId = 13, Nombre = "Hosteleria"
                    }, new Areas {
                        AreasId = 14, Nombre = "Administración"
                    }, new Areas {
                        AreasId = 15, Nombre = "Automóviles"
                    }, new Areas {
                        AreasId = 16, Nombre = "Reparaciones"
                    }, new Areas {
                        AreasId = 17, Nombre = "Banca"
                    }, new Areas {
                        AreasId = 18, Nombre = "Maquinaría"
                    }
                };

                //TiposInversiones
                var tipoEsperado = new TiposInversiones[3] {
                    new TiposInversiones {
                        TiposInversionesId = 1, Nombre = "Business Angels"
                    }, new TiposInversiones {
                        TiposInversionesId = 2, Nombre = "Crownfunding"
                    }, new TiposInversiones {
                        TiposInversionesId = 3, Nombre = "Venture Capital"
                    }
                };

                //Rating
                var ratingEsperado = new Rating[4] {
                    new Rating {
                        Nombre = "A"
                    }, new Rating {
                        RatingId = 2, Nombre = "B"
                    }, new Rating {
                        RatingId = 3, Nombre = "C"
                    }, new Rating {
                        RatingId = 4, Nombre = "D"
                    }
                };

                string[] idAreas = new string[1] {
                    "1"
                };
                string[] idRating = new string[1] {
                    "1"
                };
                string[] idTiposInversion = new string[1] {
                    "1"
                };

                SelectedPreferenciasForInversor preferencias = new SelectedPreferenciasForInversor
                {
                    IdsToAddAreas          = null,
                    IdsToAddRating         = idRating,
                    IdsToAddTiposInversion = null
                };

                //Act
                var result = controller.SelectPreferenciasForInversor(preferencias);

                //Assert

                var viewResult = Assert.IsType <ViewResult>(result);
                SelectPreferenciasForInversorViewModel model = viewResult.Model as SelectPreferenciasForInversorViewModel;

                Assert.Equal(areaEsperada, model.Areas, Comparer.Get <Areas>((a1, a2) => a1.Nombre == a2.Nombre));
                Assert.Equal(tipoEsperado, model.TiposInversiones, Comparer.Get <TiposInversiones>((t1, t2) => t1.Nombre == t2.Nombre));
                Assert.Equal(ratingEsperado, model.Rating, Comparer.Get <Rating>((r1, r2) => r1.Nombre == r2.Nombre));
            }
        }
        public async Task Select_ConParametros()
        {
            // Arrange
            using (context) //Set the test case will use the inMemory database created in the constructor
            {
                var controller = new AccountController(null, null, null, null, context);

                //Areas
                var areaEsperada = new Areas[18] {
                    new Areas {
                        AreasId = 1, Nombre = "Sanidad"
                    }, new Areas {
                        AreasId = 2, Nombre = "Consultoria"
                    }, new Areas {
                        AreasId = 3, Nombre = "Educación"
                    }, new Areas {
                        AreasId = 4, Nombre = "Seguridad"
                    }, new Areas {
                        AreasId = 5, Nombre = "Construcción"
                    }, new Areas {
                        AreasId = 6, Nombre = "Transporte"
                    }, new Areas {
                        AreasId = 7, Nombre = "TIC"
                    }, new Areas {
                        AreasId = 8, Nombre = "Ingeniería"
                    }, new Areas {
                        AreasId = 9, Nombre = "Hogar"
                    }, new Areas {
                        AreasId = 10, Nombre = "Alimentación"
                    }, new Areas {
                        AreasId = 11, Nombre = "Textil"
                    }, new Areas {
                        AreasId = 12, Nombre = "Comercio"
                    }, new Areas {
                        AreasId = 13, Nombre = "Hosteleria"
                    }, new Areas {
                        AreasId = 14, Nombre = "Administración"
                    }, new Areas {
                        AreasId = 15, Nombre = "Automóviles"
                    }, new Areas {
                        AreasId = 16, Nombre = "Reparaciones"
                    }, new Areas {
                        AreasId = 17, Nombre = "Banca"
                    }, new Areas {
                        AreasId = 18, Nombre = "Maquinaría"
                    }
                };

                //TiposInversiones
                var tipoEsperado = new TiposInversiones[3] {
                    new TiposInversiones {
                        TiposInversionesId = 1, Nombre = "Business Angels"
                    }, new TiposInversiones {
                        TiposInversionesId = 2, Nombre = "Crownfunding"
                    }, new TiposInversiones {
                        TiposInversionesId = 3, Nombre = "Venture Capital"
                    }
                };

                //Rating
                var ratingEsperado = new Rating[4] {
                    new Rating {
                        Nombre = "A"
                    }, new Rating {
                        RatingId = 2, Nombre = "B"
                    }, new Rating {
                        RatingId = 3, Nombre = "C"
                    }, new Rating {
                        RatingId = 4, Nombre = "D"
                    }
                };

                string[] idAreas = new string[1] {
                    "1"
                };
                string[] idRating = new string[1] {
                    "1"
                };
                string[] idTiposInversion = new string[1] {
                    "1"
                };

                SelectedPreferenciasForInversor preferencias = new SelectedPreferenciasForInversor
                {
                    IdsToAddAreas          = idAreas,
                    IdsToAddRating         = idRating,
                    IdsToAddTiposInversion = idTiposInversion
                };

                //Act
                var result = controller.SelectPreferenciasForInversor(preferencias);

                //Assert
                var viewResult              = Assert.IsType <RedirectToActionResult>(result);
                var currentAreas            = viewResult.RouteValues.Values.First();
                var currentRating           = viewResult.RouteValues.Values.First();
                var currentTiposInversiones = viewResult.RouteValues.Values.First();

                Assert.Equal(preferencias.IdsToAddAreas, currentAreas);
                Assert.Equal(preferencias.IdsToAddRating, currentRating);
                Assert.Equal(preferencias.IdsToAddTiposInversion, currentTiposInversiones);
            }
        }