Fix #3412: Mass updates incorrectly move saved searches.
This commit is contained in:
@@ -18,11 +18,12 @@ module Moderator
|
|||||||
post.update_attributes(:tag_string => tags)
|
post.update_attributes(:tag_string => tags)
|
||||||
end
|
end
|
||||||
|
|
||||||
tags = Tag.scan_tags(antecedent, :strip_metatags => true)
|
|
||||||
conds = tags.map {|x| "query like ?"}.join(" AND ")
|
|
||||||
conds = [conds, *tags.map {|x| "%#{x.to_escaped_for_sql_like}%"}]
|
|
||||||
if SavedSearch.enabled?
|
if SavedSearch.enabled?
|
||||||
SavedSearch.where(*conds).find_each do |ss|
|
tags = Tag.scan_tags(antecedent, :strip_metatags => true)
|
||||||
|
|
||||||
|
# https://www.postgresql.org/docs/current/static/functions-array.html
|
||||||
|
saved_searches = SavedSearch.where("string_to_array(query, ' ') @> ARRAY[?]", tags)
|
||||||
|
saved_searches.find_each do |ss|
|
||||||
ss.query = (ss.query.split - tags + [consequent]).uniq.join(" ")
|
ss.query = (ss.query.split - tags + [consequent]).uniq.join(" ")
|
||||||
ss.save
|
ss.save
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -34,8 +34,21 @@ module Moderator
|
|||||||
ss = FactoryGirl.create(:saved_search, :user => @user, :query => "123 ... 456")
|
ss = FactoryGirl.create(:saved_search, :user => @user, :query => "123 ... 456")
|
||||||
tag_batch_change = TagBatchChange.new("...", "bbb", @user.id, "127.0.0.1")
|
tag_batch_change = TagBatchChange.new("...", "bbb", @user.id, "127.0.0.1")
|
||||||
tag_batch_change.perform
|
tag_batch_change.perform
|
||||||
ss.reload
|
|
||||||
assert_equal(%w(123 456 bbb), ss.query.scan(/\S+/).sort)
|
assert_equal("123 456 bbb", ss.reload.normalized_query)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "move only saved searches that match the mass update exactly" do
|
||||||
|
ss = FactoryGirl.create(:saved_search, :user => @user, :query => "123 ... 456")
|
||||||
|
tag_batch_change = TagBatchChange.new("1", "bbb", @user.id, "127.0.0.1")
|
||||||
|
tag_batch_change.perform
|
||||||
|
|
||||||
|
assert_equal("... 123 456", ss.reload.normalized_query, "expected '123' to remain unchanged")
|
||||||
|
|
||||||
|
tag_batch_change = TagBatchChange.new("123 456", "789", @user.id, "127.0.0.1")
|
||||||
|
tag_batch_change.perform
|
||||||
|
|
||||||
|
assert_equal("... 789", ss.reload.normalized_query, "expected '123 456' to be changed to '789'")
|
||||||
end
|
end
|
||||||
|
|
||||||
should "raise an error if there is no predicate" do
|
should "raise an error if there is no predicate" do
|
||||||
|
|||||||
Reference in New Issue
Block a user