From d22cbe6f7f5aed701047c7a80e83620b332a825c Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Thu, 5 Jun 2025 14:25:14 +0200 Subject: [PATCH] Add tests for stalled detection --- app/models/comment/eventable.rb | 2 +- .../card/activity_spike/detector_test.rb | 40 +++++++++++++++++++ test/models/card/stallable_test.rb | 10 ++--- .../test_helpers/card_activity_test_helper.rb | 11 +++++ 4 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 test/test_helpers/card_activity_test_helper.rb diff --git a/app/models/comment/eventable.rb b/app/models/comment/eventable.rb index f3a108505..a3bb541b1 100644 --- a/app/models/comment/eventable.rb +++ b/app/models/comment/eventable.rb @@ -17,6 +17,6 @@ module Comment::Eventable end def track_creation - track_event("created", collection: card.collection) + track_event("created", collection: card.collection, creator: creator) end end diff --git a/test/models/card/activity_spike/detector_test.rb b/test/models/card/activity_spike/detector_test.rb index 6e0ce840e..9e168ddea 100644 --- a/test/models/card/activity_spike/detector_test.rb +++ b/test/models/card/activity_spike/detector_test.rb @@ -1,4 +1,44 @@ require "test_helper" class Card::ActivitySpike::DetectorTest < ActiveSupport::TestCase + include CardActivityTestHelper + + setup do + Current.session = sessions(:david) + @card = cards(:logo) + end + + test "detect multiple people commenting" do + assert_activity_spike_detected do + multiple_people_comment_on(@card) + end + end + + test "detect assignments" do + assert_activity_spike_detected do + @card.toggle_assignment users(:kevin) + end + end + + test "refresh the activity spike on new spikes" do + multiple_people_comment_on(@card) + + @card = Card.find(@card.id) + + original_last_spike_at = @card.activity_spike.updated_at + travel 2.months + + multiple_people_comment_on(@card.reload) + + assert @card.reload.activity_spike.updated_at > original_last_spike_at + end + + private + def assert_activity_spike_detected(card: @card) + assert card.activity_spike.blank? + perform_enqueued_jobs only: Card::ActivitySpike::DetectionJob do + yield + end + assert card.reload.activity_spike.present? + end end diff --git a/test/models/card/stallable_test.rb b/test/models/card/stallable_test.rb index 05ee97d06..026300a4a 100644 --- a/test/models/card/stallable_test.rb +++ b/test/models/card/stallable_test.rb @@ -1,6 +1,8 @@ require "test_helper" class Card::StallableTest < ActiveSupport::TestCase + include CardActivityTestHelper + setup do Current.session = sessions(:david) end @@ -22,15 +24,9 @@ class Card::StallableTest < ActiveSupport::TestCase # More fine-grained testing in Card::ActivitySpike::Detector test "detect activity spikes" do assert_not cards(:logo).stalled? - - perform_enqueued_jobs only: Card::ActivitySpike::DetectionJob do - 4.times do |index| - cards(:logo).comments.create(body: "Comment number #{index}") - end - end + multiple_people_comment_on(cards(:logo)) travel_to 1.month.from_now - assert cards(:logo).reload.stalled? end end diff --git a/test/test_helpers/card_activity_test_helper.rb b/test/test_helpers/card_activity_test_helper.rb new file mode 100644 index 000000000..4d3f364b4 --- /dev/null +++ b/test/test_helpers/card_activity_test_helper.rb @@ -0,0 +1,11 @@ +module CardActivityTestHelper + def multiple_people_comment_on(card, times: 4, people: users(:david, :kevin, :jz)) + perform_enqueued_jobs only: Card::ActivitySpike::DetectionJob do + times.times do |index| + creator = people[index % people.size] + card.comments.create!(body: "Comment number #{index}", creator: creator) + travel 1.second + end + end + end +end