예제 #1
0
        public User Create(UserPostModel userModel)
        {
            User toAdd = UserPostModel.ToUser(userModel);

            context.Users.Add(toAdd);
            context.SaveChanges();
            context.Users.Attach(toAdd);

            UserRole userRole = new UserRole
            {
                Id   = 1,
                Name = RoleConstants.REGULAR
            };
            HistoryUserRole history = new HistoryUserRole
            {
                UserRole  = userRole,
                StartTime = DateTime.Now
            };
            List <HistoryUserRole> list = new List <HistoryUserRole>
            {
                history
            };

            context.UserRoles.Add(userRole);
            context.UserRoles.Attach(userRole);

            toAdd.HistoryUserRole = list;

            context.SaveChanges();

            //dbcontext.Users.Add(toAdd);
            //dbcontext.SaveChanges();
            return(toAdd);
        }
예제 #2
0
 public static HistoryUserRoleGetModel FromHistoryUserRole(HistoryUserRole historyUserRole)
 {
     return(new HistoryUserRoleGetModel
     {
         Username = historyUserRole.User.Username,
         UserRoleName = historyUserRole.UserRole.Name,
         StartTime = historyUserRole.StartTime,
         EndTime = historyUserRole.EndTime
     });
 }
예제 #3
0
        public void Delete()
        {
            var options = new DbContextOptionsBuilder <UsersDbContext>()
                          .UseInMemoryDatabase(databaseName: nameof(Delete))
                          .Options;

            using (var context = new UsersDbContext(options))
            {
                var      usersService = new UserService(context, config);
                UserRole userRole     = new UserRole
                {
                    Id   = 3,
                    Name = RoleConstants.ADMIN
                };

                HistoryUserRole history = new HistoryUserRole
                {
                    StartTime  = DateTime.Now,
                    UserRoleId = 3,
                    UserRole   = userRole,
                };
                List <HistoryUserRole> list = new List <HistoryUserRole>
                {
                    history
                };

                User user1 = new User
                {
                    Username        = "******",
                    HistoryUserRole = list,
                    DateRegister    = DateTime.Now
                };
                //aragorn.History.Add(history);

                var addedCosmin = new RegisterPostModel
                {
                    Email     = "*****@*****.**",
                    FirstName = "Cosmin",
                    LastName  = "Cosmin",
                    Password  = "******",
                    Username  = "******"
                };
                usersService.Register(addedCosmin);
                User expected = context.Users.AsNoTracking()
                                .Include(x => x.HistoryUserRole)
                                .ThenInclude(x => x.UserRole)
                                .FirstOrDefault(x => x.FirstName.Equals(addedCosmin.FirstName));

                usersService.Delete(expected.Id, user1);

                Assert.IsNull(usersService.GetById(expected.Id));
            }
        }
        public void ValidGetAllShouldDisplayAllHistoryUserRole()
        {
            var options = new DbContextOptionsBuilder <UsersDbContext>()
                          .UseInMemoryDatabase(databaseName: nameof(ValidGetAllShouldDisplayAllHistoryUserRole))
                          .Options;

            using (var context = new UsersDbContext(options))
            {
                var userService = new UserService(context, config);

                var added = new HistoryUserRole

                {
                    User = new User
                    {
                        Username = "******",
                    },
                    UserRole = new UserRole
                    {
                        Name = RoleConstants.REGULAR
                    },
                    StartTime = DateTime.Now,
                    EndTime   = null
                };
                var added2 = new HistoryUserRole

                {
                    User = new User
                    {
                        Username = "******",
                    },
                    UserRole = new UserRole
                    {
                        Name = RoleConstants.MODERATOR
                    },
                    StartTime = DateTime.Now.AddDays(10),
                    EndTime   = null
                };

                context.HistoryUserRoles.Add(added);
                context.HistoryUserRoles.Add(added2);
                context.SaveChanges();
                // Act
                var result = userService.GetAllHistory();

                // Assert

                Assert.AreEqual(2, result.Count());
                Assert.AreNotEqual(0, result.Count());
            }
        }
예제 #5
0
        public void GetById()
        {
            var options = new DbContextOptionsBuilder <UsersDbContext>()
                          .UseInMemoryDatabase(databaseName: nameof(GetById))
                          .Options;

            using (var context = new UsersDbContext(options))
            {
                var usersService    = new UserService(context, config);
                var defaultuserRole = new UserRole
                {
                    Name = RoleConstants.ADMIN
                };
                context.UserRoles.Add(defaultuserRole);
                context.SaveChanges();
                context.Entry(defaultuserRole).State = EntityState.Detached;

                UserRole userRole = new UserRole
                {
                    Name = RoleConstants.ADMIN
                };
                HistoryUserRole history = new HistoryUserRole
                {
                    UserRole = userRole,
                };
                List <HistoryUserRole> list = new List <HistoryUserRole>
                {
                    history
                };
                User user = new User
                {
                    Username        = "******",
                    HistoryUserRole = list,
                    DateRegister    = DateTime.Now,
                    Password        = "******",
                    Email           = "*****@*****.**",
                    FirstName       = "trolallaa",
                    LastName        = "tralalalal"
                };
                context.Users.Add(user);
                context.SaveChanges();

                User expected = context.Users.AsNoTracking()
                                .FirstOrDefault(x => x.FirstName.Equals(user.FirstName));
                UserGetModel actual = usersService.GetById(expected.Id);

                Assert.AreEqual(expected.Username, actual.Username);
                Assert.AreEqual(expected.Id, actual.Id);
            }
        }
