mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-06-19 00:48:08 +08:00
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.
52 lines
2.1 KiB
Ruby
Vendored
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
|