SPEC: add spec for when the user can't assign

This commit is contained in:
zogstrip 2025-03-20 10:48:51 +01:00
parent 06985c8da9
commit d85df69ff4
No known key found for this signature in database
2 changed files with 38 additions and 19 deletions

View File

@ -888,11 +888,11 @@ after_initialize do
end end
add_filter_custom_filter("assigned") do |scope, filter_values, guardian| 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 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 if user_id = User.find_by_username(user_or_group_name)&.id
scope.where(<<~SQL, user_id) scope.where(<<~SQL, user_id)
@ -906,19 +906,19 @@ after_initialize do
end end
register_search_advanced_filter(/in:assigned/) do |posts| 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)") posts.where("topics.id IN (SELECT a.topic_id FROM assignments a WHERE a.active)")
end end
register_search_advanced_filter(/in:unassigned/) do |posts| 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)") posts.where("topics.id NOT IN (SELECT a.topic_id FROM assignments a WHERE a.active)")
end end
register_search_advanced_filter(/assigned:(.+)$/) do |posts, match| 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 if user_id = User.find_by_username(match)&.id
posts.where(<<~SQL, user_id) posts.where(<<~SQL, user_id)

View File

@ -369,9 +369,23 @@ describe ListController do
fab!(:post_2) { Fabricate(:post, topic: topic_2) } fab!(:post_2) { Fabricate(:post, topic: topic_2) }
fab!(:post_3) { Fabricate(:post, topic: topic_3) } fab!(:post_3) { Fabricate(:post, topic: topic_3) }
before do describe "when user cannot assign" do
sign_in(admin) 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
end
describe "when user can assign" do
before { sign_in(admin) }
it "filters topics by assigned user" do it "filters topics by assigned user" do
add_to_assign_allowed_group(user) add_to_assign_allowed_group(user)
@ -381,7 +395,9 @@ describe ListController do
get "/filter", params: { q: "assigned:#{user.username_lower}", format: :json } get "/filter", params: { q: "assigned:#{user.username_lower}", format: :json }
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(response.parsed_body.dig("topic_list", "topics").map { _1["id"] }).to contain_exactly(topic_1.id) expect(
response.parsed_body.dig("topic_list", "topics").map { _1["id"] },
).to contain_exactly(topic_1.id)
end end
it "filters topics by assigned group" do it "filters topics by assigned group" do
@ -390,7 +406,10 @@ describe ListController do
get "/filter", params: { q: "assigned:#{group.name}", format: :json } get "/filter", params: { q: "assigned:#{group.name}", format: :json }
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(response.parsed_body.dig("topic_list", "topics").map { _1["id"] }).to contain_exactly(topic_2.id) expect(
response.parsed_body.dig("topic_list", "topics").map { _1["id"] },
).to contain_exactly(topic_2.id)
end
end end
end end
end end