Così overflow Hetzner e VOD YouTube restano in archivio dopo lo spegnimento del nodo, e la colonna ingest non si svuota. Co-authored-by: Cursor <cursoragent@cursor.com>
91 lines
3.1 KiB
Ruby
91 lines
3.1 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe "Admin sessions index", type: :request do
|
|
let!(:admin) { AdminAccount.create!(username: "ops-sessions", password: "Password123") }
|
|
let!(:coach) do
|
|
User.create!(email: "sessions-coach@test.it", name: "Coach", password: "Password123", role: "coach")
|
|
end
|
|
let!(:club_a) { Club.create!(name: "Tigers Club", sport: "volleyball") }
|
|
let!(:club_b) { Club.create!(name: "Other Club", sport: "volleyball") }
|
|
let!(:team_a) { club_a.teams.create!(name: "Tigers U16", sport_key: "pallavolo") }
|
|
let!(:team_b) { club_b.teams.create!(name: "Other U14", sport_key: "pallavolo") }
|
|
let!(:match_a) { team_a.matches.create!(opponent_name: "Rival A", sport_key: "pallavolo") }
|
|
let!(:match_b) { team_b.matches.create!(opponent_name: "Rival B", sport_key: "pallavolo") }
|
|
let!(:session_a) do
|
|
StreamSession.create!(
|
|
match: match_a,
|
|
user: coach,
|
|
platform: "matchlivetv",
|
|
status: "ended",
|
|
started_at: 2.hours.ago,
|
|
ended_at: 1.hour.ago,
|
|
total_duration_secs: 3600
|
|
)
|
|
end
|
|
let!(:session_b) do
|
|
StreamSession.create!(
|
|
match: match_b,
|
|
user: coach,
|
|
platform: "youtube",
|
|
status: "live",
|
|
started_at: 30.minutes.ago
|
|
)
|
|
end
|
|
|
|
def login!
|
|
post admin_login_path, params: { username: admin.username, password: "Password123" }
|
|
end
|
|
|
|
before { login! }
|
|
|
|
it "mostra società, orari e filtra per testo" do
|
|
get admin_sessions_path, params: { q: "Tigers" }
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include("Tigers Club")
|
|
expect(response.body).to include("Tigers U16 vs Rival A")
|
|
expect(response.body).not_to include("Other U14 vs Rival B")
|
|
end
|
|
|
|
it "filtra per stato" do
|
|
get admin_sessions_path, params: { status: "live" }
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include("Other U14 vs Rival B")
|
|
expect(response.body).not_to include("Tigers U16 vs Rival A")
|
|
end
|
|
|
|
it "mostra il dettaglio formattato" do
|
|
get admin_session_path(session_a)
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include("Tigers Club")
|
|
expect(response.body).to include("Dettaglio sessione").or include("Session details")
|
|
expect(response.body).to include(session_a.id)
|
|
end
|
|
|
|
it "mostra lo snapshot ingest anche se il nodo è stato decommissionato" do
|
|
node = StreamNode.create!(
|
|
slug: "ingest-09",
|
|
hostname: "ingest-09.mltv-stream.net",
|
|
role: "cloud",
|
|
status: "ready",
|
|
provider: "hetzner",
|
|
rtmp_base_url: "rtmp://ingest-09.mltv-stream.net:1935",
|
|
hls_base_url: "https://collaudo.example/hls",
|
|
api_base_url: "http://10.0.0.9:9997",
|
|
max_publishers: 4,
|
|
max_relays: 4
|
|
)
|
|
session_a.update!(stream_node: node)
|
|
node.destroy!
|
|
session_a.reload
|
|
|
|
get admin_sessions_path
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include("ingest-09")
|
|
expect(response.body).to include("Hetzner")
|
|
|
|
get admin_session_path(session_a)
|
|
expect(response.body).to include("ingest-09")
|
|
expect(response.body).to include("nodo rimosso").or include("node removed")
|
|
end
|
|
end
|