whisper-money/tests/Feature/Settings
Víctor Falcón 2bfb569a22
fix(account): block deletion while subscription or trial is active (#531)
## Problem

Self-deleting an account via **Settings → Delete account** only called
`markAsDeleted()`. It never checked or cancelled the Stripe
subscription, so a user could delete their account while still
subscribed and **keep getting billed** afterwards. The `user:delete` CLI
command already cancelled the subscription, but the web path never got
that logic.

## Fix

Block account deletion while the user is **on a trial** or holds a
**valid, uncancelled subscription**, and direct them to cancel via the
billing portal first.

- `User::hasActiveSubscriptionOrTrial()` — true on a trial or a
`valid()` subscription; **grace-period** (already-cancelled)
subscriptions are excluded since they won't re-bill, so deletion is
still allowed.
- `ProfileController::destroy()` — rejects with a `subscription` error
before deleting (server-side guard, also covers non-UI calls).
- Delete-account page now receives `hasActiveSubscriptionOrTrial`; when
set, the UI shows a warning + **Manage billing** link and hides the
delete dialog.
- Spanish translations added for the two new strings.

The `user:delete` CLI is unchanged — it keeps its
auto-cancel-with-confirmation flow for admin use.

## Tests

- Active subscription → deletion blocked
- Trialing subscription → deletion blocked
- Grace-period (cancelled) subscription → deletion allowed
- Delete-account page exposes the flag (true/false)

All passing locally, alongside Pint / Prettier / ESLint.
2026-06-14 20:46:44 +02:00
..
AccountPageTest.php Reorganize setting items 2025-11-07 18:23:08 +00:00
AccountTest.php feat(currencies): add Colombian and Dominican peso (#471) 2026-06-01 18:14:16 +02:00
BankTest.php refactor(api): standardize serialization via model $hidden (#492) 2026-06-05 13:57:34 +02:00
BudgetSettingsRedirectTest.php fix(settings): restore budgets settings redirect (#228) 2026-03-16 13:04:08 +01:00
CategoryTest.php refactor(api): standardize serialization via model $hidden (#492) 2026-06-05 13:57:34 +02:00
CategoryTreeTest.php feat: parent/child category tree (#474) 2026-06-03 19:30:12 +02:00
ChartColorSchemeTest.php fix: route new PWA guests to signup (#313) 2026-04-21 10:53:05 +01:00
DeleteAccountPageTest.php fix(account): block deletion while subscription or trial is active (#531) 2026-06-14 20:46:44 +02:00
NetWorthChartLoanPreferenceTest.php fix: route new PWA guests to signup (#313) 2026-04-21 10:53:05 +01:00
NetWorthChartRealEstatePreferenceTest.php fix: route new PWA guests to signup (#313) 2026-04-21 10:53:05 +01:00
NotificationPreferenceTest.php feat(settings): let users disable bank transactions email (#472) 2026-06-02 12:24:39 +02:00
PasswordUpdateTest.php E2E Encryption 2025-11-07 14:21:25 +00:00
ProfileUpdateTest.php fix(account): block deletion while subscription or trial is active (#531) 2026-06-14 20:46:44 +02:00
TimezoneTest.php fix: route new PWA guests to signup (#313) 2026-04-21 10:53:05 +01:00
TwoFactorAuthenticationTest.php E2E Encryption 2025-11-07 14:21:25 +00:00