Fix avanzamento quarto basket e regia senza cronometro.

Normalizza il periodo nel backend quando l'app invia "Q1" via cable, così advance_period aggiorna regia e overlay; rimuove i controlli cronometro dalla regia e rende più tollerante il decode iOS al resume sessione.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Emiliano Frascaro
2026-06-20 16:15:44 +02:00
parent c92099a41b
commit 793cfaaaf1
18 changed files with 861 additions and 452 deletions

View File

@@ -62,6 +62,72 @@ RSpec.describe "Public regia", type: :request do
expect(response.parsed_body.dig("score", "board_type")).to eq("basket")
end
it "avanza il quarto basket via API" do
basket_team = club.teams.create!(name: "U13 Basket", sport_key: "basket")
basket_match = basket_team.matches.create!(opponent_name: "Avversario", sport: "basket")
basket_session = StreamSession.create!(match: basket_match, user: user, platform: "matchlivetv", status: "live")
basket_session.create_score_state!(
board_type: "basket",
home_sets: 0,
away_sets: 0,
home_points: 0,
away_points: 0,
current_set: 1,
data: {
"period" => 1,
"clock_secs" => 600,
"clock_running" => false,
"home_score" => 0,
"away_score" => 4,
"overtime" => false
}
)
token = Sessions::RegiaAccess.new(basket_session).issue_token!
patch public_regia_score_path(token), params: { cmd: "advance_period" }, as: :json
expect(response).to have_http_status(:ok)
body = response.parsed_body
expect(body.dig("score", "period")).to eq("Q2")
expect(body.dig("score", "data", "period")).to eq(2)
expect(basket_session.score_state.reload.data["period"]).to eq(2)
end
it "avanza il quarto basket anche con periodo Q1 corrotto in data" do
basket_team = club.teams.create!(name: "U13 Basket", sport_key: "basket")
basket_match = basket_team.matches.create!(opponent_name: "Avversario", sport: "basket")
basket_session = StreamSession.create!(match: basket_match, user: user, platform: "matchlivetv", status: "live")
basket_session.create_score_state!(
board_type: "basket",
data: {
"period" => "Q1",
"home_score" => 0,
"away_score" => 4,
"clock_secs" => 600,
"clock_running" => false,
"overtime" => false
}
)
token = Sessions::RegiaAccess.new(basket_session).issue_token!
patch public_regia_score_path(token), params: { cmd: "advance_period" }, as: :json
expect(response).to have_http_status(:ok)
expect(response.parsed_body.dig("score", "period")).to eq("Q2")
end
it "non mostra controlli cronometro sulla regia basket" do
basket_team = club.teams.create!(name: "U13 Basket", sport_key: "basket")
basket_match = basket_team.matches.create!(opponent_name: "Avversario", sport: "basket")
basket_session = StreamSession.create!(match: basket_match, user: user, platform: "matchlivetv", status: "live")
basket_session.create_score_state!(board_type: "basket", data: { "period" => 1, "home_score" => 0, "away_score" => 0 })
token = Sessions::RegiaAccess.new(basket_session).issue_token!
get public_regia_path(token)
expect(response).to have_http_status(:ok)
expect(response.body).to include("Prossimo quarto")
expect(response.body).not_to include("cronometro")
expect(response.body).not_to include("Cronometro:")
end
it "mette in pausa e riprende la diretta" do
mtx = instance_double(
Mediamtx::Client,