discourse/spec/jobs/clean_up_browser_pageview_events_spec.rb
Krzysztof Kotlarek 60fbe8b303
FIX: Delete BrowserPageviewEventScore rows during cleanup (#40390)
Previously, the browser pageview cleanup job deleted old events with
`delete_all`, which bypassed association cleanup and could leave
orphaned score rows.

This change deletes score rows for each cleanup batch before removing
the old pageview events.
2026-05-29 12:25:35 +08:00

52 lines
2.1 KiB
Ruby
Vendored

# frozen_string_literal: true
RSpec.describe Jobs::CleanUpBrowserPageviewEvents do
it "does nothing when the site setting is disabled" do
SiteSetting.clean_up_browser_pageview_events = false
Fabricate(:browser_pageview_event, created_at: 4.months.ago)
Fabricate(:browser_pageview_event, created_at: 1.month.ago)
expect { described_class.new.execute({}) }.not_to change { BrowserPageviewEvent.count }
end
it "deletes events older than 3 months and keeps fresher ones" do
SiteSetting.clean_up_browser_pageview_events = true
fresh_event = Fabricate(:browser_pageview_event, created_at: 1.month.ago)
Fabricate(:browser_pageview_event, created_at: 4.months.ago)
expect { described_class.new.execute({}) }.to change { BrowserPageviewEvent.count }.by(-1)
expect(BrowserPageviewEvent.all).to contain_exactly(fresh_event)
end
it "deletes scores for deleted events" do
SiteSetting.clean_up_browser_pageview_events = true
fresh_event = Fabricate(:browser_pageview_event, created_at: 1.month.ago)
old_event = Fabricate(:browser_pageview_event, created_at: 4.months.ago)
BrowserPageviewEventScore.create!(event: fresh_event)
BrowserPageviewEventScore.create!(event: old_event)
described_class.new.execute({})
expect(BrowserPageviewEventScore.pluck(:event_id)).to contain_exactly(fresh_event.id)
end
it "keeps all events on the retention cutoff day" do
SiteSetting.clean_up_browser_pageview_events = true
freeze_time Time.zone.local(2026, 5, 28, 12, 30) do
cutoff_day_start = 3.months.ago.beginning_of_day
cutoff_day_end = 3.months.ago.end_of_day
Fabricate(:browser_pageview_event, created_at: cutoff_day_start - 1.second)
cutoff_day_first_event = Fabricate(:browser_pageview_event, created_at: cutoff_day_start)
cutoff_day_last_event = Fabricate(:browser_pageview_event, created_at: cutoff_day_end)
described_class.new.execute({})
expect(BrowserPageviewEvent.all).to contain_exactly(
cutoff_day_first_event,
cutoff_day_last_event,
)
end
end
end