Add tests for stalled detection

This commit is contained in:
Jorge Manrubia
2025-06-05 14:25:14 +02:00
parent 35731980fb
commit d22cbe6f7f
4 changed files with 55 additions and 8 deletions
+1 -1
View File
@@ -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
@@ -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
+3 -7
View File
@@ -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
@@ -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