mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: do not allow a tag to be synonym of its own (#11246)
https://meta.discourse.org/t/adding-synonym-to-the-same-tag-gets-stuck/169801/
This commit is contained in:
parent
a9b20fa827
commit
473f7bfe7b
@ -56,6 +56,7 @@
|
|||||||
{{tag-chooser
|
{{tag-chooser
|
||||||
id="add-synonyms"
|
id="add-synonyms"
|
||||||
tags=newSynonyms
|
tags=newSynonyms
|
||||||
|
blockedTags=tagInfo.name
|
||||||
everyTag=true
|
everyTag=true
|
||||||
excludeSynonyms=true
|
excludeSynonyms=true
|
||||||
excludeHasSynonyms=true
|
excludeHasSynonyms=true
|
||||||
|
@ -481,6 +481,7 @@ module DiscourseTagging
|
|||||||
# tags that failed to be added, with errors on each Tag.
|
# tags that failed to be added, with errors on each Tag.
|
||||||
def self.add_or_create_synonyms_by_name(target_tag, synonym_names)
|
def self.add_or_create_synonyms_by_name(target_tag, synonym_names)
|
||||||
tag_names = DiscourseTagging.tags_for_saving(synonym_names, Guardian.new(Discourse.system_user)) || []
|
tag_names = DiscourseTagging.tags_for_saving(synonym_names, Guardian.new(Discourse.system_user)) || []
|
||||||
|
tag_names -= [target_tag.name]
|
||||||
existing = Tag.where_name(tag_names).all
|
existing = Tag.where_name(tag_names).all
|
||||||
target_tag.synonyms << existing
|
target_tag.synonyms << existing
|
||||||
(tag_names - target_tag.synonyms.map(&:name)).each do |name|
|
(tag_names - target_tag.synonyms.map(&:name)).each do |name|
|
||||||
|
@ -601,6 +601,14 @@ describe DiscourseTagging do
|
|||||||
expect(tag2.reload.target_tag).to eq(tag1)
|
expect(tag2.reload.target_tag).to eq(tag1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "removes target tag name from synonyms if present " do
|
||||||
|
expect {
|
||||||
|
expect(DiscourseTagging.add_or_create_synonyms_by_name(tag1, [tag1.name, tag2.name])).to eq(true)
|
||||||
|
}.to_not change { Tag.count }
|
||||||
|
expect_same_tag_names(tag1.reload.synonyms, [tag2])
|
||||||
|
expect(tag2.reload.target_tag).to eq(tag1)
|
||||||
|
end
|
||||||
|
|
||||||
it "can create new tags" do
|
it "can create new tags" do
|
||||||
expect {
|
expect {
|
||||||
expect(DiscourseTagging.add_or_create_synonyms_by_name(tag1, ['synonym1'])).to eq(true)
|
expect(DiscourseTagging.add_or_create_synonyms_by_name(tag1, ['synonym1'])).to eq(true)
|
||||||
|
Loading…
Reference in New Issue
Block a user