Limita una diretta attiva per account e valorizza la copertina Premium Full.
Blocca la seconda diretta sullo stesso utente, registra gli abusi in admin e presenta la copertina come grafica caricata dalla società, con demo Team MLTV. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe "API start seconda diretta stesso account", type: :request do
|
||||
let!(:user) { User.create!(email: "conc@test.it", name: "C", password: "Password123", role: "coach") }
|
||||
let!(:club) { Club.create!(name: "Conc Club", sport: "volleyball") }
|
||||
let!(:membership) { club.club_memberships.create!(user: user, role: "owner") }
|
||||
let!(:team) { club.teams.create!(name: "Tigers", sport: "volleyball") }
|
||||
let!(:match_a) { team.matches.create!(opponent_name: "A", sport: "volleyball") }
|
||||
let!(:match_b) { team.matches.create!(opponent_name: "B", sport: "volleyball") }
|
||||
let!(:live) do
|
||||
StreamSession.create!(
|
||||
match: match_a,
|
||||
user: user,
|
||||
platform: "matchlivetv",
|
||||
status: "live",
|
||||
started_at: 5.minutes.ago,
|
||||
device_model: "Pixel 8",
|
||||
client_os: "android"
|
||||
)
|
||||
end
|
||||
let!(:idle) do
|
||||
StreamSession.create!(
|
||||
match: match_b,
|
||||
user: user,
|
||||
platform: "matchlivetv",
|
||||
status: "idle",
|
||||
device_model: "iPhone 15",
|
||||
client_os: "ios"
|
||||
)
|
||||
end
|
||||
|
||||
def auth_headers
|
||||
post "/api/v1/auth/login", params: { email: user.email, password: "Password123" }
|
||||
token = response.parsed_body["access_token"]
|
||||
{ "Authorization" => "Bearer #{token}", "Content-Type" => "application/json" }
|
||||
end
|
||||
|
||||
before do
|
||||
plan = Plan.find_or_initialize_by(slug: "premium_full")
|
||||
plan.name ||= "Premium Full"
|
||||
plan.features = (plan.features || {}).merge(
|
||||
"platforms" => %w[matchlivetv],
|
||||
"concurrent_streams_limit" => 10
|
||||
)
|
||||
plan.save!
|
||||
club.create_subscription!(plan: plan, status: "active") if club.subscription.blank?
|
||||
allow(SessionChannel).to receive(:broadcast_message)
|
||||
end
|
||||
|
||||
it "restituisce 403 user_concurrent_stream e salva l'evidenza" do
|
||||
patch "/api/v1/sessions/#{idle.id}/start", headers: auth_headers
|
||||
|
||||
expect(response).to have_http_status(:forbidden)
|
||||
body = response.parsed_body
|
||||
expect(body["error_code"]).to eq("user_concurrent_stream")
|
||||
expect(body["error"]).to be_present
|
||||
expect(StreamConcurrencyViolation.where(attempted_session_id: idle.id, occupying_session_id: live.id)).to exist
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user