From 7578d8fc4499857083f43805c0adb474ac48a6ba Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Wed, 27 Sep 2017 14:00:53 -0400 Subject: [PATCH] Add a `DiscourseEvent` for when a topic is closed --- app/services/topic_status_updater.rb | 4 ++++ spec/services/topic_status_updater_spec.rb | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/app/services/topic_status_updater.rb b/app/services/topic_status_updater.rb index ed088d5a8ea..cd1ea0d94f7 100644 --- a/app/services/topic_status_updater.rb +++ b/app/services/topic_status_updater.rb @@ -36,6 +36,10 @@ TopicStatusUpdater = Struct.new(:topic, :user) do result = false if rc == 0 end + if status.manually_closing_topic? + DiscourseEvent.trigger(:topic_closed, topic) + end + if @topic_status_update if status.manually_closing_topic? || status.closing_topic? topic.delete_topic_timer(TopicTimer.types[:close]) diff --git a/spec/services/topic_status_updater_spec.rb b/spec/services/topic_status_updater_spec.rb index 0d1dafa8975..14106b10f1f 100644 --- a/spec/services/topic_status_updater_spec.rb +++ b/spec/services/topic_status_updater_spec.rb @@ -40,6 +40,20 @@ describe TopicStatusUpdater do expect(last_post.raw).to eq(I18n.t("topic_statuses.autoclosed_enabled_minutes", count: 0)) end + it "triggers a DiscourseEvent on close" do + topic = create_topic + + called = false + updater = -> (topic) { called = true } + + DiscourseEvent.on(:topic_closed, &updater) + TopicStatusUpdater.new(topic, admin).update!("closed", true) + DiscourseEvent.off(:topic_closed, &updater) + + expect(topic).to be_closed + expect(called).to eq(true) + end + it "adds an autoclosed message based on last post" do topic = create_topic Fabricate(:post, topic: topic)