Fix #4940: DanbooruBot retiring banned_artist implications.

This commit is contained in:
evazion
2022-01-11 10:28:33 -06:00
parent 422dbbc72e
commit 40d6351249
3 changed files with 28 additions and 2 deletions

View File

@@ -40,13 +40,20 @@ module TagRelationshipRetirementService
end
def inactive_relationships
(inactive_aliases + TagAlias.active.empty + TagImplication.active.empty).uniq
(inactive_aliases + inactive_implications).uniq
end
def inactive_implications
TagImplication.active.empty.where.not(consequent_name: "banned_artist")
end
def inactive_aliases
aliases = TagAlias.general.or(TagAlias.artist).active.where("tag_aliases.created_at < ?", THRESHOLD.ago)
aliases.select do |tag_alias|
aliases = aliases.select do |tag_alias|
!tag_alias.consequent_tag.posts.exists?(["created_at > ?", THRESHOLD.ago])
end
aliases += TagAlias.active.empty
aliases
end
end

View File

@@ -356,6 +356,14 @@ class Tag < ApplicationRecord
cosplay_tags.grep(/\A(.+)_\(cosplay\)\Z/) { "#{TagAlias.to_aliased([$1]).first}_(cosplay)" } + other_tags
end
def implied_tags
TagImplication.tags_implied_by([name])
end
def implies?(tag_name)
implied_tags.exists?(name: tag_name)
end
def posts
Post.system_tag_match(name)
end

View File

@@ -101,5 +101,16 @@ class RetireTagRelationshipsJobTest < ActiveJob::TestCase
assert_equal(true, ta3.reload.is_retired?)
assert_equal(true, ta4.reload.is_retired?)
end
should "not retire empty banned_artist implications" do
bkub = create(:tag, name: "bkub", post_count: 0, category: Tag.categories.artist)
banned_artist = create(:tag, name: "banned_artist", post_count: 0, category: Tag.categories.artist)
ti = create(:tag_implication, antecedent_name: "bkub", consequent_name: "banned_artist")
RetireTagRelationshipsJob.perform_now
assert_equal(false, ti.reload.is_retired?)
assert_equal(true, bkub.implies?("banned_artist"))
end
end
end