Merge pull request #814 from basecamp/optimize-summarizable

Little refactor + missing test
This commit is contained in:
Jorge Manrubia
2025-07-25 10:06:21 +02:00
committed by GitHub
5 changed files with 10552 additions and 6 deletions
+6 -1
View File
@@ -10,7 +10,7 @@ module User::DayTimeline::Summarizable
end
def summarizable?
!day.today? || events.count >= 10
day.past? || summarizable_today?
end
def summarize
@@ -28,4 +28,9 @@ module User::DayTimeline::Summarizable
def summarize_later
User::DayTimeline::SummarizeJob.perform_later(self)
end
private
def summarizable_today?
day.today? && events.count >= 10
end
end
@@ -0,0 +1,43 @@
require "test_helper"
class User::DayTimeline::SummarizableTest < ActiveSupport::TestCase
include VcrTestHelper
setup do
@user = users(:david)
freeze_timestamps
@day = events(:logo_published).reload.created_at
@day_timeline = @user.timeline_for(@day, filter: @user.filters.new)
end
test "summarize" do
assert_not @day_timeline.summarized?
assert @day_timeline.events.any?
summary = assert_difference -> { Event::ActivitySummary.count }, +1 do
@day_timeline.summarize
end
assert @day_timeline.summarized?
assert_equal summary, @day_timeline.summary
assert_no_difference -> { Event::ActivitySummary.count } do
@day_timeline.summarize
end
end
test "past events are summarizable" do
unfreeze_time
# Not summarizable in the future
travel_to @day - 2.weeks
assert_not @day_timeline.summarizable?
# Summarizable in the past
travel_to @day + 1.day
assert @day_timeline.summarizable?
end
end
+3 -5
View File
@@ -38,13 +38,11 @@ module VcrTestHelper
VCR.use_cassette("#{@casette_name}_without_body", match_requests_on: [ :method, :uri ], &block)
end
def freeze_timestamps(models = [ Event, Card, Comment ])
def freeze_timestamps(models = [ Event, Card, Comment, Closure ], at: Time.zone.parse("2025-08-12 9am"))
# Make sure we fix dates since they change the prompt and this gets VCR confused
date = Time.zone.parse("2025-08-12 9am")
freeze_time date
freeze_time at
models.each do |klass|
klass.update_all created_at: date
klass.update_all created_at: at
end
end
end
File diff suppressed because it is too large Load Diff