import { describe, expect, test } from 'bun:test' import { formatReachabilityFailureDetail } from './system-check.ts' describe('formatReachabilityFailureDetail', () => { test('returns generic failure detail for non-codex transport', () => { const detail = formatReachabilityFailureDetail( 'https://api.openai.com/v1/models', 429, '{"error":"rate_limit"}', { transport: 'chat_completions', requestedModel: 'gpt-4o', resolvedModel: 'gpt-4o', }, ) expect(detail).toBe( 'Unexpected status 429 from https://api.openai.com/v1/models. Body: {"error":"rate_limit"}', ) }) test('redacts credentials and sensitive query parameters in endpoint details', () => { const detail = formatReachabilityFailureDetail( 'http://user:pass@localhost:11434/v1/models?token=abc123&mode=test', 502, 'bad gateway', { transport: 'chat_completions', requestedModel: 'llama3.1:8b', resolvedModel: 'llama3.1:8b', }, ) expect(detail).toBe( 'Unexpected status 502 from http://redacted:redacted@localhost:11434/v1/models?token=redacted&mode=test. Body: bad gateway', ) }) test('adds alias/entitlement hint for codex model support 400s', () => { const detail = formatReachabilityFailureDetail( 'https://chatgpt.com/backend-api/codex/responses', 400, '{"detail":"The \\"gpt-5.3-codex-spark\\" model is not supported when using Codex with a ChatGPT account."}', { transport: 'codex_responses', requestedModel: 'codexspark', resolvedModel: 'gpt-5.3-codex-spark', }, ) expect(detail).toContain( 'model alias "codexspark" resolved to "gpt-5.3-codex-spark"', ) expect(detail).toContain( 'Try "codexplan" or another entitled Codex model.', ) }) })