BURs: fix mass update A -> B not being allowed.
Fix mass updates of the form `mass update A -> B` not being allowed. This was originally because after `rename` was introduced, we wanted to prevent people from using mass updates to move tags. Now, `mass update A -> B` adds B to all posts tagged A instead of moving A to B. So `mass update A -> B` should no longer be disallowed. This also makes it so that it's an error to create a mass update with a syntax error in the search. Before searches couldn't have syntax errors, but now with the new query parser it's possible.
This commit is contained in:
@@ -116,11 +116,10 @@ class BulkUpdateRequestProcessor
|
|||||||
end
|
end
|
||||||
|
|
||||||
when :mass_update
|
when :mass_update
|
||||||
lhs = PostQuery.new(args[0])
|
query = PostQuery.new(args[0])
|
||||||
rhs = PostQuery.new(args[1])
|
|
||||||
|
|
||||||
if lhs.is_single_tag? && rhs.is_single_tag?
|
if query.is_null_search?
|
||||||
errors.add(:base, "Can't mass update #{args[0]} -> #{args[1]} (use an alias or a rename instead for tag moves)")
|
errors.add(:base, "Can't mass update #{args[0]} -> #{args[1]} (the search `#{args[0]}` has a syntax error)")
|
||||||
end
|
end
|
||||||
|
|
||||||
when :nuke
|
when :nuke
|
||||||
|
|||||||
@@ -16,6 +16,16 @@ class PostQuery
|
|||||||
Tag.where(name: tag_names)
|
Tag.where(name: tag_names)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# True if this search would return all posts (normally because the search is the empty string).
|
||||||
|
def is_empty_search?
|
||||||
|
ast.all?
|
||||||
|
end
|
||||||
|
|
||||||
|
# True if this search would return nothing (normally because there was a syntax error).
|
||||||
|
def is_null_search?
|
||||||
|
ast.none?
|
||||||
|
end
|
||||||
|
|
||||||
def is_single_tag?
|
def is_single_tag?
|
||||||
ast.tag?
|
ast.tag?
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -339,11 +339,11 @@ class BulkUpdateRequestTest < ActiveSupport::TestCase
|
|||||||
assert_equal("approved", @bur.reload.status)
|
assert_equal("approved", @bur.reload.status)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not allow mass update for simple A -> B moves" do
|
should "not allow invalid searches in mass updates" do
|
||||||
@bur = build(:bulk_update_request, script: "mass update bunny -> rabbit")
|
@bur = build(:bulk_update_request, script: "mass update (foo -> bar")
|
||||||
|
|
||||||
assert_equal(false, @bur.valid?)
|
assert_equal(false, @bur.valid?)
|
||||||
assert_equal(["Can't mass update bunny -> rabbit (use an alias or a rename instead for tag moves)"], @bur.errors.full_messages)
|
assert_equal(["Can't mass update (foo -> bar (the search `(foo` has a syntax error)"], @bur.errors.full_messages)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user