From a98d3d40f22bdac30e91b4a90d9050b923047a27 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:23:30 -0300 Subject: [PATCH] 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 --- lib/discourse_tagging.rb | 1 + .../lib/discourse_automation/event_handlers.rb | 3 ++- plugins/automation/plugin.rb | 9 ++++++--- .../automation/spec/triggers/topic_tags_changed_spec.rb | 2 ++ spec/lib/discourse_tagging_spec.rb | 6 +++--- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/discourse_tagging.rb b/lib/discourse_tagging.rb index 58d1ee605c5..35277fb3054 100644 --- a/lib/discourse_tagging.rb +++ b/lib/discourse_tagging.rb @@ -212,6 +212,7 @@ module DiscourseTagging topic, old_tag_names: old_tag_names, new_tag_names: topic.tags.map(&:name), + user: guardian.user, ) true diff --git a/plugins/automation/lib/discourse_automation/event_handlers.rb b/plugins/automation/lib/discourse_automation/event_handlers.rb index e1bb3b3b27c..cd0b8d75d43 100644 --- a/plugins/automation/lib/discourse_automation/event_handlers.rb +++ b/plugins/automation/lib/discourse_automation/event_handlers.rb @@ -218,7 +218,7 @@ module DiscourseAutomation 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 DiscourseAutomation::Automation @@ -248,6 +248,7 @@ module DiscourseAutomation "topic" => topic, "removed_tags" => removed_tags, "added_tags" => added_tags, + "user" => user, "placeholders" => { "topic_url" => topic.relative_url, "topic_title" => topic.title, diff --git a/plugins/automation/plugin.rb b/plugins/automation/plugin.rb index 2ec7249fbdb..f4fc2f3fff5 100644 --- a/plugins/automation/plugin.rb +++ b/plugins/automation/plugin.rb @@ -182,11 +182,14 @@ after_initialize do DiscourseAutomation::EventHandlers.handle_pm_created(topic) if topic.private_message? 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( topic, - tags[:old_tag_names], - tags[:new_tag_names], + old_tag_names, + new_tag_names, + user, ) end diff --git a/plugins/automation/spec/triggers/topic_tags_changed_spec.rb b/plugins/automation/spec/triggers/topic_tags_changed_spec.rb index 1f0133eab22..df5b8f681a3 100644 --- a/plugins/automation/spec/triggers/topic_tags_changed_spec.rb +++ b/plugins/automation/spec/triggers/topic_tags_changed_spec.rb @@ -55,6 +55,7 @@ describe DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED do expect(list.length).to eq(1) expect(list[0]["kind"]).to eq(DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED) + expect(list[0]["user"]).to eq(user) end 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[0]["kind"]).to eq(DiscourseAutomation::Triggers::TOPIC_TAGS_CHANGED) + expect(list[0]["user"]).to eq(user) end it "should not fire if the tag is not present" do diff --git a/spec/lib/discourse_tagging_spec.rb b/spec/lib/discourse_tagging_spec.rb index d783da107ba..f77f62f5b56 100644 --- a/spec/lib/discourse_tagging_spec.rb +++ b/spec/lib/discourse_tagging_spec.rb @@ -949,16 +949,16 @@ RSpec.describe DiscourseTagging do it "sends a discourse event when the staff adds a staff-only tag" do old_tag_names = topic.tags.pluck(:name) + admin_guardian = Guardian.new(admin) tag_changed_event = DiscourseEvent - .track_events do - DiscourseTagging.tag_topic_by_names(topic, Guardian.new(admin), ["alpha"]) - end + .track_events { DiscourseTagging.tag_topic_by_names(topic, admin_guardian, ["alpha"]) } .last 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].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[:user]).to eq(admin_guardian.user) end context "with non-staff users in tag group groups" do