Use correct configuration for group filter on user administration

https://community.openproject.org/work_packages/74763
This commit is contained in:
Oliver Günther
2026-05-20 08:20:54 +02:00
parent 7e1c003ba7
commit 3b3791f9ec
5 changed files with 63 additions and 4 deletions
@@ -46,8 +46,15 @@ module Users
when Queries::Users::Filters::GroupFilter
{
autocomplete_options: {
component: "opce-group-autocompleter",
resource: "groups"
component: "opce-user-autocompleter",
resource: "principals",
url: ::API::V3::Utilities::PathHelper::ApiV3Path.principals,
filters: [
{ name: "type", operator: "=", values: %w[Group] }
],
searchKey: "any_name_attribute",
inputValue: filter.values,
bindValue: "id"
}
}
else
@@ -30,4 +30,8 @@
class Queries::Users::Filters::GroupFilter < Queries::Users::Filters::UserFilter
include Queries::Filters::Shared::GroupFilter
def human_name
I18n.t(:label_group)
end
end
+17
View File
@@ -42,6 +42,7 @@ RSpec.describe "index users", :js do
describe "filtering", :js do
let!(:alice) { create(:user, login: "alice", firstname: "Alice", lastname: "Smith") }
let!(:bob) { create(:user, login: "bob", firstname: "Bob", lastname: "Jones") }
let!(:my_group) { create(:group, lastname: "My group", members: [alice]) }
it "filters by name via the search input and updates without a page reload" do
index_page.visit!
@@ -62,6 +63,22 @@ RSpec.describe "index users", :js do
index_page.filter_by_status(I18n.t(:status_registered))
index_page.expect_listed(registered)
end
it "filters by group and keeps that filter after reload" do
index_page.visit!
expect(page).to have_css("td.username a", text: alice.login)
expect(page).to have_css("td.username a", text: bob.login)
index_page.filter_by_group("My group")
index_page.expect_listed(alice)
index_page.expect_not_listed(bob)
page.refresh
index_page.expect_group_filter("My group")
index_page.expect_listed(alice)
index_page.expect_not_listed(bob)
end
end
describe "with some sortable users" do
@@ -44,7 +44,7 @@ RSpec.describe Queries::Users::Filters::GroupFilter do
it_behaves_like "basic query filter" do
let(:class_key) { :group }
let(:type) { :list_optional }
let(:name) { I18n.t("query_fields.member_of_group") }
let(:name) { I18n.t(:label_group) }
describe "#allowed_values" do
it "is a list of the possible values" do
+32 -1
View File
@@ -34,6 +34,8 @@ module Pages
module Admin
module Users
class Index < ::Pages::Page
include ::Components::Autocompleter::NgSelectAutocompleteHelpers
def path
"/users"
end
@@ -60,6 +62,12 @@ module Pages
.to have_css("tr.generic-table--empty-row", text: "There is currently nothing to display.")
end
def expect_not_listed(*users)
users.each do |user|
expect(page).to have_no_css("td.username a", text: user.login)
end
end
def expect_user_locked(user)
expect(page)
.to have_css("tr.user.locked td.username", text: user.login)
@@ -85,6 +93,29 @@ module Pages
wait_for_network_idle
end
def filter_by_group(value)
open_filter_panel
unless page.has_css?("li.advanced-filters--filter[data-filter-name='group']:not(.hidden)")
select "Group", from: "add_filter_select"
end
within_filter("group") do
select_autocomplete find('[data-filter-autocomplete="true"]'),
query: value,
results_selector: "body"
end
wait_for_network_idle
end
def expect_group_filter(value)
open_filter_panel
within_filter("group") do
expect_current_autocompleter_value find('[data-filter-autocomplete="true"]'), value
end
end
def clear_filters
find_by_id("user-filters-form-clear-button").click
@@ -105,7 +136,7 @@ module Pages
end
def within_filter(name, &)
within("[data-filter-name='#{name}']", &)
within("li.advanced-filters--filter[data-filter-name='#{name}']:not(.hidden)", &)
end
def order_by(key)