CluPilotCloud/tests/Feature/Billing
nexxo d4f534fbbb Interne Pakete gehören nicht nach Stripe
stripe:sync-catalogue überspringt jetzt jede Familie mit internal = true —
weder Produkt noch Preis, im Trockenlauf wie im echten Lauf, und zwar bevor
irgendetwas über sie gelesen oder geschrieben wird. Ein Stripe-Preis lässt
sich nicht löschen, nur archivieren, und ein Paket, das nie über Stripe
abgerechnet wird, gehört deshalb nicht ins Konto. Eine Familie, die bereits
Stripe-IDs trägt (verkäuflich war, jetzt intern ist, wie Enterprise), bleibt
unangetastet: nichts wird gelöscht oder ersetzt, es kommt nur nichts Neues
mehr hinzu.

BillingChecks::billing.catalogue_synced bekam dieselbe Ausnahme — sonst wäre
die Bereitschaftsseite durch genau diese Änderung dauerhaft rot geworden,
weil das interne Testpaket und Enterprise veröffentlicht und sales_enabled
sind, ihre Preise aber nie synchronisiert werden.

AddonPrices, SyncStripeAddonItems, stripe:reprice-subscriptions und
stripe:sweep-orphan-prices wurden geprüft: alle vier sind bereits sicher,
weil ein verschenkter Vertrag nie ein stripe_subscription_id trägt und die
anderen beiden Befehle nur über vorhandene Stripe-Objekte laufen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 18:31:37 +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 Refuse the sale instead of reaching Stripe without a key 2026-07-30 11:58:01 +02:00
ApplyPlanChangeTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
ArchivePullAccessTest.php Stripe-Client: offene Rechnungen listen und einziehen 2026-07-31 20:04:09 +02:00
CustomDomainAccessTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
CustomerTypeTest.php Ask whether they are a consumer, and let one change their mind 2026-07-29 21:06:06 +02:00
DunningControlsTest.php Mahnwesen: Einstellungen und die zwei Eingriffe von Hand 2026-07-31 22:43:52 +02:00
DunningFixRoundTest.php Zweite Fix-Runde: Regressionen der ersten (Trockenlauf, Doppelmail, Bestand, Isolierung) 2026-07-31 23:02:13 +02:00
DunningFoundationTest.php Mahnwesen: Fall, Zeitplan und Gebuehrenstufen 2026-07-31 21:51:42 +02:00
DunningMailTest.php Fix-Runde: Reichweite der Sperre, keine doppelte Gebuehr, verlorene Nachricht 2026-07-31 22:57:56 +02:00
DunningRunTest.php Mahnwesen: Tageslauf mit Gebuehrenrechnungen 2026-07-31 22:13:52 +02:00
DunningSuspensionTest.php Fix-Runde: Reichweite der Sperre, keine doppelte Gebuehr, verlorene Nachricht 2026-07-31 22:57:56 +02:00
ExportTargetFormTest.php Stripe-Client: offene Rechnungen listen und einziehen 2026-07-31 20:04:09 +02:00
FinanceSettingsTest.php Stripe-Client: offene Rechnungen listen und einziehen 2026-07-31 20:04:09 +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
InternalPlanTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
InvoiceArchiveTest.php Stripe-Client: offene Rechnungen listen und einziehen 2026-07-31 20:04:09 +02:00
InvoiceListTest.php Stripe-Client: offene Rechnungen listen und einziehen 2026-07-31 20:04:09 +02:00
InvoiceMailTest.php Stripe-Client: offene Rechnungen listen und einziehen 2026-07-31 20:04:09 +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 Stripe-Client: offene Rechnungen listen und einziehen 2026-07-31 20:04:09 +02:00
NewPlanLadderTest.php Schalter je Paket, ehrliche Statusanzeige, Reste der alten Leiter 2026-08-01 17:53:06 +02:00
OpenInvoiceClientTest.php Offene Rechnungen bis zum Ende blaettern (Codex P2) 2026-07-31 20:58:21 +02:00
PackageCancellationTest.php Take the address by field, fix the customer type, ask why they leave 2026-07-30 16:41:32 +02:00
PaidOrderFulfilmentTest.php Refuse the sale instead of reaching Stripe without a key 2026-07-30 11:58:01 +02:00
PaymentMethodClientTest.php Stripe-Client: SetupIntent und Vorgabe-Zahlungsmittel 2026-07-31 20:01:14 +02:00
PaymentProblemsTest.php R20: Begruendung im Modal, und der Waechter sieht jetzt auch Listenzeilen 2026-07-31 22:09:05 +02:00
PendingPlanChangeTest.php Refuse the sale instead of reaching Stripe without a key 2026-07-30 11:58:01 +02:00
PlanCatalogueTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
PlanChangeTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
PortalInvoicesTest.php Release v1.3.83 — Fortschritt zeigte Übersetzungsschlüssel 2026-08-01 02:08:28 +02:00
ProofRegisterTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
RenewalInvoiceTest.php Bill a booked module every month, and put it on the invoice 2026-07-29 20:22:02 +02:00
ResolveInModalTest.php R20: Begruendung im Modal, und der Waechter sieht jetzt auch Listenzeilen 2026-07-31 22:09:05 +02:00
ReverseChargePriceTest.php Interne Pakete gehören nicht nach Stripe 2026-08-01 18:31:37 +02:00
SetupFeeTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
StorageAllowanceTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
StoragePackCapacityTest.php Kapazitaetspruefung hinter den Idempotenz-Kurzschluss verschoben 2026-08-01 14:18:01 +02:00
StoragePackLimitTest.php Deckel haelt auch am Rand: Warenkorb und Bestaetigungsdialog 2026-08-01 13:50:07 +02:00
StoragePackPricingTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
StoragePackSizeTest.php Die Packungsgroesse steht auf der Buchung, nicht in der Konfiguration 2026-08-01 12:25:30 +02:00
StripeAddonBillingTest.php Zusatzspeicher: 20 GB fuer 15 Euro, hoechstens drei, nicht bei Enterprise 2026-08-01 15:09:02 +02:00
StripeBillingTest.php Interne Pakete gehören nicht nach Stripe 2026-08-01 18:31:37 +02:00
StripeCatalogueModeTest.php Never tell anyone to delete a catalogue their contracts bill on 2026-07-30 17:30:56 +02:00
StripeIdempotencyKeyTest.php Merge main into the host-takeover branch 2026-07-30 21:21:45 +02:00
StripePlanChangeTest.php Invoice every renewal, and tell Stripe when the package changes 2026-07-29 19:35:15 +02:00
StripePriceAdoptionTest.php Say what the sweep did not check, before telling anyone to archive 2026-07-30 19:12:57 +02:00
StripeProductAdoptionTest.php Interne Pakete gehören nicht nach Stripe 2026-08-01 18:31:37 +02:00
SweepOrphanPricesTest.php Name the recurring filter, and stop the spec contradicting itself 2026-07-30 19:24:18 +02:00
VatIdVerificationTest.php Ask the EU register whether a VAT number is real 2026-07-29 22:42:29 +02:00
WithdrawalTest.php Hetzner-Cloud-DNS, Bereitschaftsseite aus sich heraus behebbar 2026-07-31 19:50:01 +02:00
YearlyTermTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00