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",
|
id: "discourse-poll",
|
||||||
});
|
});
|
||||||
api.cleanupStream(cleanUpPolls);
|
api.cleanupStream(cleanUpPolls);
|
||||||
|
|
||||||
|
const siteSettings = api.container.lookup("site-settings:main");
|
||||||
|
if (siteSettings.poll_enabled) {
|
||||||
|
api.addSearchSuggestion("in:polls");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -231,4 +231,12 @@ after_initialize do
|
|||||||
SiteSetting.poll_enabled && scope.user&.id.present? && preloaded_polls.present? &&
|
SiteSetting.poll_enabled && scope.user&.id.present? && preloaded_polls.present? &&
|
||||||
preloaded_polls.any? { |p| p.has_voted?(scope.user) }
|
preloaded_polls.any? { |p| p.has_voted?(scope.user) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
register_search_advanced_filter(/in:polls/) do |posts, match|
|
||||||
|
if SiteSetting.poll_enabled
|
||||||
|
posts.joins(:polls)
|
||||||
|
else
|
||||||
|
posts
|
||||||
|
end
|
||||||
|
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