Allinea le spec alla policy password e prepara i piani di test.

Senza questo la suite locale fallisce sulla complessità password e sui piani mancanti.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-18 23:20:31 +02:00
co-authored by Cursor
parent 841a6a15be
commit 1e4e0560f1
29 changed files with 41 additions and 33 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ RSpec.describe Match, "scheduling scopes" do
Club.create!(name: "Sched Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff")
end
let!(:team) { club.teams.create!(name: "U16", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "Password123", role: "coach") }
it "scheduled_for_live esclude partite già passate oggi" do
past = team.matches.create!(opponent_name: "Past", scheduled_at: 2.hours.ago, sets_to_win: 3)
+1 -1
View File
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Recording do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
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.from_now) }
let!(:session) do
StreamSession.create!(
+4
View File
@@ -9,6 +9,10 @@ RSpec.configure do |config|
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!
config.before(:suite) do
load Rails.root.join("db/seeds/plans.rb")
end
config.before(:each, type: :request) do
host! "www.example.com"
end
@@ -1,10 +1,10 @@
require "rails_helper"
RSpec.describe "Admin club replays", type: :request do
let!(:admin) { AdminAccount.create!(username: "ops", password: "secret123") }
let!(:admin) { AdminAccount.create!(username: "ops", password: "Password123") }
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!(: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)
@@ -19,7 +19,7 @@ RSpec.describe "Admin club replays", type: :request do
end
before do
post admin_login_path, params: { username: "ops", password: "secret123" }
post admin_login_path, params: { username: "ops", password: "Password123" }
end
it "mostra l'archivio replay della società" do
+2 -2
View File
@@ -3,10 +3,10 @@
require "rails_helper"
RSpec.describe "Api::V1::Sports", type: :request do
let!(:user) { User.create!(email: "s@example.com", password: "secret123", name: "U", role: "coach") }
let!(:user) { User.create!(email: "s@example.com", password: "Password123", name: "U", role: "coach") }
it "GET /api/v1/sports restituisce il catalogo" do
post "/api/v1/auth/login", params: { email: user.email, password: "secret123" }
post "/api/v1/auth/login", params: { email: user.email, password: "Password123" }
token = response.parsed_body["access_token"]
get "/api/v1/sports", headers: { "Authorization" => "Bearer #{token}" }
expect(response).to have_http_status(:ok)
@@ -2,7 +2,7 @@ require "rails_helper"
RSpec.describe "Public club billing", type: :request do
let!(:coach) do
User.create!(email: "billing-coach@test.it", name: "Coach", password: "password123", role: "coach")
User.create!(email: "billing-coach@test.it", name: "Coach", password: "Password123", role: "coach")
end
let!(:club) do
c = Club.create!(name: "Billing HTTP Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff",
@@ -17,7 +17,7 @@ RSpec.describe "Public club billing", type: :request do
end
def login!
post public_login_path, params: { email: coach.email, password: "password123" }
post public_login_path, params: { email: coach.email, password: "Password123" }
end
it "mostra pagamenti e fatture in billing" do
@@ -42,7 +42,7 @@ end
RSpec.describe "Public team directory", type: :request do
let(:club) { Club.create!(name: "ASD Eagles", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let(:user) { User.create!(email: "dir2@test.com", name: "Coach", password: "password123", role: "coach") }
let(:user) { User.create!(email: "dir2@test.com", name: "Coach", password: "Password123", role: "coach") }
let!(:team) { club.teams.create!(name: "Tigers Volley U17", sport_key: "pallavolo") }
before do
@@ -1,7 +1,7 @@
require "rails_helper"
RSpec.describe Billing::AdminCompedSubscription do
let(:admin) { AdminAccount.create!(username: "ops", password: "secret123") }
let(:admin) { AdminAccount.create!(username: "ops", password: "Password123") }
let(:club) { Club.create!(name: "Sponsor FC", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
before do
@@ -1,7 +1,7 @@
require "rails_helper"
RSpec.describe Billing::Stripe::CheckoutSession do
let(:user) { User.create!(email: "checkout@test.it", name: "Owner", password: "password123", role: "coach") }
let(:user) { User.create!(email: "checkout@test.it", name: "Owner", password: "Password123", role: "coach") }
let(:club) do
Club.create!(
name: "Checkout Club", sport: "volleyball",
@@ -1,7 +1,7 @@
require "rails_helper"
RSpec.describe Billing::Stripe::EnsureCustomer do
let(:user) { User.create!(email: "ensure@test.it", name: "U", password: "password123", role: "coach") }
let(:user) { User.create!(email: "ensure@test.it", name: "U", password: "Password123", role: "coach") }
let(:club) do
Club.create!(name: "Ensure Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff")
end
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Mediamtx::CleanupOrphanPaths do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
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.from_now) }
let(:client) { instance_double(Mediamtx::Client) }
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Recordings::AccessPolicy do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
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.from_now) }
let!(:session) do
StreamSession.create!(match: match, user: user, platform: "matchlivetv", status: "ended")
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Recordings::CleanupLocal do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
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.from_now) }
let(:recordings_root) { Rails.root.join("tmp/recordings_spec").to_s }
@@ -4,7 +4,7 @@ RSpec.describe Recordings::ClubArchive do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team_a) { club.teams.create!(name: "A", sport: "volleyball") }
let!(:team_b) { club.teams.create!(name: "B", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "Password123", role: "coach") }
let!(:match_a) { team_a.matches.create!(opponent_name: "Rival A", scheduled_at: 1.day.ago) }
let!(:match_b) { team_b.matches.create!(opponent_name: "Rival B", scheduled_at: 1.day.ago) }
let!(:session_a) do
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Recordings::ClubStats do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
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.from_now) }
let!(:session) do
StreamSession.create!(match: match, user: user, platform: "matchlivetv", status: "ended")
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Recordings::Delete do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
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.from_now) }
let!(:session) do
StreamSession.create!(match: match, user: user, platform: "youtube", status: "ended")
@@ -3,7 +3,7 @@ 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!(: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)
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Recordings::FinalizeSession do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
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.from_now) }
let!(:session) do
StreamSession.create!(
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Recordings::IncrementViews do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "c@test.com", name: "C", password: "password123", role: "coach") }
let!(:user) { User.create!(email: "c@test.com", name: "C", password: "Password123", role: "coach") }
let!(:match) { team.matches.create!(opponent_name: "Rival", scheduled_at: 1.day.from_now) }
let!(:session) { StreamSession.create!(match: match, user: user, platform: "matchlivetv", status: "ended") }
let!(:recording) do
@@ -2,9 +2,9 @@ require "rails_helper"
RSpec.describe Recordings::NotifyReady do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:owner) { User.create!(email: "owner@test.com", name: "Owner", password: "password123", role: "coach") }
let!(:owner) { User.create!(email: "owner@test.com", name: "Owner", password: "Password123", role: "coach") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "c@test.com", name: "C", password: "password123", role: "coach") }
let!(:user) { User.create!(email: "c@test.com", name: "C", password: "Password123", role: "coach") }
let!(:match) { team.matches.create!(opponent_name: "Rival", scheduled_at: 1.day.from_now) }
let!(:session) { StreamSession.create!(match: match, user: user, platform: "matchlivetv", status: "ended") }
@@ -1,7 +1,7 @@
require "rails_helper"
RSpec.describe Scoring::ApplyAction do
let!(:user) { User.create!(email: "score@test.it", name: "U", password: "password123", role: "coach") }
let!(:user) { User.create!(email: "score@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) }
@@ -6,7 +6,7 @@ RSpec.describe Scoring::Engines::GenericEngine do
let!(:club) { Club.create!(name: "C", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "T", sport: "altro") }
let!(:match) { team.matches.create!(opponent_name: "Opp", sport: "altro") }
let!(:user) { User.create!(email: "g@example.com", password: "secret123", name: "Coach") }
let!(:user) { User.create!(email: "g@example.com", password: "Password123", name: "Coach") }
let!(:session) { StreamSession.create!(match: match, user: user, status: "live", platform: "matchlivetv") }
it "incrementa solo il contatore senza chiudere set" do
@@ -13,7 +13,7 @@ RSpec.describe Scoring::PeriodData do
end
RSpec.describe "Basket advance_period con periodo corrotto" do
let!(:user) { User.create!(email: "period@test.it", name: "U", password: "password123", role: "coach") }
let!(:user) { User.create!(email: "period@test.it", name: "U", password: "Password123", role: "coach") }
let!(:club) { Club.create!(name: "C", sport: "basket", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "U13", sport_key: "basket") }
let!(:match) { team.matches.create!(opponent_name: "Opp", sport: "basket") }
@@ -1,7 +1,7 @@
require "rails_helper"
RSpec.describe Scoring::SyncState do
let!(:user) { User.create!(email: "sync@test.it", name: "U", password: "password123", role: "coach") }
let!(:user) { User.create!(email: "sync@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) }
@@ -1,7 +1,7 @@
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!(: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) }
@@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Teams::Entitlements, "recordings" do
let!(:club) { Club.create!(name: "Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "Team", sport: "volleyball") }
let!(:user) { User.create!(email: "coach@test.com", name: "Coach", password: "password123", role: "coach") }
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.from_now) }
let!(:session) do
StreamSession.create!(match: match, user: user, platform: "matchlivetv", status: "ended")
@@ -10,7 +10,7 @@ RSpec.describe Teams::Entitlements do
end
it "limits transmission invites on free plan" do
user = User.create!(email: "t1@test.com", name: "T1", password: "password123", role: "coach")
user = User.create!(email: "t1@test.com", name: "T1", password: "Password123", role: "coach")
UserTeam.create!(user: user, team: team, role: "member", staff_kind: "transmission")
ent = described_class.new(team)
expect { ent.assert_can_invite! }.to raise_error(Teams::EntitlementError, /trasmissione/)
@@ -1,7 +1,7 @@
require "rails_helper"
RSpec.describe Teams::PublicDirectory do
let(:user) { User.create!(email: "dir-#{SecureRandom.hex(4)}@test.com", name: "Dir", password: "password123", role: "coach") }
let(:user) { User.create!(email: "dir-#{SecureRandom.hex(4)}@test.com", name: "Dir", password: "Password123", role: "coach") }
let(:club) { Club.create!(name: "ASD Directory #{SecureRandom.hex(3)}", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team_live) { club.teams.create!(name: "Live Team", sport_key: "pallavolo") }
let!(:team_replay) { club.teams.create!(name: "Replay Team", sport_key: "basket") }
@@ -1,7 +1,7 @@
require "rails_helper"
RSpec.describe Webhooks::MediamtxHandler do
let(:user) { User.create!(email: "c@test.com", name: "C", password: "password123", role: "coach") }
let(:user) { User.create!(email: "c@test.com", name: "C", password: "Password123", role: "coach") }
let(:club) { Club.create!(name: "MTX Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let(:team) { club.teams.create!(name: "T", sport: "volleyball") }
let!(:match) { team.matches.create!(opponent_name: "Away") }
@@ -12,6 +12,10 @@ RSpec.describe Webhooks::MediamtxHandler do
)
end
before do
allow_any_instance_of(Mediamtx::Client).to receive(:set_path_recording)
end
it "transitions to reconnecting on disconnect" do
described_class.new(event: "disconnect", session_id: session.id).call
expect(session.reload.status).to eq("reconnecting")