From cf61613f6895833d1e56bc0299f71f475084f873 Mon Sep 17 00:00:00 2001 From: B <6723574+louisgv@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:47:03 +0000 Subject: [PATCH] fix(tests): prevent telemetry singleton from polluting parallel test fetch mocks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The telemetry module's `_enabled` flag persists across parallel test files when `telemetry.test.ts` calls `initTelemetry()` (which deletes BUN_ENV/NODE_ENV guards). This causes `logWarn` → `captureWarning` → `sendEvent` → `fetch()` to fire unexpected calls through other tests' `global.fetch` mocks, breaking callCount-based assertions in `hetzner-cov.test.ts` and `digitalocean-token.test.ts`. Fix: - Add runtime env guard in `sendEvent()` so telemetry never fires in test env - Set `SPAWN_TELEMETRY=0` in test preload as defense-in-depth Agent: code-health Co-Authored-By: Claude Sonnet 4.5 --- packages/cli/package.json | 1 + packages/cli/src/__tests__/preload.ts | 4 ++++ packages/cli/src/shared/telemetry.ts | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/packages/cli/package.json b/packages/cli/package.json index d7b76af09..c293c0638 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,5 +1,6 @@ { "name": "@openrouter/spawn", + "version": "1.0.36", "type": "module", "bin": { diff --git a/packages/cli/src/__tests__/preload.ts b/packages/cli/src/__tests__/preload.ts index 7251c247d..9e229afec 100644 --- a/packages/cli/src/__tests__/preload.ts +++ b/packages/cli/src/__tests__/preload.ts @@ -60,6 +60,10 @@ cleanupStrayTestFiles(); const TEST_HOME = mkdtempSync(join(tmpdir(), "spawn-test-home-")); +// Disable telemetry in tests to prevent fire-and-forget fetch calls from +// interfering with other test files' global.fetch mocks. +process.env.SPAWN_TELEMETRY = "0"; + // Redirect all user-directory env vars to the isolated temp process.env.HOME = TEST_HOME; process.env.XDG_CACHE_HOME = join(TEST_HOME, ".cache"); diff --git a/packages/cli/src/shared/telemetry.ts b/packages/cli/src/shared/telemetry.ts index f9d45dde4..3c458142b 100644 --- a/packages/cli/src/shared/telemetry.ts +++ b/packages/cli/src/shared/telemetry.ts @@ -242,6 +242,11 @@ export function captureError(type: string, err: unknown): void { /** Send a single event to PostHog immediately. Fire-and-forget. */ function sendEvent(event: string, properties: Record): void { + // Re-check at send time — guards against singleton state leaking in tests + // where initTelemetry() was called with _enabled=true but env was later restored. + if (process.env.BUN_ENV === "test" || process.env.NODE_ENV === "test" || process.env.SPAWN_TELEMETRY === "0") { + return; + } const body = JSON.stringify({ api_key: POSTHOG_TOKEN, batch: [