Aggiunge app iOS nativa con parità multi-sport e test unitari.

Porting SwiftUI da Android (auth, hub, wizard, broadcast RTMP, overlay, scoring board-aware), reload hub al ritorno da diretta, decodifica score tollerante e documentazione allineata.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Emiliano Frascaro
2026-06-14 21:37:32 +02:00
parent b798e0ea06
commit 585332e32e
101 changed files with 7910 additions and 5 deletions

View File

@@ -0,0 +1,42 @@
require "rails_helper"
RSpec.describe "Volley close_set" do
let!(:user) { User.create!(email: "volley-close@test.it", name: "U", password: "password123", role: "coach") }
let!(:club) { Club.create!(name: "C", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "T", sport: "volleyball") }
let!(:match) { team.matches.create!(opponent_name: "Opp", sport: "volleyball", sets_to_win: 3) }
let!(:session) { StreamSession.create!(match: match, user: user, platform: "matchlivetv", status: "live") }
before do
session.create_score_state!(
home_sets: 0,
away_sets: 0,
home_points: 26,
away_points: 12,
current_set: 1,
board_type: "volley"
)
end
it "chiude il set 26-12 e apre il set 2" do
result = Scoring::ApplyAction.new(session: session, action: "close_set").call
score = result.score.reload
expect(score.home_sets).to eq(1)
expect(score.away_sets).to eq(0)
expect(score.home_points).to eq(0)
expect(score.away_points).to eq(0)
expect(score.current_set).to eq(2)
expect(score.set_partials).to eq([{ "set" => 1, "home" => 26, "away" => 12 }])
expect(result.set_won).to be(true)
expect(result.match_won).to be(false)
end
it "rileva vincitore set al 25-23 dopo home_point" do
session.score_state.update!(home_points: 24, away_points: 23)
result = Scoring::ApplyAction.new(session: session, action: "home_point").call
expect(result.score.home_points).to eq(25)
expect(result.set_won).to be(true)
expect(result.winner).to eq(:home)
end
end