FEATURE: add trigger_with_pms option to topic tags changed automation trigger (#29122)

This commit is contained in:
Gabriel Grubba 2024-10-09 09:51:40 -03:00 committed by GitHub
parent 19fb8b8d57
commit 53f9c81790
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 42 additions and 0 deletions

View File

@ -223,6 +223,9 @@ en:
watching_tags:
label: Watching tags
description: Will trigger only if the topic has any of these tags
trigger_with_pms:
label: Trigger with PMs
description: Will trigger even if the tags were changed in a PM
after_post_cook:
fields:
valid_trust_levels:

View File

@ -224,6 +224,10 @@ module DiscourseAutomation
DiscourseAutomation::Automation
.where(trigger: name, enabled: true)
.find_each do |automation|
if topic.private_message?
next if !automation.trigger_field("trigger_with_pms")["value"]
end
watching_categories = automation.trigger_field("watching_categories")
if watching_categories["value"]
next if !watching_categories["value"].include?(topic.category_id)

View File

@ -3,6 +3,7 @@
DiscourseAutomation::Triggerable.add(DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED) do
field :watching_categories, component: :categories
field :watching_tags, component: :tags
field :trigger_with_pms, component: :boolean
placeholder :topic_url
placeholder :topic_title

View File

@ -19,6 +19,7 @@ describe DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED do
SiteSetting.tagging_enabled = true
SiteSetting.create_tag_allowed_groups = Group::AUTO_GROUPS[:everyone]
SiteSetting.tag_topic_allowed_groups = Group::AUTO_GROUPS[:everyone]
SiteSetting.pm_tags_allowed_for_groups = Group::AUTO_GROUPS[:everyone]
end
context "when watching a cool tag" do
@ -185,5 +186,38 @@ describe DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED do
expect(list[0]["added_tags"]).to eq([another_tag.name])
expect(list[0]["removed_tags"]).to eq([])
end
it "should not fire the trigger on PMs by default" do
pm = Fabricate(:private_message_topic)
list =
capture_contexts do
DiscourseTagging.tag_topic_by_names(
pm,
Guardian.new(user),
[cool_tag.name, another_tag.name],
)
end
expect(list.length).to eq(0)
end
it "should fire the trigger on PMs if trigger_with_pms is set" do
automation.upsert_field!(
"trigger_with_pms",
"boolean",
{ "value" => true },
target: "trigger",
)
pm = Fabricate(:private_message_topic)
list =
capture_contexts do
DiscourseTagging.tag_topic_by_names(
pm,
Guardian.new(user),
[cool_tag.name, another_tag.name],
)
end
expect(list.length).to eq(1)
end
end
end