FEATURE: Add user to topic_tags_changed event (#28714)

* FEATURE: Add user to topic_tags_changed event

Add user to topic_tags_changed event context
Update automation plugin with new arguments in event
Update tests for new arguments

relates to https://github.com/discourse/discourse-chat-integration/pull/214

* DEV: change variable name for better readability

changed `tags` to be payload and used `values_at` to get the values of the keys
This commit is contained in:
Gabriel Grubba 2024-09-06 11:23:30 -03:00 committed by GitHub
parent 5f5680dbaf
commit a98d3d40f2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 14 additions and 7 deletions

View File

@ -212,6 +212,7 @@ module DiscourseTagging
topic, topic,
old_tag_names: old_tag_names, old_tag_names: old_tag_names,
new_tag_names: topic.tags.map(&:name), new_tag_names: topic.tags.map(&:name),
user: guardian.user,
) )
true true

View File

@ -218,7 +218,7 @@ module DiscourseAutomation
end end
end end
def self.handle_topic_tags_changed(topic, old_tag_names, new_tag_names) def self.handle_topic_tags_changed(topic, old_tag_names, new_tag_names, user)
name = DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED name = DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED
DiscourseAutomation::Automation DiscourseAutomation::Automation
@ -248,6 +248,7 @@ module DiscourseAutomation
"topic" => topic, "topic" => topic,
"removed_tags" => removed_tags, "removed_tags" => removed_tags,
"added_tags" => added_tags, "added_tags" => added_tags,
"user" => user,
"placeholders" => { "placeholders" => {
"topic_url" => topic.relative_url, "topic_url" => topic.relative_url,
"topic_title" => topic.title, "topic_title" => topic.title,

View File

@ -182,11 +182,14 @@ after_initialize do
DiscourseAutomation::EventHandlers.handle_pm_created(topic) if topic.private_message? DiscourseAutomation::EventHandlers.handle_pm_created(topic) if topic.private_message?
end end
on(:topic_tags_changed) do |topic, tags| on(:topic_tags_changed) do |topic, payload|
old_tag_names, new_tag_names, user = payload.values_at(:old_tag_names, :new_tag_names, :user)
DiscourseAutomation::EventHandlers.handle_topic_tags_changed( DiscourseAutomation::EventHandlers.handle_topic_tags_changed(
topic, topic,
tags[:old_tag_names], old_tag_names,
tags[:new_tag_names], new_tag_names,
user,
) )
end end

View File

@ -55,6 +55,7 @@ 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)
expect(list[0]["user"]).to eq(user)
end end
it "should fire the trigger if the tag is removed" do it "should fire the trigger if the tag is removed" do
@ -65,6 +66,7 @@ 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)
expect(list[0]["user"]).to eq(user)
end end
it "should not fire if the tag is not present" do it "should not fire if the tag is not present" do

View File

@ -949,16 +949,16 @@ RSpec.describe DiscourseTagging do
it "sends a discourse event when the staff adds a staff-only tag" do it "sends a discourse event when the staff adds a staff-only tag" do
old_tag_names = topic.tags.pluck(:name) old_tag_names = topic.tags.pluck(:name)
admin_guardian = Guardian.new(admin)
tag_changed_event = tag_changed_event =
DiscourseEvent DiscourseEvent
.track_events do .track_events { DiscourseTagging.tag_topic_by_names(topic, admin_guardian, ["alpha"]) }
DiscourseTagging.tag_topic_by_names(topic, Guardian.new(admin), ["alpha"])
end
.last .last
expect(tag_changed_event[:event_name]).to eq(:topic_tags_changed) expect(tag_changed_event[:event_name]).to eq(:topic_tags_changed)
expect(tag_changed_event[:params].first).to eq(topic) expect(tag_changed_event[:params].first).to eq(topic)
expect(tag_changed_event[:params].second[:old_tag_names]).to eq(old_tag_names) expect(tag_changed_event[:params].second[:old_tag_names]).to eq(old_tag_names)
expect(tag_changed_event[:params].second[:new_tag_names]).to eq(["alpha"]) expect(tag_changed_event[:params].second[:new_tag_names]).to eq(["alpha"])
expect(tag_changed_event[:params].second[:user]).to eq(admin_guardian.user)
end end
context "with non-staff users in tag group groups" do context "with non-staff users in tag group groups" do