예제 #6
0
        public UserGetModel Upsert(int id, UserPostModel user, User userLogat)
        {
            var existing = context
                           .Users
                           .Include(x => x.HistoryUserRole)
                           .ThenInclude(x => x.UserRole)
                           .AsNoTracking().FirstOrDefault(u => u.Id == id);

            if (existing == null)
            {
                return(null);
            }
            if (existing.Username.Equals(userLogat.Username))
            {
                return(null);
            }

            string existingCurrentRole = getLatestHistoryUserRole(existing.HistoryUserRole).UserRole.Name;
            string addedByCurrentRole  = getLatestHistoryUserRole(userLogat.HistoryUserRole).UserRole.Name;

            HistoryUserRole currentHistory = getLatestHistoryUserRole(existing.HistoryUserRole);

            if (existing == null)
            {
                //dbcontext.Users.(UserPostModel.ToUser(user));
                //dbcontext.SaveChanges();
                //return UserGetModel.FromUser(UserPostModel.ToUser(user));
                User toReturn = Create(user);
                return(UserGetModel.FromUser(toReturn));
            }

            User toUpdate = UserPostModel.ToUser(user);

            toUpdate.Password     = existing.Password;
            toUpdate.DateRegister = existing.DateRegister;
            toUpdate.Id           = id;
            if (addedByCurrentRole.Equals(RoleConstants.MODERATOR))
            {
                //  https://www.aspforums.net/Threads/289493/Get-Number-of-months-between-two-dates-in-C/
                var dateRegister = userLogat.DateRegister;
                var dateCurrent  = DateTime.Now;
                int months       = dateCurrent.Subtract(dateRegister).Days / 30;
                //  toAdd.Id = id;

                if (months >= 6)
                {
                    //dbcontext.Users.Update(toAdd);
                    //dbcontext.SaveChanges();
                    //return UserGetModel.FromUser(toAdd);
                    toUpdate.HistoryUserRole = existing.HistoryUserRole;
                    context.Users.Update(toUpdate);
                    context.SaveChanges();
                    context.Users.Attach(toUpdate);

                    if (existingCurrentRole != user.UserRole)
                    {
                        IEnumerable <UserRole> allRoles = context.UserRoles;
                        List <String>          list     = new List <string>();
                        foreach (UserRole userRole in allRoles)
                        {
                            list.Add(userRole.Name);
                        }
                        if (list.Contains(user.UserRole))
                        {
                            UserRole        userRole = searchForRoleByTitle(user.UserRole);
                            HistoryUserRole history  = new HistoryUserRole
                            {
                                UserRole  = userRole,
                                StartTime = DateTime.Now
                            };
                            currentHistory.EndTime = DateTime.Now;

                            context.UserRoles.Attach(userRole);
                            toUpdate.HistoryUserRole.Add(history);
                            context.SaveChanges();
                            return(UserGetModel.FromUser(toUpdate));
                        }
                        return(null);
                    }
                    return(null);
                    //  dbcontext.Users.Update(toAdd);
                    //dbcontext.SaveChanges();
                    //return toAdd;
                }
                return(null);
            }
            if (addedByCurrentRole.Equals(RoleConstants.ADMIN))
            {
                //toAdd.Id = id;
                //dbcontext.Users.Update(toAdd);
                //dbcontext.SaveChanges();
                //return UserGetModel.FromUser(toAdd);

                toUpdate.HistoryUserRole = existing.HistoryUserRole;
                context.Users.Update(toUpdate);
                context.SaveChanges();
                context.Users.Attach(toUpdate);

                if (existingCurrentRole != user.UserRole)
                {
                    IEnumerable <UserRole> allRoles = context.UserRoles;
                    List <String>          list     = new List <string>();
                    foreach (UserRole userRole in allRoles)
                    {
                        list.Add(userRole.Name);
                    }
                    if (list.Contains(user.UserRole))
                    {
                        UserRole        userRole = searchForRoleByTitle(user.UserRole);
                        HistoryUserRole history  = new HistoryUserRole
                        {
                            UserRole  = userRole,
                            StartTime = DateTime.Now
                        };
                        currentHistory.EndTime = DateTime.Now;

                        context.UserRoles.Attach(userRole);
                        toUpdate.HistoryUserRole.Add(history);
                        context.SaveChanges();
                        return(UserGetModel.FromUser(toUpdate));
                    }
                    return(null);
                }
                return(null);
            }
            return(null);
        }
