posts: fix bug preventing *_(cosplay) tags from being added.
Bug: if `hatsune_miku` is an empty general tag, then tagging a post with `hatsune_miku_(cosplay)` would fail because `hatsune_miku` wasn't a character tag. This could cause tagging posts to fail when aliasing a character tag back to an old name that was used in the past, but was now an empty general tag. Fix: only treat the *_(cosplay) tag as being in conflict with the base tag when the base tag is nonempty.
This commit is contained in:
@@ -31,7 +31,7 @@ class TagNameValidator < ActiveModel::EachValidator
|
|||||||
tag_name = TagAlias.to_aliased([$1]).first
|
tag_name = TagAlias.to_aliased([$1]).first
|
||||||
tag = Tag.find_by_name(tag_name)
|
tag = Tag.find_by_name(tag_name)
|
||||||
|
|
||||||
if tag.present? && !tag.character?
|
if tag.present? && !tag.empty? && !tag.character?
|
||||||
record.errors[attribute] << "#{tag_name} must be a character tag"
|
record.errors[attribute] << "#{tag_name} must be a character tag"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1296,6 +1296,14 @@ class PostTest < ActiveSupport::TestCase
|
|||||||
refute(@post.has_tag?("cosplay"))
|
refute(@post.has_tag?("cosplay"))
|
||||||
assert(@post.warnings[:base].grep(/Couldn't add tag/).present?)
|
assert(@post.warnings[:base].grep(/Couldn't add tag/).present?)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "allow creating a _(cosplay) tag for an empty general tag" do
|
||||||
|
@tag = create(:tag, name: "hatsune_miku", post_count: 0, category: Tag.categories.general)
|
||||||
|
@post = create(:post, tag_string: "hatsune_miku_(cosplay)")
|
||||||
|
|
||||||
|
assert_equal("cosplay hatsune_miku hatsune_miku_(cosplay)", @post.reload.tag_string)
|
||||||
|
assert_equal(true, @tag.reload.character?)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "that has been updated" do
|
context "that has been updated" do
|
||||||
|
|||||||
Reference in New Issue
Block a user