68 route tests covering admin, merchant, store, and platform billing APIs.
Store tests use real JWT auth (router-level deps can't be overridden);
Stripe-dependent endpoints are mocked at the route module level.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 139 tests across 3 test files for the billing service layer:
- test_subscription_service.py (37 tests): tier lookup, subscription CRUD, upgrades, cancellation
- test_admin_subscription_service.py (39 tests): admin tier/subscription management, stats, billing history
- test_billing_service.py (43 tests): rewritten with correct fixtures after store→merchant migration
Fix production bug in deactivate_tier() — BusinessLogicException was missing
required error_code argument, now uses TIER_HAS_ACTIVE_SUBSCRIPTIONS.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move 42 single-module test files into app/modules/*/tests/ directories
while keeping 40 cross-module and infrastructure tests central in tests/.
Hub fixtures (engine, db, client, cleanup) moved to root conftest.py so
both tests/ and module tests inherit them. Update pyproject.toml testpaths
and Makefile TEST_PATHS to discover all test locations.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix admin tier change: resolve tier_code→tier_id in update_subscription(),
delegate to billing_service.change_tier() for Stripe-connected subs
- Add platform support to admin tiers page: platform column, filter dropdown,
platform selector in create/edit modal, platform_name in tier API response
- Filter used platforms in create subscription modal on merchant detail page
- Enrich merchant portal API responses with tier code, tier_name, platform_name
- Add eager-load of platform relationship in get_merchant_subscription()
- Remove stale store_name/store_code references from merchant templates
- Add merchant tier change endpoint (POST /change-tier) and tier selector UI
replacing broken requestUpgrade() button
- Fix subscription detail link to use platform_id instead of sub.id
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>