aliases/implications: change automatic retirement rules.

Change the rules for automatically retiring aliases and implications:

* Retire aliases to tags that are empty, or that are for a general or
  artist tag that hasn't received any new posts in the last two years.
* Retire implications from tags that are empty.
* Don't retire aliases or implications for character, copyright, or
  meta tags any more, unless the tags are empty.
This commit is contained in:
evazion
2021-11-05 05:46:50 -05:00
parent 65ab7f1eb5
commit a5f589f9e0
6 changed files with 136 additions and 92 deletions

View File

@@ -0,0 +1,105 @@
require 'test_helper'
class RetireTagRelationshipsJobTest < ActiveJob::TestCase
context "RetireTagRelationshipsJob" do
should "create a new forum topic if one doesn't already exist" do
create(:tag_alias, created_at: 3.years.ago, antecedent_name: "0", consequent_name: "1")
RetireTagRelationshipsJob.perform_now
assert_equal(true, ForumTopic.exists?(title: TagRelationshipRetirementService::FORUM_TOPIC_TITLE))
assert_equal(true, ForumPost.exists?(body: TagRelationshipRetirementService::FORUM_TOPIC_BODY))
end
should "retire inactive gentag and artist aliases" do
ta0 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "0", consequent_name: "artist")
ta1 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "1", consequent_name: "general")
ta2 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "2", consequent_name: "character")
ta3 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "3", consequent_name: "copyright")
ta4 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "4", consequent_name: "meta")
as(User.system) do
create(:post, created_at: 3.years.ago, tag_string: "art:artist")
create(:post, created_at: 3.years.ago, tag_string: "gen:general")
create(:post, created_at: 3.years.ago, tag_string: "char:character")
create(:post, created_at: 3.years.ago, tag_string: "copy:copyright")
create(:post, created_at: 3.years.ago, tag_string: "meta:meta")
end
RetireTagRelationshipsJob.perform_now
assert_equal(true, ta0.reload.is_retired?)
assert_equal(true, ta1.reload.is_retired?)
assert_equal(false, ta2.reload.is_retired?)
assert_equal(false, ta3.reload.is_retired?)
assert_equal(false, ta4.reload.is_retired?)
end
should "not retire old aliases with recent posts" do
ta0 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "0", consequent_name: "artist")
ta1 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "1", consequent_name: "general")
ta2 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "2", consequent_name: "character")
ta3 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "3", consequent_name: "copyright")
ta4 = create(:tag_alias, created_at: 3.years.ago, antecedent_name: "4", consequent_name: "meta")
as(User.system) do
create(:post, created_at: 1.week.ago, tag_string: "art:artist")
create(:post, created_at: 1.week.ago, tag_string: "gen:general")
create(:post, created_at: 1.week.ago, tag_string: "char:character")
create(:post, created_at: 1.week.ago, tag_string: "copy:copyright")
create(:post, created_at: 1.week.ago, tag_string: "meta:meta")
end
RetireTagRelationshipsJob.perform_now
assert_equal(false, ta0.reload.is_retired?)
assert_equal(false, ta1.reload.is_retired?)
assert_equal(false, ta2.reload.is_retired?)
assert_equal(false, ta3.reload.is_retired?)
assert_equal(false, ta4.reload.is_retired?)
end
should "retire empty aliases" do
create(:tag, name: "artist", post_count: 0, category: Tag.categories.artist)
create(:tag, name: "general", post_count: 0, category: Tag.categories.general)
create(:tag, name: "character", post_count: 0, category: Tag.categories.character)
create(:tag, name: "copyright", post_count: 0, category: Tag.categories.copyright)
create(:tag, name: "meta", post_count: 0, category: Tag.categories.meta)
ta0 = create(:tag_alias, antecedent_name: "0", consequent_name: "artist")
ta1 = create(:tag_alias, antecedent_name: "1", consequent_name: "general")
ta2 = create(:tag_alias, antecedent_name: "2", consequent_name: "character")
ta3 = create(:tag_alias, antecedent_name: "3", consequent_name: "copyright")
ta4 = create(:tag_alias, antecedent_name: "4", consequent_name: "meta")
RetireTagRelationshipsJob.perform_now
assert_equal(true, ta0.reload.is_retired?)
assert_equal(true, ta1.reload.is_retired?)
assert_equal(true, ta2.reload.is_retired?)
assert_equal(true, ta3.reload.is_retired?)
assert_equal(true, ta4.reload.is_retired?)
end
should "retire empty implications" do
create(:tag, name: "artist", post_count: 0, category: Tag.categories.artist)
create(:tag, name: "general", post_count: 0, category: Tag.categories.general)
create(:tag, name: "character", post_count: 0, category: Tag.categories.character)
create(:tag, name: "copyright", post_count: 0, category: Tag.categories.copyright)
create(:tag, name: "meta", post_count: 0, category: Tag.categories.meta)
ta0 = create(:tag_implication, antecedent_name: "artist", consequent_name: "1")
ta1 = create(:tag_implication, antecedent_name: "general", consequent_name: "1")
ta2 = create(:tag_implication, antecedent_name: "character", consequent_name: "1")
ta3 = create(:tag_implication, antecedent_name: "copyright", consequent_name: "1")
ta4 = create(:tag_implication, antecedent_name: "meta", consequent_name: "1")
RetireTagRelationshipsJob.perform_now
assert_equal(true, ta0.reload.is_retired?)
assert_equal(true, ta1.reload.is_retired?)
assert_equal(true, ta2.reload.is_retired?)
assert_equal(true, ta3.reload.is_retired?)
assert_equal(true, ta4.reload.is_retired?)
end
end
end

View File

@@ -1,62 +0,0 @@
require 'test_helper'
class TagRelationshipRetirementServiceTest < ActiveSupport::TestCase
context ".forum_topic" do
subject { TagRelationshipRetirementService }
should "create a new topic if one doesn't already exist" do
assert_difference(-> { ForumTopic.count }) do
subject.forum_topic
end
end
should "create a new post if one doesn't already exist" do
assert_difference(-> { ForumPost.count }) do
subject.forum_topic
end
end
end
context ".each_candidate" do
subject { TagRelationshipRetirementService }
setup do
subject.stubs(:is_unused?).returns(true)
@new_alias = create(:tag_alias, antecedent_name: "aaa", consequent_name: "bbb")
@old_alias = create(:tag_alias, antecedent_name: "ccc", consequent_name: "ddd", created_at: 3.years.ago)
end
should "find old tag relationships" do
subject.each_candidate(TagAlias) do |rel|
assert_equal(@old_alias, rel)
end
end
should "not find new tag relationships" do
subject.each_candidate(TagAlias) do |rel|
assert_not_equal(@new_alias, rel)
end
end
end
context ".is_unused?" do
subject { TagRelationshipRetirementService }
setup do
@new_alias = create(:tag_alias, antecedent_name: "aaa", consequent_name: "bbb")
@new_post = create(:post, tag_string: "bbb")
@old_alias = create(:tag_alias, antecedent_name: "ccc", consequent_name: "ddd", created_at: 3.years.ago)
@old_post = create(:post, tag_string: "ddd", created_at: 3.years.ago)
end
should "return true if no recent post exists" do
assert(subject.is_unused?("ddd"))
end
should "return false if a recent post exists" do
refute(subject.is_unused?("bbb"))
end
end
end