Skip to content

Commit c29e4e8

Browse files
committed
fix(test): save/restore SENTRY_CONFIG_DIR in all test files
Extend the save/restore pattern to every test file that modifies process.env.SENTRY_CONFIG_DIR. Also move module-scope env var captures into beforeEach hooks so they read the value at hook time rather than at module evaluation time. Files fixed: - test/lib/api-client.test.ts - test/lib/api-client.seer.test.ts - test/lib/api-client.multiregion.test.ts - test/commands/issue/utils.test.ts - test/lib/dsn/cache.test.ts - test/lib/dsn/detector.test.ts - test/lib/config.test.ts (module-scope -> beforeEach) - test/lib/region.test.ts (module-scope -> beforeEach) - test/lib/db/concurrent.test.ts (module-scope -> beforeEach)
1 parent f299338 commit c29e4e8

File tree

9 files changed

+104
-19
lines changed

9 files changed

+104
-19
lines changed

test/commands/issue/utils.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ describe("buildCommandHint", () => {
4949

5050
let testConfigDir: string;
5151
let originalFetch: typeof globalThis.fetch;
52+
let savedConfigDir: string | undefined;
5253

5354
beforeEach(async () => {
55+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
5456
// Use isolateProjectRoot to prevent DSN detection from scanning the real project
5557
testConfigDir = await createTestConfigDir("test-issue-utils-", {
5658
isolateProjectRoot: true,
@@ -67,6 +69,11 @@ beforeEach(async () => {
6769

6870
afterEach(async () => {
6971
globalThis.fetch = originalFetch;
72+
if (savedConfigDir !== undefined) {
73+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
74+
} else {
75+
delete process.env[CONFIG_DIR_ENV_VAR];
76+
}
7077
await cleanupTestDir(testConfigDir);
7178
});
7279

test/lib/api-client.multiregion.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ import { cleanupTestDir, createTestConfigDir } from "../helpers.js";
2323

2424
let testConfigDir: string;
2525
let originalFetch: typeof globalThis.fetch;
26+
let savedConfigDir: string | undefined;
2627

2728
beforeEach(async () => {
29+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
2830
testConfigDir = await createTestConfigDir("test-multiregion-");
2931
process.env[CONFIG_DIR_ENV_VAR] = testConfigDir;
3032

@@ -42,6 +44,11 @@ afterEach(async () => {
4244
// Restore original fetch
4345
globalThis.fetch = originalFetch;
4446
closeDatabase();
47+
if (savedConfigDir !== undefined) {
48+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
49+
} else {
50+
delete process.env[CONFIG_DIR_ENV_VAR];
51+
}
4552
await cleanupTestDir(testConfigDir);
4653
});
4754

test/lib/api-client.seer.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ import { cleanupTestDir, createTestConfigDir } from "../helpers.js";
1818
// Test config directory
1919
let testConfigDir: string;
2020
let originalFetch: typeof globalThis.fetch;
21+
let savedConfigDir: string | undefined;
2122

2223
beforeEach(async () => {
24+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
2325
testConfigDir = await createTestConfigDir("test-seer-api-");
2426
process.env[CONFIG_DIR_ENV_VAR] = testConfigDir;
2527

@@ -35,6 +37,11 @@ beforeEach(async () => {
3537
afterEach(async () => {
3638
// Restore original fetch
3739
globalThis.fetch = originalFetch;
40+
if (savedConfigDir !== undefined) {
41+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
42+
} else {
43+
delete process.env[CONFIG_DIR_ENV_VAR];
44+
}
3845
await cleanupTestDir(testConfigDir);
3946
});
4047

test/lib/api-client.test.ts

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,12 @@ import { cleanupTestDir, createTestConfigDir } from "../helpers.js";
1414
// Test config directory
1515
let testConfigDir: string;
1616
let originalFetch: typeof globalThis.fetch;
17-
18-
/**
19-
* Tracks requests made during a test
20-
*/
21-
type RequestLog = {
22-
url: string;
23-
method: string;
24-
authorization: string | null;
25-
isRetry: boolean;
26-
};
17+
let savedConfigDir: string | undefined;
18+
let savedClientId: string | undefined;
2719

2820
beforeEach(async () => {
21+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
22+
savedClientId = process.env.SENTRY_CLIENT_ID;
2923
testConfigDir = await createTestConfigDir("test-api-");
3024
process.env[CONFIG_DIR_ENV_VAR] = testConfigDir;
3125

@@ -39,6 +33,25 @@ beforeEach(async () => {
3933
await setAuthToken("initial-token", 3600, "test-refresh-token");
4034
});
4135

36+
afterEach(async () => {
37+
// Restore original fetch
38+
globalThis.fetch = originalFetch;
39+
40+
// Restore env vars
41+
if (savedConfigDir !== undefined) {
42+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
43+
} else {
44+
delete process.env[CONFIG_DIR_ENV_VAR];
45+
}
46+
if (savedClientId !== undefined) {
47+
process.env.SENTRY_CLIENT_ID = savedClientId;
48+
} else {
49+
delete process.env.SENTRY_CLIENT_ID;
50+
}
51+
52+
await cleanupTestDir(testConfigDir);
53+
});
54+
4255
afterEach(async () => {
4356
// Restore original fetch
4457
globalThis.fetch = originalFetch;

test/lib/config.test.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,17 @@ import {
4848
* are still running. The parent test directory is cleaned up on
4949
* process exit by preload.ts.
5050
*/
51-
const testBaseDir = process.env[CONFIG_DIR_ENV_VAR]!;
51+
let savedConfigDir: string | undefined;
5252

5353
beforeEach(() => {
5454
// Close any previous database connection
5555
closeDatabase();
5656

57+
// Read the base dir at hook time (not module scope) to avoid race conditions
58+
// with other test files that may modify the env var during parallel execution
59+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
60+
const testBaseDir = process.env[CONFIG_DIR_ENV_VAR]!;
61+
5762
// Create a unique subdirectory for this test
5863
const testConfigDir = join(
5964
testBaseDir,
@@ -66,8 +71,12 @@ beforeEach(() => {
6671
afterEach(() => {
6772
// Close database to release file handles
6873
closeDatabase();
69-
// Note: We don't delete the test directory here because tests run in parallel.
70-
// The parent test directory is cleaned up on process exit by preload.ts.
74+
// Restore the original config dir set by preload.ts
75+
if (savedConfigDir !== undefined) {
76+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
77+
} else {
78+
delete process.env[CONFIG_DIR_ENV_VAR];
79+
}
7180
});
7281

7382
describe("auth token management", () => {
@@ -565,7 +574,7 @@ describe("getDbPath", () => {
565574
test("returns the database file path", () => {
566575
const path = getDbPath();
567576
expect(path).toContain("cli.db");
568-
expect(path).toContain(testBaseDir);
577+
expect(path).toContain(process.env[CONFIG_DIR_ENV_VAR]!);
569578
});
570579
});
571580

test/lib/db/concurrent.test.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import {
1919
import { getCachedProject } from "../../../src/lib/db/project-cache.js";
2020

2121
const WORKER_SCRIPT = join(import.meta.dir, "concurrent-worker.ts");
22-
const TEST_BASE_DIR = process.env[CONFIG_DIR_ENV_VAR]!;
2322

2423
type WorkerResult = {
2524
workerId: string;
@@ -89,11 +88,14 @@ async function spawnWorkersConcurrently(
8988

9089
describe("concurrent database access", () => {
9190
let testConfigDir: string;
91+
let savedConfigDir: string | undefined;
9292

9393
beforeEach(async () => {
9494
closeDatabase();
95+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
96+
const testBaseDir = process.env[CONFIG_DIR_ENV_VAR]!;
9597
testConfigDir = join(
96-
TEST_BASE_DIR,
98+
testBaseDir,
9799
`concurrent-${Date.now()}-${Math.random().toString(36).slice(2)}`
98100
);
99101
mkdirSync(testConfigDir, { recursive: true });
@@ -109,6 +111,11 @@ describe("concurrent database access", () => {
109111

110112
afterEach(() => {
111113
closeDatabase();
114+
if (savedConfigDir !== undefined) {
115+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
116+
} else {
117+
delete process.env[CONFIG_DIR_ENV_VAR];
118+
}
112119
});
113120

114121
test("multiple processes can write DSN cache entries simultaneously", async () => {

test/lib/dsn/cache.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,23 @@ import { CONFIG_DIR_ENV_VAR } from "../../../src/lib/db/index.js";
1818

1919
// Use a unique test config directory
2020
const TEST_CONFIG_DIR = join(homedir(), ".sentry-cli-test-cache");
21+
let savedConfigDir: string | undefined;
2122

2223
describe("DSN Cache", () => {
2324
beforeEach(() => {
2425
// Set up test config directory
26+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
2527
process.env[CONFIG_DIR_ENV_VAR] = TEST_CONFIG_DIR;
2628
mkdirSync(TEST_CONFIG_DIR, { recursive: true });
2729
});
2830

2931
afterEach(() => {
32+
// Restore config dir
33+
if (savedConfigDir !== undefined) {
34+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
35+
} else {
36+
delete process.env[CONFIG_DIR_ENV_VAR];
37+
}
3038
// Clean up test config directory
3139
try {
3240
rmSync(TEST_CONFIG_DIR, { recursive: true, force: true });

test/lib/dsn/detector.test.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,13 @@ const TEST_CONFIG_DIR = join(homedir(), ".sentry-cli-test-detector-config");
3939

4040
describe("DSN Detector (New Module)", () => {
4141
let testDir: string;
42+
let savedConfigDir: string | undefined;
43+
let savedSentryDsn: string | undefined;
4244

4345
beforeEach(async () => {
4446
testDir = createTempDir();
47+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
48+
savedSentryDsn = process.env.SENTRY_DSN;
4549
process.env[CONFIG_DIR_ENV_VAR] = TEST_CONFIG_DIR;
4650
mkdirSync(TEST_CONFIG_DIR, { recursive: true });
4751
// Clear any cached DSN for the test directory
@@ -51,7 +55,17 @@ describe("DSN Detector (New Module)", () => {
5155
});
5256

5357
afterEach(() => {
54-
delete process.env.SENTRY_DSN;
58+
// Restore env vars
59+
if (savedConfigDir !== undefined) {
60+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
61+
} else {
62+
delete process.env[CONFIG_DIR_ENV_VAR];
63+
}
64+
if (savedSentryDsn !== undefined) {
65+
process.env.SENTRY_DSN = savedSentryDsn;
66+
} else {
67+
delete process.env.SENTRY_DSN;
68+
}
5569
cleanupDir(testDir);
5670
cleanupDir(TEST_CONFIG_DIR);
5771
});

test/lib/region.test.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@ import {
1616
} from "../../src/lib/region.js";
1717
import { getSentryBaseUrl } from "../../src/lib/sentry-urls.js";
1818

19-
const testBaseDir = process.env[CONFIG_DIR_ENV_VAR]!;
19+
let savedConfigDir: string | undefined;
20+
let savedSentryUrl: string | undefined;
2021

2122
beforeEach(async () => {
2223
closeDatabase();
24+
savedConfigDir = process.env[CONFIG_DIR_ENV_VAR];
25+
savedSentryUrl = process.env.SENTRY_URL;
26+
const testBaseDir = process.env[CONFIG_DIR_ENV_VAR]!;
2327
const testConfigDir = join(
2428
testBaseDir,
2529
`region-resolve-${Math.random().toString(36).slice(2)}`
@@ -34,7 +38,16 @@ beforeEach(async () => {
3438

3539
afterEach(() => {
3640
closeDatabase();
37-
delete process.env.SENTRY_URL;
41+
if (savedConfigDir !== undefined) {
42+
process.env[CONFIG_DIR_ENV_VAR] = savedConfigDir;
43+
} else {
44+
delete process.env[CONFIG_DIR_ENV_VAR];
45+
}
46+
if (savedSentryUrl !== undefined) {
47+
process.env.SENTRY_URL = savedSentryUrl;
48+
} else {
49+
delete process.env.SENTRY_URL;
50+
}
3851
});
3952

4053
describe("getSentryBaseUrl", () => {

0 commit comments

Comments
 (0)