mirror of
https://github.com/discourse/discourse.git
synced 2025-03-31 13:15:57 +08:00
FIX: delete synonyms in topics if target tag is already added.
Currently, while adding a synonym tag if both target and synonym tags are already available in a topic then it's returning an error.
This commit is contained in:
parent
8515d8fae5
commit
ef37460c93
@ -423,7 +423,9 @@ module DiscourseTagging
|
|||||||
target_tag.synonyms << Tag.create(name: name)
|
target_tag.synonyms << Tag.create(name: name)
|
||||||
end
|
end
|
||||||
successful = existing.select { |t| !t.errors.present? }
|
successful = existing.select { |t| !t.errors.present? }
|
||||||
TopicTag.where(tag_id: successful.map(&:id)).update_all(tag_id: target_tag.id)
|
synonyms_ids = successful.map(&:id)
|
||||||
|
TopicTag.where(topic_id: target_tag.topics.with_deleted, tag_id: synonyms_ids).delete_all
|
||||||
|
TopicTag.where(tag_id: synonyms_ids).update_all(tag_id: target_tag.id)
|
||||||
Scheduler::Defer.later "Update tag topic counts" do
|
Scheduler::Defer.later "Update tag topic counts" do
|
||||||
Tag.ensure_consistency!
|
Tag.ensure_consistency!
|
||||||
end
|
end
|
||||||
|
@ -517,6 +517,16 @@ describe DiscourseTagging do
|
|||||||
expect(tag2.reload.target_tag).to eq(tag1)
|
expect(tag2.reload.target_tag).to eq(tag1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "can add an existing tag when both tags added to same topic" do
|
||||||
|
topic = Fabricate(:topic, tags: [tag1, tag2, tag3])
|
||||||
|
expect {
|
||||||
|
expect(DiscourseTagging.add_or_create_synonyms_by_name(tag1, [tag2.name])).to eq(true)
|
||||||
|
}.to_not change { Tag.count }
|
||||||
|
expect_same_tag_names(tag1.reload.synonyms, [tag2])
|
||||||
|
expect_same_tag_names(topic.reload.tags, [tag1, tag3])
|
||||||
|
expect(tag2.reload.target_tag).to eq(tag1)
|
||||||
|
end
|
||||||
|
|
||||||
it "can add existing tag with wrong case" do
|
it "can add existing tag with wrong case" do
|
||||||
expect {
|
expect {
|
||||||
expect(DiscourseTagging.add_or_create_synonyms_by_name(tag1, [tag2.name.upcase])).to eq(true)
|
expect(DiscourseTagging.add_or_create_synonyms_by_name(tag1, [tag2.name.upcase])).to eq(true)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user