mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 10:20:58 -06:00
FEATURE: Add in:polls
filter to search (#19885)
Allows users to filter search results to posts with polls (if the plugin is enabled).
This commit is contained in:
parent
60ebbfd7e7
commit
3e197deec9
@ -134,6 +134,11 @@ function initializePolls(api) {
|
||||
id: "discourse-poll",
|
||||
});
|
||||
api.cleanupStream(cleanUpPolls);
|
||||
|
||||
const siteSettings = api.container.lookup("site-settings:main");
|
||||
if (siteSettings.poll_enabled) {
|
||||
api.addSearchSuggestion("in:polls");
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
|
@ -231,4 +231,12 @@ after_initialize do
|
||||
SiteSetting.poll_enabled && scope.user&.id.present? && preloaded_polls.present? &&
|
||||
preloaded_polls.any? { |p| p.has_voted?(scope.user) }
|
||||
end
|
||||
|
||||
register_search_advanced_filter(/in:polls/) do |posts, match|
|
||||
if SiteSetting.poll_enabled
|
||||
posts.joins(:polls)
|
||||
else
|
||||
posts
|
||||
end
|
||||
end
|
||||
end
|
||||
|
42
plugins/poll/spec/lib/search_spec.rb
Normal file
42
plugins/poll/spec/lib/search_spec.rb
Normal file
@ -0,0 +1,42 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
RSpec.describe Search do
|
||||
fab!(:topic) { Fabricate(:topic) }
|
||||
fab!(:topic2) { Fabricate(:topic) }
|
||||
fab!(:regular_post) { Fabricate(:post, topic: topic, raw: <<~RAW) }
|
||||
Somewhere over the rainbow but no poll.
|
||||
RAW
|
||||
|
||||
fab!(:post_with_poll) { Fabricate(:post, topic: topic2, raw: <<~RAW) }
|
||||
Somewhere over the rainbow with a poll.
|
||||
[poll]
|
||||
* Like
|
||||
* Dislike
|
||||
[/poll]
|
||||
RAW
|
||||
|
||||
before do
|
||||
SearchIndexer.enable
|
||||
Jobs.run_immediately!
|
||||
|
||||
SearchIndexer.index(topic2, force: true)
|
||||
SearchIndexer.index(topic, force: true)
|
||||
end
|
||||
|
||||
after { SearchIndexer.disable }
|
||||
|
||||
context "when using in:polls" do
|
||||
it "displays only posts containing polls" do
|
||||
results = Search.execute("rainbow in:polls", guardian: Guardian.new)
|
||||
expect(results.posts).to contain_exactly(post_with_poll)
|
||||
end
|
||||
end
|
||||
|
||||
context "when polls are disabled" do
|
||||
it "ignores in:polls filter" do
|
||||
SiteSetting.poll_enabled = false
|
||||
results = Search.execute("rainbow in:polls", guardian: Guardian.new)
|
||||
expect(results.posts).to contain_exactly(regular_post, post_with_poll)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user