# frozen_string_literal: true require "rails_helper" RSpec.describe CleanupExpiredSessionsJob do let(:user) { User.create!(email: "idle-clean@test.it", name: "Idle", password: "Password123", role: "coach") } let(:club) { Club.create!(name: "Club Idle", sport: "volleyball") } let(:team) { club.teams.create!(name: "Team Idle", sport: "volleyball") } let(:match) { team.matches.create!(opponent_name: "Opp", sport: "volleyball") } before do club.club_memberships.create!(user: user, role: "owner") allow(SessionChannel).to receive(:broadcast_message) allow(Streams::YoutubeRelay).to receive(:stop) client = instance_double(Mediamtx::Client, delete_path: true) allow(Mediamtx::Client).to receive(:for_session).and_return(client) allow(Recordings::FinalizeSession).to receive(:new).and_return( instance_double(Recordings::FinalizeSession, call: nil) ) allow(Tournaments::CaptureStreamResult).to receive(:call) end def create_session(status:, updated_at:) StreamSession.create!( match: match, user: user, platform: "youtube", status: status, privacy_status: "unlisted" ).tap { |s| s.update_columns(updated_at: updated_at) } end it "chiude sessioni idle oltre STREAM_SESSION_IDLE_MINUTES (default 30)" do stale = create_session(status: "idle", updated_at: 45.minutes.ago) fresh = create_session(status: "idle", updated_at: 10.minutes.ago) described_class.new.perform expect(stale.reload.status).to eq("ended") expect(fresh.reload.status).to eq("idle") expect(stale.stream_events.where(event_type: "error").exists?).to eq(true) end it "chiude connecting/reconnecting stale oltre STREAM_SESSION_STALE_HOURS (default 6)" do stale = create_session(status: "connecting", updated_at: 7.hours.ago) fresh = create_session(status: "connecting", updated_at: 1.hour.ago) described_class.new.perform expect(stale.reload.status).to eq("ended") expect(fresh.reload.status).to eq("connecting") end it "non tocca sessioni live" do live = create_session(status: "live", updated_at: 2.hours.ago) live.update_columns(started_at: 2.hours.ago) described_class.new.perform expect(live.reload.status).to eq("live") end end