FEATURE: Change tags sent in topic_tags_changed trigger in automation plugin (#28318)

* FEATURE: Change tags sent in topic_tags_changed trigger in discourse_automation

Before, it was sending the old tags and the current tags in topic.
Now, it sends the removed tags and the added tags in the topic.

* DEV: update `missing_tags` to be `removed_tags`

* DEV: add spacing for better readability
This commit is contained in:
Gabriel Grubba 2024-08-12 14:05:16 -03:00 committed by GitHub
parent 79f871b558
commit 157c8e660a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 46 additions and 4 deletions

View File

@ -206,12 +206,16 @@ module DiscourseAutomation
next if !watching_categories["value"].include?(topic.category_id) next if !watching_categories["value"].include?(topic.category_id)
end end
removed_tags = old_tag_names - new_tag_names
added_tags = new_tag_names - old_tag_names
watching_tags = automation.trigger_field("watching_tags") watching_tags = automation.trigger_field("watching_tags")
if watching_tags["value"] if watching_tags["value"]
should_skip = false should_skip = false
watching_tags["value"].each do |tag| watching_tags["value"].each do |tag|
should_skip = true if !old_tag_names.empty? && !old_tag_names.include?(tag) should_skip = true if !removed_tags.empty? && !removed_tags.include?(tag)
should_skip = true if !new_tag_names.empty? && !new_tag_names.include?(tag) should_skip = true if !added_tags.empty? && !added_tags.include?(tag)
end end
next if should_skip next if should_skip
end end
@ -219,8 +223,8 @@ module DiscourseAutomation
automation.trigger!( automation.trigger!(
"kind" => name, "kind" => name,
"topic" => topic, "topic" => topic,
"removed_tags" => old_tag_names, "removed_tags" => removed_tags,
"added_tags" => new_tag_names, "added_tags" => added_tags,
) )
end end
end end

View File

@ -5,6 +5,8 @@ describe DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED do
fab!(:cool_tag) { Fabricate(:tag) } fab!(:cool_tag) { Fabricate(:tag) }
fab!(:bad_tag) { Fabricate(:tag) } fab!(:bad_tag) { Fabricate(:tag) }
fab!(:another_tag) { Fabricate(:tag) }
fab!(:category) fab!(:category)
fab!(:user) fab!(:user)
@ -132,5 +134,41 @@ describe DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED do
expect(list.length).to eq(1) expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq(DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED) expect(list[0]["kind"]).to eq(DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED)
end end
it "should send the correct removed tags in context" do
topic_0 = Fabricate(:topic, user: user, tags: [cool_tag], category: category)
list =
capture_contexts do
DiscourseTagging.tag_topic_by_names(
topic_0,
Guardian.new(user),
[bad_tag.name, another_tag.name],
)
end
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq(DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED)
expect(list[0]["added_tags"]).to eq([bad_tag.name, another_tag.name])
expect(list[0]["removed_tags"]).to eq([cool_tag.name])
end
it "should send the correct added tags in context" do
topic_0 = Fabricate(:topic, user: user, tags: [cool_tag], category: category)
list =
capture_contexts do
DiscourseTagging.tag_topic_by_names(
topic_0,
Guardian.new(user),
[cool_tag.name, another_tag.name],
)
end
expect(list.length).to eq(1)
expect(list[0]["kind"]).to eq(DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED)
expect(list[0]["added_tags"]).to eq([another_tag.name])
expect(list[0]["removed_tags"]).to eq([])
end
end end
end end