Aggiorna marketing: prezzi lancio, Funzionalità narrativa e link store.
Allinea i piani Light/Full ai prezzi di lancio, ripensa /funzionalita per vendere il prodotto e aggiunge i badge App Store/Play nella home. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -32,7 +32,7 @@ RSpec.describe Public::BillingHelper, type: :helper do
|
||||
current_interval: "yearly"
|
||||
)
|
||||
expect(action[:kind]).to eq(:current)
|
||||
expect(action[:label]).to include("€40/anno")
|
||||
expect(action[:label]).to include("€59/anno")
|
||||
end
|
||||
|
||||
it "propone cambio intervallo sullo stesso piano" do
|
||||
|
||||
@@ -72,7 +72,7 @@ RSpec.describe "Public club billing", type: :request do
|
||||
get public_club_billing_path(club)
|
||||
|
||||
expect(response.body).to include("Completa dati di fatturazione")
|
||||
expect(response.body).not_to include("Attiva Premium Light — €40/anno")
|
||||
expect(response.body).not_to include("Attiva Light — €59/anno")
|
||||
end
|
||||
|
||||
it "dopo profilo completo reindirizza al checkout" do
|
||||
@@ -111,8 +111,8 @@ RSpec.describe "Public club billing", type: :request do
|
||||
|
||||
login!
|
||||
get public_club_billing_path(club)
|
||||
expect(response.body).to include("Premium Light — €40/anno")
|
||||
expect(response.body).to include("Premium Light — €5/mese")
|
||||
expect(response.body).to include("Attiva Light — €59/anno")
|
||||
expect(response.body).to include("Attiva Light — €7,90/mese")
|
||||
|
||||
allow(Billing::Stripe::CheckoutSession).to receive(:new).and_return(
|
||||
instance_double(Billing::Stripe::CheckoutSession, url: "https://checkout.stripe.com/test")
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Public features page", type: :request do
|
||||
it "racconta il prodotto con sezioni narrative e CTA" do
|
||||
get public_features_path
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).to include("Le dirette della tua società")
|
||||
expect(response.body).to include("Senza password condivise")
|
||||
expect(response.body).to include("Uno smartphone")
|
||||
expect(response.body).to include("Un account personale")
|
||||
expect(response.body).to include("Sei in diretta")
|
||||
expect(response.body).to include("Dalla palestra agli spettatori")
|
||||
expect(response.body).to include("Ognuno con il proprio account")
|
||||
expect(response.body).to include("Niente password condivise")
|
||||
expect(response.body).to include("Chi filma, filma")
|
||||
expect(response.body).to include("Accesso con link")
|
||||
expect(response.body).to include("La diretta resta della tua società")
|
||||
expect(response.body).to include("La partita finisce. Il ricordo resta.")
|
||||
expect(response.body).to include("Inizia gratis")
|
||||
expect(response.body).to include("Confronta i piani")
|
||||
expect(response.body).to include(public_signup_path)
|
||||
expect(response.body).to include(public_prezzi_path)
|
||||
expect(response.body).not_to include("translation missing")
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,41 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Public home page", type: :request do
|
||||
it "mostra i link agli store nell'hero e nel footer" do
|
||||
get root_path
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).to include(MatchLiveTv.app_store_url)
|
||||
expect(response.body).to include(MatchLiveTv.play_store_url)
|
||||
expect(response.body).to include(I18n.t("home.stores_label", locale: :it))
|
||||
expect(response.body).to include(I18n.t("home.store_app_store_name", locale: :it))
|
||||
expect(response.body).to include(I18n.t("home.store_play_name", locale: :it))
|
||||
expect(response.body.scan(MatchLiveTv.app_store_url).size).to eq(3)
|
||||
expect(response.body.scan(MatchLiveTv.play_store_url).size).to eq(3)
|
||||
end
|
||||
|
||||
{
|
||||
"it" => "Per andare in diretta dallo smartphone",
|
||||
"en" => "To go live from your smartphone",
|
||||
"fr" => "Pour passer en direct depuis le smartphone",
|
||||
"de" => "Live gehen vom Smartphone",
|
||||
"es" => "Para emitir en directo desde el smartphone"
|
||||
}.each do |locale, label|
|
||||
it "traduce i badge store in #{locale} senza translation missing" do
|
||||
cookies[:mltv_locale] = locale
|
||||
get root_path
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).to include(label)
|
||||
expect(response.body).not_to include("translation missing")
|
||||
end
|
||||
end
|
||||
|
||||
it "non mostra i badge store nel chrome App Store Review" do
|
||||
get public_support_path
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).not_to include(MatchLiveTv.app_store_url)
|
||||
expect(response.body).not_to include(MatchLiveTv.play_store_url)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,32 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Public pricing page", type: :request do
|
||||
before { load Rails.root.join("db/seeds/plans.rb") }
|
||||
|
||||
it "mostra prezzi lancio, listino barrato e Full in evidenza" do
|
||||
get public_prezzi_path
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).to include("€59/anno")
|
||||
expect(response.body).to include("€79/anno")
|
||||
expect(response.body).to include("€199/anno")
|
||||
expect(response.body).to include("€249/anno")
|
||||
expect(response.body).to include("€7,90/mese")
|
||||
expect(response.body).to include("€24,90/mese")
|
||||
expect(response.body).to include("equivale a €4,92/mese")
|
||||
expect(response.body).to include("equivale a €16,58/mese")
|
||||
expect(response.body).to include("Prezzo lancio")
|
||||
expect(response.body).to include("Consigliato per le società")
|
||||
expect(response.body).to include("Attiva Light — €59/anno")
|
||||
expect(response.body).to include("Attiva Light — €7,90/mese")
|
||||
expect(response.body).to include("Attiva Full — €199/anno")
|
||||
expect(response.body).to include("Attiva Full — €24,90/mese")
|
||||
expect(response.body).to include("Account trasmettitori: massimo")
|
||||
expect(response.body).to include("per abbonamento")
|
||||
expect(response.body).to include("Account trasmettitori")
|
||||
expect(response.body).to include("Niente password condivise")
|
||||
expect(response.body).to include("plan-card--featured")
|
||||
expect(response.body).not_to include("a vita")
|
||||
expect(response.body).not_to include("Più popolare")
|
||||
end
|
||||
end
|
||||
@@ -10,7 +10,7 @@ RSpec.describe Billing::PaymentDescription do
|
||||
lines: double(data: [])
|
||||
)
|
||||
|
||||
expect(described_class.for_stripe_invoice(invoice)).to eq("Premium Light — €5/mese")
|
||||
expect(described_class.for_stripe_invoice(invoice)).to eq("Premium Light — €7,90/mese")
|
||||
end
|
||||
|
||||
it "ignora descrizioni di test nel pagamento salvato" do
|
||||
@@ -23,6 +23,6 @@ RSpec.describe Billing::PaymentDescription do
|
||||
club: Club.create!(name: "C", sport: "volleyball", primary_color: "#e53935", secondary_color: "#ffffff")
|
||||
)
|
||||
|
||||
expect(payment.display_description).to eq("Premium Light — €40/anno")
|
||||
expect(payment.display_description).to eq("Premium Light — €59/anno")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -23,6 +23,15 @@ RSpec.describe Billing::Stripe::PriceCatalog do
|
||||
expect { described_class.normalize_interval("weekly") }.to raise_error(ArgumentError)
|
||||
end
|
||||
|
||||
it "etichetta il prezzo lancio annuale e il mensile" do
|
||||
expect(described_class.label(plan_slug: "premium_light", interval: "yearly")).to eq("€59/anno")
|
||||
expect(described_class.label(plan_slug: "premium_light", interval: "monthly")).to eq("€7,90/mese")
|
||||
expect(described_class.list_label(plan_slug: "premium_light", interval: "yearly")).to eq("€79/anno")
|
||||
expect(described_class.equivalent_monthly_label(plan_slug: "premium_light")).to eq("€4,92/mese")
|
||||
expect(described_class.label(plan_slug: "premium_full", interval: "yearly")).to eq("€199/anno")
|
||||
expect(described_class.label(plan_slug: "premium_full", interval: "monthly")).to eq("€24,90/mese")
|
||||
end
|
||||
|
||||
it "elenca intervalli configurati" do
|
||||
expect(described_class.available_intervals(plan_slug: "premium_light")).to eq(%w[monthly yearly])
|
||||
end
|
||||
|
||||
@@ -38,6 +38,6 @@ RSpec.describe Billing::Stripe::RecordPayment do
|
||||
expect(payment.club).to eq(club)
|
||||
expect(payment.amount_cents).to eq(4000)
|
||||
expect(payment.stripe_invoice_id).to eq("in_test_1")
|
||||
expect(payment.description).to eq("Premium Light — €40/anno")
|
||||
expect(payment.description).to eq("Premium Light — €59/anno")
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user