test: skip the live Frankfurter fetch so FX moves can't shift assertions

Mirrors the pricing guard: CODEBURN_FX_NO_FETCH short-circuits getExchangeRate
after the cache read and before the fetch, returning the same USD-equivalent
rate an unreachable network already yields. Tests that seed their own
exchange-rate.json (serve-stdio's EUR case) keep working unchanged.
This commit is contained in:
iamtoruk 2026-08-21 02:23:41 -07:00
parent 4866332b91
commit 577ff0b9ee
2 changed files with 8 additions and 0 deletions

View file

@ -114,6 +114,11 @@ async function getExchangeRate(code: string): Promise<number> {
const cached = await loadCachedRate(code)
if (cached) return cached
// Test-only escape hatch, set for the whole suite in
// tests/setup/env-isolation.ts: skip the live Frankfurter fetch so a real FX
// move can't shift assertions. Same fallback an unreachable network gets.
if (process.env['CODEBURN_FX_NO_FETCH']) return 1
let rate: number
try {
rate = await fetchRate(code)

View file

@ -110,6 +110,9 @@ function applyIsolation(): void {
// fetches the live upstream table, so a mid-week reprice by a provider turns
// pricing assertions red with no local change.
process.env['CODEBURN_PRICING_SNAPSHOT_ONLY'] = '1'
// Same for FX: skip the live Frankfurter fetch and fall back to the
// USD-equivalent rate unless a test seeds its own exchange-rate.json cache.
process.env['CODEBURN_FX_NO_FETCH'] = '1'
// Pin the timezone so date grouping is deterministic regardless of the dev's
// shell TZ. Clearing it is not enough (Node falls back to the OS zone); a
// non-UTC TZ would otherwise shift day buckets versus a clean CI runner. A