From 5bec0aa147952d7bd10fe9f2bd1b51c60cbd52a9 Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 15 Jan 2022 20:30:51 -0600 Subject: [PATCH] Fix #4629: Tag renames/aliases should also modify pool descriptions. --- app/logical/tag_mover.rb | 3 ++- app/models/pool.rb | 6 ++++++ app/models/wiki_page.rb | 8 ++------ test/unit/tag_alias_test.rb | 9 +++++++++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/logical/tag_mover.rb b/app/logical/tag_mover.rb index 45816d18b..8dc45d1f0 100644 --- a/app/logical/tag_mover.rb +++ b/app/logical/tag_mover.rb @@ -139,9 +139,10 @@ class TagMover User.rewrite_blacklists!(old_tag.name, new_tag.name) end - # Update any wiki pages linking to the old tag, to link to the new tag. + # Update any wiki pages or pools linking to the old tag, to link to the new tag. def rewrite_wiki_links! WikiPage.rewrite_wiki_links!(old_tag.name, new_tag.name) + Pool.rewrite_wiki_links!(old_tag.name, new_tag.name) end # Merge two artist entries, copying everything from the old entry to the new diff --git a/app/models/pool.rb b/app/models/pool.rb index cee883fe9..998b9dc5f 100644 --- a/app/models/pool.rb +++ b/app/models/pool.rb @@ -254,4 +254,10 @@ class Pool < ApplicationRecord errors.add(:name, "cannot contain only digits") end end + + def self.rewrite_wiki_links!(old_name, new_name) + Pool.linked_to(old_name).each do |pool| + pool.lock!.update!(description: DText.rewrite_wiki_links(pool.description, old_name, new_name)) + end + end end diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index bd77d3416..444aba459 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -212,12 +212,8 @@ class WikiPage < ApplicationRecord end def self.rewrite_wiki_links!(old_name, new_name) - broken_wikis = WikiPage.linked_to(old_name) - - broken_wikis.each do |wiki| - wiki.lock! - wiki.body = DText.rewrite_wiki_links(wiki.body, old_name, new_name) - wiki.save! + WikiPage.linked_to(old_name).each do |wiki| + wiki.lock!.update!(body: DText.rewrite_wiki_links(wiki.body, old_name, new_name)) end end diff --git a/test/unit/tag_alias_test.rb b/test/unit/tag_alias_test.rb index c93b7e6c5..fd76388ea 100644 --- a/test/unit/tag_alias_test.rb +++ b/test/unit/tag_alias_test.rb @@ -217,6 +217,15 @@ class TagAliasTest < ActiveSupport::TestCase assert_equal("foo [[bbb]] bar", @wiki.reload.body) end + + should "rewrite links in pool descriptions to use the new tag" do + @pool = create(:pool, description: "foo [[aaa]] bar") + + TagAlias.approve!(antecedent_name: "aaa", consequent_name: "bbb", approver: @admin) + perform_enqueued_jobs + + assert_equal("foo [[bbb]] bar", @pool.reload.description) + end end context "when the tags have artist entries" do