Fix retry processor schema/code bugs and align retry tests
Real bugs surfaced by the retry tests (code referenced schema that did not
exist / wrong table):
- subscriptions was missing cancelled_at (written when a renewal exhausts its
retries and cancels the subscription).
- payment_retry_queue was missing last_attempt_at (written when scheduling the
next retry).
- retry.py queried a non-existent `tiers` table for the free tier; corrected to
account_tiers (and is_default = 1 for cross-DB boolean compatibility).
Migration changes add the two columns to the CREATE statements and provide
idempotent, cross-DB (SQLite PRAGMA / MySQL INFORMATION_SCHEMA) ALTERs for
existing databases.
test_retry: crypto retries are intentionally skipped without incrementing while
the wallet is unfunded, so the increment/downgrade tests now drive a failing
gateway charge instead, and expect the same free tier the code selects.
Verified all payment migration DDL (CREATE + new ALTERs + INFORMATION_SCHEMA
existence checks) executes cleanly on MariaDB/MySQL as well as SQLite.
Co-Authored-By:
Claude Opus 4.8 <noreply@anthropic.com>
Showing
Please
register
or
sign in
to comment