Aggiunge i tornei con hub, pagina pubblica e tabellone per semifinali e finali.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Tournaments::ComposeInviteEmail do
|
||||
it "sostituisce i token e rimuove HTML pericoloso" do
|
||||
html = <<~HTML
|
||||
<p>Ciao custom</p>
|
||||
<script>alert(1)</script>
|
||||
<p><a href="javascript:alert(1)">x</a></p>
|
||||
<p>{{link_invito}}</p>
|
||||
<p>Scade il {{scadenza}}</p>
|
||||
<img src="javascript:alert(1)">
|
||||
<img src="/rails/active_storage/blobs/redirect/abc/logo.png" width="120">
|
||||
HTML
|
||||
|
||||
out = described_class.call(
|
||||
html: html,
|
||||
invite_url: "https://www.example.com/join/token-ok",
|
||||
expires_on: "10 settembre 2026"
|
||||
)
|
||||
|
||||
expect(out).to include("Ciao custom")
|
||||
expect(out).to include("https://www.example.com/join/token-ok")
|
||||
expect(out).to include("10 settembre 2026")
|
||||
expect(out).to include("/rails/active_storage/blobs/redirect/abc/logo.png")
|
||||
expect(out).not_to include("<script")
|
||||
expect(out).not_to include("javascript:")
|
||||
end
|
||||
|
||||
it "aggiunge il link se l'utente ha cancellato il token" do
|
||||
out = described_class.call(html: "<p>Solo testo</p>", invite_url: "https://www.example.com/join/z")
|
||||
expect(out).to include("Solo testo")
|
||||
expect(out).to include("https://www.example.com/join/z")
|
||||
end
|
||||
|
||||
it "mantiene i token del modello quando sanitizza una bozza" do
|
||||
html = %(<p>Bozza</p><p><a href="{{link_invito}}">Apri</a></p><p data-invite-note="">Nota</p>)
|
||||
out = described_class.sanitize_html(html)
|
||||
expect(out).to include("Bozza")
|
||||
expect(out).to include("{{link_invito}}")
|
||||
expect(out).to include("Nota")
|
||||
expect(out).to include("data-invite-note")
|
||||
end
|
||||
|
||||
it "compone il modello predefinito senza chiavi I18n mancanti" do
|
||||
tournament = instance_double(Tournament, name: "Open", club: instance_double(Club, name: "Tigers"))
|
||||
invited_by = instance_double(User, name: "Owner")
|
||||
html = I18n.with_locale(:it) do
|
||||
described_class.default_html(tournament: tournament, invited_by: invited_by)
|
||||
end
|
||||
expect(html).not_to include("Translation missing")
|
||||
expect(html).to include("Open")
|
||||
expect(html).to include("Tigers")
|
||||
expect(html).to include("{{link_invito}}")
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user