Files
MatchLiveTv/scripts/test_billing_intervals.sh
Emiliano Frascaro a5e781729c Billing: fatture manuali, profilo obbligatorio e piani Stripe mensile/annuale.
Rimuove link al portale Stripe in area cliente, aggiunge flusso admin per PDF
fattura e email, blocca checkout senza dati di fatturazione, allinea prezzi
a €4,90/€39,90 e €9,90/€69,90, locale italiano e documentazione deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:10:12 +02:00

84 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Test scelta mensile/annuale + redirect Checkout con price id corretto
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
COMPOSE="docker compose -f $ROOT/infra/docker-compose.yml"
BASE="${BASE_URL:-http://localhost:3000}"
COOKIES=$(mktemp)
trap 'rm -f "$COOKIES"' EXIT
pass=0
fail=0
ok() { echo "OK $1"; pass=$((pass+1)); }
ko() { echo "FAIL $1"; fail=$((fail+1)); }
read_env() {
grep -E "^$1=" "$ROOT/infra/.env" 2>/dev/null | head -1 | cut -d= -f2- | tr -d '\r' || true
}
YEARLY_LIGHT=$(read_env STRIPE_PREMIUM_LIGHT_YEARLY_PRICE_ID)
[[ -z "$YEARLY_LIGHT" ]] && YEARLY_LIGHT=$(read_env STRIPE_PREMIUM_LIGHT_PRICE_ID)
MONTHLY_LIGHT=$(read_env STRIPE_PREMIUM_LIGHT_MONTHLY_PRICE_ID)
login() {
curl -sf -c "$COOKIES" "$BASE/login" -o /tmp/mltv_login.html
T=$(grep -oP 'name="authenticity_token" value="\K[^"]+' /tmp/mltv_login.html | head -1)
curl -sf -c "$COOKIES" -b "$COOKIES" -X POST "$BASE/login" \
-d "authenticity_token=$T" -d "email=coach@matchlivetv.test" -d "password=password123" -o /dev/null
}
echo "== Test intervalli billing =="
$COMPOSE exec -T rails bundle exec rails db:migrate >/dev/null 2>&1 || true
$COMPOSE exec -T rails bundle exec rails runner "
club = Club.first
club.update!(
billing_legal_name: 'ASD Test', billing_email: 'bill@test.it',
billing_address_line: 'Via 1', billing_city: 'Milano', billing_postal_code: '20100',
billing_vat_number: '12345678901', billing_recipient_code: 'ABCDEFG'
)
sub = club.subscription || club.create_subscription!(plan: Plan['free'], status: 'active')
sub.update!(plan: Plan['free'], stripe_subscription_id: nil, billing_interval: nil)
puts club.id
" >/dev/null 2>&1 && ok "setup club billing" || ko "setup club billing"
CLUB_ID=$($COMPOSE exec -T rails bundle exec rails runner "puts Club.first.id" 2>/dev/null | tail -1)
login && ok "login" || ko "login"
BODY=$(curl -sf -b "$COOKIES" "$BASE/clubs/$CLUB_ID/billing")
echo "$BODY" | grep -q "Attiva Premium Light — €40/anno" && ok "UI bottone annuale Light" || ko "UI bottone annuale Light"
if [[ -n "$MONTHLY_LIGHT" ]]; then
echo "$BODY" | grep -q "Attiva Premium Light — €5/mese" && ok "UI bottone mensile Light" || ko "UI bottone mensile Light"
else
echo "$BODY" | grep -q "€5/mese" && ko "UI mensile assente se non configurato" || ok "UI mensile nascosto (price id mancante)"
fi
if [[ -n "$YEARLY_LIGHT" ]]; then
HEADERS=$(curl -s -D - -o /dev/null -b "$COOKIES" "$BASE/clubs/$CLUB_ID/checkout?plan=premium_light&interval=yearly" | tr -d '\r')
if echo "$HEADERS" | grep -qi "location:.*checkout\.stripe\.com"; then
ok "redirect checkout annuale"
else
ko "redirect checkout annuale"
fi
PRICE_USED=$($COMPOSE exec -T rails bundle exec rails runner "
puts Billing::Stripe::PriceCatalog.price_id(plan_slug: 'premium_light', interval: 'yearly')
" 2>/dev/null | tail -1)
[[ "$PRICE_USED" == "$YEARLY_LIGHT" ]] && ok "price id annuale corretto ($PRICE_USED)" || ko "price id annuale ($PRICE_USED vs $YEARLY_LIGHT)"
fi
$COMPOSE exec -T rails bundle exec rspec \
spec/services/billing/stripe/price_catalog_spec.rb \
spec/services/billing/stripe/checkout_session_spec.rb \
spec/services/billing/stripe/change_plan_spec.rb \
spec/helpers/public/billing_helper_spec.rb \
--format progress 2>&1 | tail -3
RS=$?
[[ $RS -eq 0 ]] && ok "RSpec billing intervals" || ko "RSpec billing intervals"
echo ""
echo "Risultato: $pass OK, $fail FAIL"
[[ "$fail" -eq 0 ]]