Fix #4491: Have tag rename option for bulk update requests.
* Add a `rename A -> B` command for bulk update requests. * Change mass updates to only retag the posts, not to move saved searches or blacklists. A tag rename does the same thing an alias does, except it doesn't create a permanent alias. More precisely, a tag rename: * Moves the wiki. * Moves the artist entry. * Moves saved searches. * Moves blacklists. * Merges the wikis, if both tags have wiki pages. * Merges the artist entries, if both tags have artist pages. * Fixes links in wiki pages to point to the new tag. * Retags the posts.
This commit is contained in:
@@ -8,42 +8,13 @@ class TagBatchChangeJobTest < ActiveJob::TestCase
|
||||
end
|
||||
|
||||
should "execute" do
|
||||
TagBatchChangeJob.perform_now("aaa", "bbb", @user, "127.0.0.1")
|
||||
TagBatchChangeJob.perform_now("aaa", "bbb")
|
||||
assert_equal("bbb", @post.reload.tag_string)
|
||||
end
|
||||
|
||||
should "move saved searches" do
|
||||
ss = create(:saved_search, user: @user, query: "123 ... 456")
|
||||
TagBatchChangeJob.perform_now("...", "bbb", @user, "127.0.0.1")
|
||||
assert_equal("123 456 bbb", ss.reload.normalized_query)
|
||||
end
|
||||
|
||||
should "move blacklists" do
|
||||
@user.update(blacklisted_tags: "123 456\n789\n")
|
||||
TagBatchChangeJob.perform_now("456", "xxx", @user, "127.0.0.1")
|
||||
|
||||
assert_equal("123 xxx\n789", @user.reload.blacklisted_tags)
|
||||
end
|
||||
|
||||
should "move only saved searches that match the mass update exactly" do
|
||||
ss = create(:saved_search, user: @user, query: "123 ... 456")
|
||||
|
||||
TagBatchChangeJob.perform_now("1", "bbb", @user, "127.0.0.1")
|
||||
assert_equal("... 123 456", ss.reload.normalized_query, "expected '123' to remain unchanged")
|
||||
|
||||
TagBatchChangeJob.perform_now("123 456", "789", @user, "127.0.0.1")
|
||||
assert_equal("... 789", ss.reload.normalized_query, "expected '123 456' to be changed to '789'")
|
||||
end
|
||||
|
||||
should "log a modaction" do
|
||||
TagBatchChangeJob.perform_now("1", "2", @user, "127.0.0.1")
|
||||
TagBatchChangeJob.perform_now("1", "2")
|
||||
assert_equal("mass_update", ModAction.last.category)
|
||||
end
|
||||
|
||||
should "raise an error if there is no predicate" do
|
||||
assert_raises(TagBatchChangeJob::Error) do
|
||||
TagBatchChangeJob.perform_now("", "bbb", @user, "127.0.0.1")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -182,6 +182,35 @@ class BulkUpdateRequestTest < ActiveSupport::TestCase
|
||||
assert_equal("Imageboard", @post.reload.source)
|
||||
end
|
||||
end
|
||||
|
||||
context "the rename command" do
|
||||
setup do
|
||||
@artist = create(:artist, name: "foo")
|
||||
@wiki = create(:wiki_page, title: "foo", body: "[[foo]]")
|
||||
@post = create(:post, tag_string: "foo blah")
|
||||
@bur = create(:bulk_update_request, script: "rename foo -> bar")
|
||||
@bur.approve!(@admin)
|
||||
perform_enqueued_jobs
|
||||
end
|
||||
|
||||
should "rename the tags" do
|
||||
assert_equal("approved", @bur.status)
|
||||
assert_equal("bar blah", @post.reload.tag_string)
|
||||
end
|
||||
|
||||
should "move the tag's artist entry and wiki page" do
|
||||
assert_equal("bar", @artist.reload.name)
|
||||
assert_equal("bar", @wiki.reload.title)
|
||||
assert_equal("[[bar]]", @wiki.body)
|
||||
end
|
||||
|
||||
should "fail if the old tag doesn't exist" do
|
||||
@bur = build(:bulk_update_request, script: "rename aaa -> bbb")
|
||||
|
||||
assert_equal(false, @bur.valid?)
|
||||
assert_equal(["Can't rename aaa -> bbb (the 'aaa' tag doesn't exist)"], @bur.errors.full_messages)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when validating a script" do
|
||||
|
||||
Reference in New Issue
Block a user