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)