Permette agli admin di prolungare la scadenza dei replay.

Aggiunge data personalizzata e pulsanti rapidi nell'archivio admin così il job di purge non elimina i video fino alla nuova scadenza.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-13 09:11:56 +02:00
parent 89854869c7
commit dc309fbeb0
6 changed files with 230 additions and 1 deletions

View File

@@ -0,0 +1,64 @@
require "rails_helper"
RSpec.describe Recordings::ExtendExpiry do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Tigers", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
let!(:match) { team.matches.create!(opponent_name: "Rival", scheduled_at: 1.day.ago) }
let!(:session) do
StreamSession.create!(match: match, user: user, platform: "matchlivetv", status: "ended", ended_at: 1.hour.ago)
end
let!(:recording) do
Recording.create!(
stream_session: session, team: team, status: "ready", privacy_status: "public",
storage_key: "teams/#{team.id}/sessions/#{session.id}/replay.mp4",
expires_at: 2.days.from_now,
expiry_warning_sent_at: 1.day.ago
)
end
it "imposta una nuova data di scadenza e resetta l'avviso" do
new_expiry = 45.days.from_now
described_class.new(recording).to_time(new_expiry)
recording.reload
expect(recording.expires_at).to be_within(1.second).of(new_expiry)
expect(recording.expiry_warning_sent_at).to be_nil
end
it "prolunga dalla scadenza corrente" do
original = recording.expires_at
described_class.new(recording).by_days(30)
recording.reload
expect(recording.expires_at).to be_within(1.second).of(original + 30.days)
expect(recording.expiry_warning_sent_at).to be_nil
end
it "prolunga da oggi se la scadenza è già passata" do
recording.update!(expires_at: 2.days.ago)
described_class.new(recording).by_days(10)
recording.reload
expect(recording.expires_at).to be_within(1.second).of(10.days.from_now)
end
it "esclude il replay dalla coda di purge dopo il prolungamento" do
recording.update!(expires_at: 1.hour.ago)
expect(Recording.expired_pending_purge).to include(recording)
described_class.new(recording).by_days(30)
expect(Recording.expired_pending_purge).not_to include(recording.reload)
end
it "rifiuta date nel passato" do
expect do
described_class.new(recording).to_time(1.day.ago)
end.to raise_error(Recordings::ExtendExpiry::Error, /futuro/)
end
end