BURs: make rename command move aliases/implications.

Make the tag rename command also move any aliases or implications from
the old tag to the new tag. Previously only the create alias command
moved aliases and implications.
This commit is contained in:
evazion
2020-11-12 17:12:09 -06:00
parent 9a287cd71f
commit 5844f16ed6
4 changed files with 50 additions and 52 deletions

View File

@@ -9,6 +9,8 @@ class TagMover
def move!
CurrentUser.scoped(user) do
move_aliases!
move_implications!
move_cosplay_tag!
move_tag_category!
move_artist!
@@ -57,6 +59,22 @@ class TagMover
end
end
def move_aliases!
old_tag.consequent_aliases.each do |tag_alias|
tag_alias.update!(consequent_name: new_tag.name)
end
end
def move_implications!
old_tag.antecedent_implications.each do |tag_implication|
tag_implication.update!(antecedent_name: new_tag.name)
end
old_tag.consequent_implications.each do |tag_implication|
tag_implication.update!(consequent_name: new_tag.name)
end
end
def move_cosplay_tag!
old_cosplay_tag = "#{old_tag.name}_(cosplay)"
new_cosplay_tag = "#{new_tag.name}_(cosplay)"

View File

@@ -16,7 +16,6 @@ class TagAlias < TagRelationship
def process!(approver)
update!(approver: approver, status: "processing")
move_aliases_and_implications
TagMover.new(antecedent_name, consequent_name, user: User.system).move!
update!(status: "active")
rescue Exception => e
@@ -34,35 +33,6 @@ class TagAlias < TagRelationship
end
end
def move_aliases_and_implications
aliases = TagAlias.where(["consequent_name = ?", antecedent_name])
aliases.each do |ta|
ta.consequent_name = self.consequent_name
success = ta.save
if !success && ta.errors.full_messages.join("; ") =~ /Cannot alias a tag to itself/
ta.destroy
end
end
implications = TagImplication.where(["antecedent_name = ?", antecedent_name])
implications.each do |ti|
ti.antecedent_name = self.consequent_name
success = ti.save
if !success && ti.errors.full_messages.join("; ") =~ /Cannot implicate a tag to itself/
ti.destroy
end
end
implications = TagImplication.where(["consequent_name = ?", antecedent_name])
implications.each do |ti|
ti.consequent_name = self.consequent_name
success = ti.save
if !success && ti.errors.full_messages.join("; ") =~ /Cannot implicate a tag to itself/
ti.destroy
end
end
end
def create_mod_action
alias_desc = %("tag alias ##{id}":[#{Rails.application.routes.url_helpers.tag_alias_path(self)}]: [[#{antecedent_name}]] -> [[#{consequent_name}]])

View File

@@ -58,6 +58,38 @@ class BulkUpdateRequestTest < ActiveSupport::TestCase
assert_equal("bar", @wiki.reload.title)
end
should "move any active aliases from the old tag to the new tag" do
@bur1 = create(:bulk_update_request, script: "alias aaa -> bbb")
@bur2 = create(:bulk_update_request, script: "alias bbb -> ccc")
@bur1.approve!(@admin)
@bur2.approve!(@admin)
perform_enqueued_jobs
assert_equal(false, TagAlias.where(antecedent_name: "aaa", consequent_name: "bbb", status: "active").exists?)
assert_equal(true, TagAlias.where(antecedent_name: "bbb", consequent_name: "ccc", status: "active").exists?)
assert_equal(true, TagAlias.where(antecedent_name: "aaa", consequent_name: "ccc", status: "active").exists?)
end
should "move any active implications from the old tag to the new tag" do
@bur1 = create(:bulk_update_request, script: "imply aaa -> bbb")
@bur2 = create(:bulk_update_request, script: "alias bbb -> ccc")
@bur1.approve!(@admin)
@bur2.approve!(@admin)
perform_enqueued_jobs
assert_equal(false, TagImplication.where(antecedent_name: "aaa", consequent_name: "bbb", status: "active").exists?)
assert_equal(true, TagImplication.where(antecedent_name: "aaa", consequent_name: "ccc", status: "active").exists?)
@bur3 = create(:bulk_update_request, script: "alias aaa -> ddd")
@bur3.approve!(@admin)
perform_enqueued_jobs
assert_equal(false, TagImplication.where(antecedent_name: "aaa", consequent_name: "ccc", status: "active").exists?)
assert_equal(true, TagImplication.where(antecedent_name: "ddd", consequent_name: "ccc", status: "active").exists?)
end
should "fail if the alias is invalid" do
create(:tag_alias, antecedent_name: "aaa", consequent_name: "bbb")
@bur = build(:bulk_update_request, script: "create alias bbb -> aaa")

View File

@@ -263,28 +263,6 @@ class TagAliasTest < ActiveSupport::TestCase
end
end
should "move existing aliases" do
ta1 = FactoryBot.create(:tag_alias, :antecedent_name => "aaa", :consequent_name => "bbb", :status => "pending")
ta2 = FactoryBot.create(:tag_alias, :antecedent_name => "bbb", :consequent_name => "ccc", :status => "pending")
# XXX this is broken, it depends on the order the jobs are executed in.
ta2.approve!(@admin)
ta1.approve!(@admin)
perform_enqueued_jobs
assert_equal("ccc", ta1.reload.consequent_name)
end
should "move existing implications" do
ti = FactoryBot.create(:tag_implication, :antecedent_name => "aaa", :consequent_name => "bbb")
ta = FactoryBot.create(:tag_alias, :antecedent_name => "bbb", :consequent_name => "ccc")
ta.approve!(@admin)
perform_enqueued_jobs
assert_equal("ccc", ti.reload.consequent_name)
end
should "push the consequent's category to the antecedent if the antecedent is general" do
tag1 = create(:tag, name: "general", category: 0)
tag2 = create(:tag, name: "artist", category: 1)