diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index e6504e4..2c0fade 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -12,7 +12,11 @@ class Admin::UsersController < Admin::BaseController @contributors = ldap.search_users(:memberStatus, :contributor, :cn) if @show_contributors @sustainers = ldap.search_users(:memberStatus, :sustainer, :cn) if @show_sustainers @admins = ldap.search_users(:admin, true, :cn) - @pagy, @users = pagy(User.where(ou: ou).order(cn: :asc)) + + @username = params[:username].presence + users_scope = User.where(ou: ou).order(cn: :asc) + users_scope = users_scope.where("cn LIKE ?", "%#{User.sanitize_sql_like(@username.downcase)}%") if @username + @pagy, @users = pagy(users_scope) @stats = { users_confirmed: User.where(ou: ou).confirmed.count, diff --git a/app/views/admin/users/index.html.erb b/app/views/admin/users/index.html.erb index 413ec2b..f965059 100644 --- a/app/views/admin/users/index.html.erb +++ b/app/views/admin/users/index.html.erb @@ -30,6 +30,11 @@ <% end %> +
+ <%= render partial: "admin/username_search_form", + locals: { path: admin_users_path } %> +
+
diff --git a/spec/features/admin/users_spec.rb b/spec/features/admin/users_spec.rb index c804823..62d6a2b 100644 --- a/spec/features/admin/users_spec.rb +++ b/spec/features/admin/users_spec.rb @@ -15,6 +15,8 @@ RSpec.describe "Admin: User management", type: :feature do .and_return({ uid: user.cn, mail: user.email, display_name: "Freddy" }) allow_any_instance_of(LdapManager::FetchAvatar).to receive(:call) .and_return(nil) + allow_any_instance_of(LdapService).to receive(:search_users) + .and_return([]) login_as admin, :scope => :user end @@ -43,6 +45,30 @@ RSpec.describe "Admin: User management", type: :feature do expect(user.invitations.count).to eq(5) end + describe "User index page" do + it "lists all users" do + visit admin_users_path + + expect(page).to have_link "jimmy" + expect(page).to have_link "alfred" + end + + scenario 'Filter users by username' do + visit admin_users_path + + fill_in "username", with: "alf" + click_button "Filter" + + expect(page).to have_link "alfred" + expect(page).to have_no_link "jimmy" + + click_link "Remove filter" + + expect(page).to have_link "jimmy" + expect(page).to have_link "alfred" + end + end + scenario 'Remove invitations from account' do 3.times { Invitation.create(user: user) } expect(user.invitations.count).to eq(3)