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)