diff --git a/plugin.rb b/plugin.rb index 30fa9a9..9f412fa 100644 --- a/plugin.rb +++ b/plugin.rb @@ -888,11 +888,11 @@ after_initialize do end add_filter_custom_filter("assigned") do |scope, filter_values, guardian| - return if !guardian.can_assign? || filter_values.blank? + next if !guardian.can_assign? || filter_values.blank? user_or_group_name = filter_values.compact.first - return if user_or_group_name.blank? + next if user_or_group_name.blank? if user_id = User.find_by_username(user_or_group_name)&.id scope.where(<<~SQL, user_id) @@ -906,19 +906,19 @@ after_initialize do end register_search_advanced_filter(/in:assigned/) do |posts| - return if !@guardian.can_assign? + next if !@guardian.can_assign? posts.where("topics.id IN (SELECT a.topic_id FROM assignments a WHERE a.active)") end register_search_advanced_filter(/in:unassigned/) do |posts| - return if !@guardian.can_assign? + next if !@guardian.can_assign? posts.where("topics.id NOT IN (SELECT a.topic_id FROM assignments a WHERE a.active)") end register_search_advanced_filter(/assigned:(.+)$/) do |posts, match| - return if !@guardian.can_assign? || match.blank? + next if !@guardian.can_assign? || match.blank? if user_id = User.find_by_username(match)&.id posts.where(<<~SQL, user_id) diff --git a/spec/requests/list_controller_spec.rb b/spec/requests/list_controller_spec.rb index d09ba19..10bb7ed 100644 --- a/spec/requests/list_controller_spec.rb +++ b/spec/requests/list_controller_spec.rb @@ -369,28 +369,47 @@ describe ListController do fab!(:post_2) { Fabricate(:post, topic: topic_2) } fab!(:post_3) { Fabricate(:post, topic: topic_3) } - before do - sign_in(admin) + describe "when user cannot assign" do + it "ignores the assign filter" do + add_to_assign_allowed_group(user) + + Assigner.new(topic_1, user).assign(user) + + get "/filter", params: { q: "assigned:#{user.username_lower}", format: :json } + + expect(response.status).to eq(200) + expect( + response.parsed_body.dig("topic_list", "topics").map { _1["id"] }, + ).to contain_exactly(topic_1.id, topic_2.id, topic_3.id) + end end - it "filters topics by assigned user" do - add_to_assign_allowed_group(user) + describe "when user can assign" do + before { sign_in(admin) } - Assigner.new(topic_1, admin).assign(user) + it "filters topics by assigned user" do + add_to_assign_allowed_group(user) - get "/filter", params: { q: "assigned:#{user.username_lower}", format: :json } + Assigner.new(topic_1, admin).assign(user) - expect(response.status).to eq(200) - expect(response.parsed_body.dig("topic_list", "topics").map { _1["id"] }).to contain_exactly(topic_1.id) - end + get "/filter", params: { q: "assigned:#{user.username_lower}", format: :json } - it "filters topics by assigned group" do - Assigner.new(topic_2, admin).assign(group) + expect(response.status).to eq(200) + expect( + response.parsed_body.dig("topic_list", "topics").map { _1["id"] }, + ).to contain_exactly(topic_1.id) + end - get "/filter", params: { q: "assigned:#{group.name}", format: :json } + it "filters topics by assigned group" do + Assigner.new(topic_2, admin).assign(group) - expect(response.status).to eq(200) - expect(response.parsed_body.dig("topic_list", "topics").map { _1["id"] }).to contain_exactly(topic_2.id) + get "/filter", params: { q: "assigned:#{group.name}", format: :json } + + expect(response.status).to eq(200) + expect( + response.parsed_body.dig("topic_list", "topics").map { _1["id"] }, + ).to contain_exactly(topic_2.id) + end end end end