public void DeleteLastAdminTest() { // Удалим всех пользователей, кроме админа var account = TestHelper.GetTestAccount(); var admin = TestHelper.GetAccountAdminUser(account.Id); using (var context = AccountDbContext.CreateFromAccountId(account.Id)) { var userRepository = context.GetUserRepository(); foreach (var existingUser in userRepository.QueryAll().ToArray()) { if (existingUser.Id != admin.Id) { userRepository.Remove(existingUser); } } } // Создадим дополнительного пользователя (не админа) var password = PasswordHelper.GetRandomPassword(10); var user = TestHelper.CreateTestUser(account.Id, password); // Проверим, что в аккаунте 1 админ using (var context = AccountDbContext.CreateFromAccountId(account.Id)) { var userRepository = context.GetUserRepository(); var adminUsers = userRepository.QueryAll().Where(t => t.Roles.Any(x => x.RoleId == RoleId.AccountAdministrators)).ToArray(); Assert.Equal(1, adminUsers.Length); admin = adminUsers[0]; } // Проверим, что нельзя удалить единственного админа using (var contexts = new DatabasesContext()) { var service = new UserService(contexts); Assert.Throws <CantDeleteLastAdminException>(() => { service.DeleteUser(service.GetById(account.Id, admin.Id), account.Id); }); contexts.SaveChanges(); } // Проверим, что админ остался using (var context = AccountDbContext.CreateFromAccountId(account.Id)) { var userRepository = context.GetUserRepository(); var existingUser = userRepository.QueryAll().FirstOrDefault(t => t.Id == admin.Id); Assert.NotNull(existingUser); } }
public void RemoveAdminRoleFromLastAdminTest() { // Удалим всех пользователей, кроме админа var account = TestHelper.GetTestAccount(); var admin = TestHelper.GetAccountAdminUser(account.Id); using (var context = AccountDbContext.CreateFromAccountId(account.Id)) { var userRepository = context.GetUserRepository(); foreach (var existingUser in userRepository.QueryAll().ToArray()) { if (existingUser.Id != admin.Id) { userRepository.Remove(existingUser); } } } // Проверим, что в аккаунте 1 админ using (var context = AccountDbContext.CreateFromAccountId(account.Id)) { var userRepository = context.GetUserRepository(); var adminUsers = userRepository.QueryAll().Where(t => t.Roles.Any(x => x.RoleId == RoleId.AccountAdministrators)).ToArray(); Assert.Equal(1, adminUsers.Length); admin = adminUsers[0]; } // Проверим, что нельзя удалить права админа у единственного админа using (var contexts = new DatabasesContext()) { var service = new UserService(contexts); Assert.Throws <CantRemoveAdminRoleFromLastAdmin>(() => { var existingAdmin = service.GetById(account.Id, admin.Id); service.RemoveUserRole(existingAdmin, existingAdmin.Roles.First(t => t.RoleId == RoleId.AccountAdministrators), account.Id); }); contexts.SaveChanges(); } // Проверим, что пользователь с правами администратора остался using (var context = AccountDbContext.CreateFromAccountId(account.Id)) { var userRepository = context.GetUserRepository(); var adminUsers = userRepository.QueryAll().Where(t => t.Roles.Any(x => x.RoleId == RoleId.AccountAdministrators)).ToArray(); Assert.Equal(1, adminUsers.Length); } }