diff --git a/lib/canvas/live_events.rb b/lib/canvas/live_events.rb index b3c4c6592bdca..34bb28c2a82f2 100644 --- a/lib/canvas/live_events.rb +++ b/lib/canvas/live_events.rb @@ -138,6 +138,10 @@ def self.discussion_entry_created(entry) post_event_stringified("discussion_entry_created", get_discussion_entry_data(entry)) end + def self.discussion_entry_updated(entry) + post_event_stringified("discussion_entry_updated", get_discussion_entry_data(entry)) + end + def self.discussion_entry_submitted(entry, assignment_id, submission_id) payload = get_discussion_entry_data(entry) payload[:assignment_id] = assignment_id unless assignment_id.nil? diff --git a/lib/canvas/live_events_callbacks.rb b/lib/canvas/live_events_callbacks.rb index e531b773edbbc..36f20b359fd31 100644 --- a/lib/canvas/live_events_callbacks.rb +++ b/lib/canvas/live_events_callbacks.rb @@ -115,6 +115,8 @@ def self.after_update(obj, changes) Canvas::LiveEvents.course_syllabus_updated(obj, changes["syllabus_body"].first) end Canvas::LiveEvents.course_updated(obj) + when DiscussionEntry + Canvas::LiveEvents.discussion_entry_updated(obj) when DiscussionTopic Canvas::LiveEvents.discussion_topic_updated(obj) when Enrollment diff --git a/spec/lib/canvas/live_events_spec.rb b/spec/lib/canvas/live_events_spec.rb index be5205990fa9b..17cb006224db1 100644 --- a/spec/lib/canvas/live_events_spec.rb +++ b/spec/lib/canvas/live_events_spec.rb @@ -1888,6 +1888,38 @@ def settings end end + describe ".discussion_entry_updated" do + it "triggers a discussion entry updated live event" do + course_with_student + topic = @course.discussion_topics.create!(title: "test title", message: "test body") + entry = topic.discussion_entries.create!(message: "

original

", user_id: @student.id) + + expect_event("discussion_entry_updated", { + user_id: entry.user_id.to_s, + created_at: entry.created_at, + discussion_entry_id: entry.id.to_s, + discussion_topic_id: entry.discussion_topic_id.to_s, + text: entry.message + }).once + + Canvas::LiveEvents.discussion_entry_updated(entry) + end + + it "includes parent_discussion_entry_id for nested replies" do + course_with_student + topic = @course.discussion_topics.create!(title: "test title", message: "test body") + parent = topic.discussion_entries.create!(message: "parent", user_id: @student.id) + reply = topic.discussion_entries.create!(message: "reply", user_id: @student.id, parent_id: parent.id) + + expect_event("discussion_entry_updated", hash_including( + discussion_entry_id: reply.id.to_s, + parent_discussion_entry_id: parent.id.to_s + )).once + + Canvas::LiveEvents.discussion_entry_updated(reply) + end + end + describe ".discussion_entry_submitted" do context "with non graded discussion" do it "creates a discussion entry created live event" do diff --git a/spec/observers/live_events_observer_spec.rb b/spec/observers/live_events_observer_spec.rb index e69696ba42858..f5a3b1f5d6636 100644 --- a/spec/observers/live_events_observer_spec.rb +++ b/spec/observers/live_events_observer_spec.rb @@ -187,6 +187,23 @@ discussion_topic_model(context: @course) @topic.discussion_entries.create!(message: "entry") end + + it "posts update events" do + course_model + discussion_topic_model(context: @course) + entry = @topic.discussion_entries.create!(message: "entry") + expect(Canvas::LiveEvents).to receive(:discussion_entry_updated).once + entry.message = "edited" + entry.save + end + + it "posts update events when soft deleted" do + course_model + discussion_topic_model(context: @course) + entry = @topic.discussion_entries.create!(message: "entry") + expect(Canvas::LiveEvents).to receive(:discussion_entry_updated).once + entry.destroy + end end describe "group" do