Snellisci l'invito a trasmettere e invia l'email automatica.

Il form invito è sulla pagina squadra, genera il link e manda la mail; in caso di errore SMTP resta la copia manuale.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-15 20:02:25 +02:00
co-authored by Cursor
parent 3ed70b6999
commit db8b14ba4e
29 changed files with 448 additions and 97 deletions
@@ -0,0 +1,25 @@
# Anteprima: http://localhost:3000/rails/mailers/teams/invitation_mailer/transmission_invite
module Teams
class InvitationMailerPreview < ActionMailer::Preview
def transmission_invite
team = Team.includes(:club).order(:created_at).first
raise "Nessuna squadra in DB: esegui seed" unless team
invited_by = User.order(:created_at).first || User.new(name: "Coach Demo", email: "coach@matchlivetv.test")
invitation = TeamInvitation.new(
email: "demo.streamer@example.com",
expires_at: 7.days.from_now,
role: "member",
staff_kind: "transmission"
)
invite_url = "http://localhost:3000/join/anteprima-token-esempio"
::Teams::InvitationMailer.transmission_invite(
team: team,
invitation: invitation,
invite_url: invite_url,
invited_by: invited_by
)
end
end
end
@@ -0,0 +1,30 @@
require "rails_helper"
RSpec.describe Teams::InvitationMailer, type: :mailer do
let!(:club) { Club.create!(name: "Mail Club", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff") }
let!(:team) { club.teams.create!(name: "U16", sport: "volleyball") }
let!(:inviter) { User.create!(name: "Coach", email: "coach-mail@test.it", password: "Password123", role: "coach") }
let(:invitation) do
TeamInvitation.new(
email: "streamer@test.it",
expires_at: 7.days.from_now,
role: "member",
staff_kind: "transmission"
)
end
it "invia l'invito con link e oggetto corretti" do
mail = described_class.transmission_invite(
team: team,
invitation: invitation,
invite_url: "http://www.example.com/join/token-demo",
invited_by: inviter
)
expect(mail.to).to eq(["streamer@test.it"])
expect(mail.subject).to include("U16")
expect(mail.subject).to include("Mail Club")
expect(mail.body.encoded).to include("http://www.example.com/join/token-demo")
expect(mail.body.encoded).to include("Coach")
end
end