예제 #7
0
        public UserGetModel Register(RegisterPostModel register)
        {
            User existing = context
                            .Users
                            .FirstOrDefault(u => u.Username == register.Username);

            if (existing != null)
            {
                return(null);
            }

            User toAdd = new User
            {
                Email           = register.Email,
                LastName        = register.LastName,
                FirstName       = register.FirstName,
                Password        = ComputeSha256Hash(register.Password),
                Username        = register.Username,
                DateRegister    = DateTime.Now,
                HistoryUserRole = new List <HistoryUserRole>()
            };

            context.Users.Add(toAdd);
            context.SaveChanges();
            context.Users.Attach(toAdd);
            UserRole userRole = new UserRole
            {
                Id   = 1,
                Name = RoleConstants.REGULAR,
            };

            //var defaultRole = dbcontext
            //   .UserRoles
            //   .AsNoTracking()
            //   .FirstOrDefault(uRole => uRole.Title == RoleConstants.REGULAR);

            HistoryUserRole history = new HistoryUserRole
            {
                User      = toAdd,
                UserRole  = userRole,
                StartTime = DateTime.Now,
                EndTime   = null
            };
            List <HistoryUserRole> list = new List <HistoryUserRole>
            {
                history
            };

            //dbcontext.HistoryUserRoles.Add(new HistoryUserRole
            //{
            //    User = toAdd,
            //    UserRole = RoleConstants.REGULAR,
            //    StartTime = DateTime.Now,
            //    EndTime = null

            //});
            context.UserRoles.Add(userRole);
            context.UserRoles.Attach(userRole);
            toAdd.HistoryUserRole = list;
            context.SaveChanges();
            return(Authenticate(register.Username, register.Password));
        }
예제 #8
0
        public void Upsert()
        {
            var options = new DbContextOptionsBuilder <UsersDbContext>()
                          .UseInMemoryDatabase(databaseName: nameof(Upsert))
                          .Options;

            using (var context = new UsersDbContext(options))
            {
                var usersService = new UserService(context, config);

                var defaultuserRole = new UserRole
                {
                    Name = RoleConstants.REGULAR
                };
                context.UserRoles.Add(defaultuserRole);
                context.Entry(defaultuserRole).State = EntityState.Detached;

                var defaultuserRole2 = new UserRole
                {
                    Name = RoleConstants.ADMIN
                };
                context.UserRoles.Add(defaultuserRole2);
                context.Entry(defaultuserRole2).State = EntityState.Detached;

                UserRole userRoleRegular = new UserRole
                {
                    Name = RoleConstants.REGULAR
                };
                HistoryUserRole historyRegular = new HistoryUserRole
                {
                    UserRole = userRoleRegular,
                };
                List <HistoryUserRole> listRegular = new List <HistoryUserRole>
                {
                    historyRegular
                };
                User radu69 = new User
                {
                    Username        = "******",
                    HistoryUserRole = listRegular,
                    DateRegister    = DateTime.Now,
                    Password        = "******",
                    Email           = "*****@*****.**",
                    FirstName       = "radu",
                    LastName        = "radu"
                };
                context.Users.Add(radu69);
                context.SaveChanges();
            }

            using (var context = new UsersDbContext(options))
            {
                var usersService = new UserService(context, config);

                var defaultuserRole = new UserRole
                {
                    Name = RoleConstants.ADMIN
                };
                context.UserRoles.Add(defaultuserRole);
                context.SaveChanges();
                context.Entry(defaultuserRole).State = EntityState.Detached;

                UserRole userRole = new UserRole
                {
                    Name = RoleConstants.ADMIN
                };
                HistoryUserRole history = new HistoryUserRole
                {
                    UserRole = userRole,
                };
                List <HistoryUserRole> list = new List <HistoryUserRole>
                {
                    history
                };
                User user2 = new User
                {
                    Username        = "******",
                    HistoryUserRole = list,
                    DateRegister    = DateTime.Now,
                    Password        = "******",
                    Email           = "*****@*****.**",
                    FirstName       = "cristina",
                    LastName        = "cristina"
                };

                User firstAdded = new User
                {
                    Username     = "******",
                    DateRegister = DateTime.Now,
                    Password     = "******",
                    Email        = "*****@*****.**",
                    FirstName    = "radu",
                    LastName     = "radu"
                };

                var toUpdateWith = new UserPostModel
                {
                    FirstName = "Gimli",
                    LastName  = "Axeman",
                    UserName  = "******",
                    Email     = "*****@*****.**",
                    Password  = "******",
                    UserRole  = RoleConstants.ADMIN
                };

                var result = context.ChangeTracker.Entries()
                             .Where(t => t.State == EntityState.Unchanged);

                UserGetModel lalala = usersService.Upsert(1, toUpdateWith, user2);

                Assert.AreNotEqual(lalala.Username, firstAdded.Username);
                Assert.AreNotEqual(lalala.Email, firstAdded.Email);
                Assert.AreNotEqual(lalala.UserRole, RoleConstants.ADMIN);
            }
        }