CluPilotCloud/tests/Feature/Billing
nexxo 2321854967
tests / pest (push) Failing after 8m17s Details
tests / assets (push) Successful in 19s Details
tests / release (push) Has been skipped Details
Discard an unconfirmed registration, and sweep the abandoned ones
"Abmelden und neu registrieren" was advice that could not work. Signing out
frees nothing: the address is still held by the unique index, so registering
again with the address somebody meant fails — and every abandoned attempt
stayed in `users` for ever. Reported exactly that way, and it was right.

The button discards the account instead. Only an UNCONFIRMED one, and only
one with nothing behind it: the webhook creates a customer's login from a
paid checkout, so a user can sit on this page unconfirmed while already
having a contract, and deleting that is data loss dressed up as a
convenience. It refuses and says where to go. A confirmed account is closed,
not discarded — that is ConfirmCloseAccount, with an invoice history behind
it.

R23: confirmed in a modal. The modal mutates nothing; it dispatches the event
the page listens for, so the checks stay in the one place they already are
rather than being duplicated where they could drift.

And nothing has to be discarded by hand. clupilot:prune-unverified removes
registrations nobody confirmed after five days — long enough for somebody who
signed up on a Friday and found the mail in a spam folder on Monday, short
enough that a typo does not hold the correct address for a month. It skips a
confirmed account whatever its age, and any account with a customer record
behind it, matched on user_id AND on the address, because either link means
somebody is a customer. Every removal is logged with the address: a line that
disappears is what somebody asks about later, and a count answers nothing.

The deadline is said on the page as well as in the mail. Somebody who never
received the mail is looking at the page, and the deadline is the reason they
do not have to do anything about an attempt they abandon.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 14:08:02 +02:00
..
AddonCancellationTest.php Ask whether they are a consumer, and let one change their mind 2026-07-29 21:06:06 +02:00
AddonEntitlementTest.php Book a downgrade for a date that cannot move, and sell a module once 2026-07-29 17:51:37 +02:00
ApplyPlanChangeTest.php Book a downgrade for a date that cannot move, and sell a module once 2026-07-29 17:51:37 +02:00
ArchivePullAccessTest.php Mint the archive collection key from the console instead of by hand 2026-07-29 10:08:32 +02:00
CustomDomainAccessTest.php Decide who may have their own domain, and decide it in one place 2026-07-29 15:59:04 +02:00
CustomerTypeTest.php Ask whether they are a consumer, and let one change their mind 2026-07-29 21:06:06 +02:00
ExportTargetFormTest.php Keep the SFTP credential on the row it belongs to, encrypted 2026-07-29 02:46:06 +02:00
FinanceSettingsTest.php Decide the VAT rate in one place, before the two disagree 2026-07-29 02:03:29 +02:00
GrantAddonTest.php Let a subscription or add-on be opened for free, with who and why on the row 2026-07-29 12:41:06 +02:00
GrantInvoiceTest.php Skip the invoice for a full gift, keep it out of revenue, hide its price 2026-07-29 12:41:32 +02:00
GrantSubscriptionTest.php Let a subscription or add-on be opened for free, with who and why on the row 2026-07-29 12:41:06 +02:00
InvoiceArchiveTest.php Leave the archive readable by whoever collects from it 2026-07-29 03:48:03 +02:00
InvoiceListTest.php List issued invoices in the console, with no way to change one 2026-07-29 02:21:15 +02:00
InvoiceMailTest.php Send the invoice with the invoice attached 2026-07-29 02:13:41 +02:00
InvoiceMathTest.php Print every line at full price and take the discount off once, in euros 2026-07-29 01:59:56 +02:00
InvoiceNumberTest.php Lay the foundation for self-issued invoices: series, numbers, frozen documents 2026-07-29 00:57:06 +02:00
IssueInvoiceTest.php Issue an invoice from what somebody bought, and freeze it there 2026-07-29 02:09:05 +02:00
PackageCancellationTest.php Stop charging for a service that has ended 2026-07-30 00:52:19 +02:00
PaidOrderFulfilmentTest.php Say the same thing to the customer, the register and the bank 2026-07-30 01:30:24 +02:00
PendingPlanChangeTest.php Say the same thing to the customer, the register and the bank 2026-07-30 01:30:24 +02:00
PlanCatalogueTest.php Paketversionen: Verkauf wieder aufnehmen und saubere Übergabe 2026-07-29 14:58:11 +02:00
PlanChangeTest.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
PortalInvoicesTest.php Say the same thing to the customer, the register and the bank 2026-07-30 01:30:24 +02:00
ProofRegisterTest.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
RenewalInvoiceTest.php Bill a booked module every month, and put it on the invoice 2026-07-29 20:22:02 +02:00
ReverseChargePriceTest.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
SetupFeeTest.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
StorageAllowanceTest.php Deliver the storage a customer actually buys 2026-07-29 19:13:10 +02:00
StripeAddonBillingTest.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
StripeBillingTest.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
StripePlanChangeTest.php Invoice every renewal, and tell Stripe when the package changes 2026-07-29 19:35:15 +02:00
VatIdVerificationTest.php Ask the EU register whether a VAT number is real 2026-07-29 22:42:29 +02:00
WithdrawalTest.php Stop charging for a service that has ended 2026-07-30 00:52:19 +02:00