6 new tests bringing the supabase-provision suite to 28:
list-orphans:
- Filters to gbrain-prefixed projects, excludes the active-ref derived
from ~/.gbrain/config.json's pooler URL
- Treats all gbrain-prefixed projects as orphans when no config exists
(first run on a new machine)
- Respects custom --name-prefix for users who named their brain
something else
delete-project:
- Happy path sends DELETE /v1/projects/<ref> and returns {deleted_ref}
- 404 surfaces cleanly (exit 2, "404" in stderr)
- Missing <ref> positional rejected with exit 2
Uses per-test tmpdir HOME with a stubbed ~/.gbrain/config.json so
active-ref extraction runs against deterministic fixtures.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
22 tests covering D21 HTTP error suite (401/403/402/409/429/5xx) and
happy paths for all four subcommands. Every test spins up a Bun.serve
mock server bound to SUPABASE_API_BASE so nothing hits the real API.
Uses Bun.spawn (async) rather than spawnSync because spawnSync blocks
the Bun event loop, which prevents Bun.serve mocks from responding —
calls would hit curl's own timeout instead of round-tripping.
Verifies: POST body contains organization_slug (not organization_id)
and no `plan` field, bearer-token auth header, retry-on-429 with
eventual success, exit-8 on persistent 5xx after max retries, wait
succeeds on ACTIVE_HEALTHY, exits 7 on INIT_FAILED, exits 6 with
--resume-provision hint on timeout, pooler-url builds URL locally
from db_user/host/port/name + DB_PASS (not response connection_string
template), handles array pooler responses.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>