From b4624672a5327f66374a449985d256f4192c70a3 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 2 Jul 2025 17:34:56 +0000 Subject: [PATCH] Add temporary test database handling for isolated test environments Co-authored-by: me --- .../03.resources/05.problem.linked/src/index.test.ts | 10 ++++++++++ .../03.resources/05.solution.linked/src/index.test.ts | 10 ++++++++++ .../03.resources/06.problem.embedded/src/index.test.ts | 10 ++++++++++ .../06.solution.embedded/src/index.test.ts | 10 ++++++++++ .../04.prompts/03.problem.completion/src/index.test.ts | 10 ++++++++++ .../03.solution.completion/src/index.test.ts | 10 ++++++++++ 6 files changed, 60 insertions(+) diff --git a/exercises/03.resources/05.problem.linked/src/index.test.ts b/exercises/03.resources/05.problem.linked/src/index.test.ts index dcdbfe1..ec5a81e 100644 --- a/exercises/03.resources/05.problem.linked/src/index.test.ts +++ b/exercises/03.resources/05.problem.linked/src/index.test.ts @@ -1,11 +1,16 @@ +import fs from 'node:fs/promises' +import path from 'node:path' import { invariant } from '@epic-web/invariant' import { Client } from '@modelcontextprotocol/sdk/client/index.js' import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js' import { test, beforeAll, afterAll, expect } from 'vitest' let client: Client +const EPIC_ME_DB_PATH = `./test.ignored/db.${process.env.VITEST_WORKER_ID}.sqlite` beforeAll(async () => { + const dir = path.dirname(EPIC_ME_DB_PATH) + await fs.mkdir(dir, { recursive: true }) client = new Client({ name: 'EpicMeTester', version: '1.0.0', @@ -13,12 +18,17 @@ beforeAll(async () => { const transport = new StdioClientTransport({ command: 'tsx', args: ['src/index.ts'], + env: { + ...process.env, + EPIC_ME_DB_PATH, + }, }) await client.connect(transport) }) afterAll(async () => { await client.transport?.close() + await fs.unlink(EPIC_ME_DB_PATH) }) test('Tool Definition', async () => { diff --git a/exercises/03.resources/05.solution.linked/src/index.test.ts b/exercises/03.resources/05.solution.linked/src/index.test.ts index 178c41d..cb2a53f 100644 --- a/exercises/03.resources/05.solution.linked/src/index.test.ts +++ b/exercises/03.resources/05.solution.linked/src/index.test.ts @@ -1,11 +1,16 @@ +import fs from 'node:fs/promises' +import path from 'node:path' import { invariant } from '@epic-web/invariant' import { Client } from '@modelcontextprotocol/sdk/client/index.js' import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js' import { test, beforeAll, afterAll, expect } from 'vitest' let client: Client +const EPIC_ME_DB_PATH = `./test.ignored/db.${process.env.VITEST_WORKER_ID}.sqlite` beforeAll(async () => { + const dir = path.dirname(EPIC_ME_DB_PATH) + await fs.mkdir(dir, { recursive: true }) client = new Client({ name: 'EpicMeTester', version: '1.0.0', @@ -13,12 +18,17 @@ beforeAll(async () => { const transport = new StdioClientTransport({ command: 'tsx', args: ['src/index.ts'], + env: { + ...process.env, + EPIC_ME_DB_PATH, + }, }) await client.connect(transport) }) afterAll(async () => { await client.transport?.close() + await fs.unlink(EPIC_ME_DB_PATH) }) test('Tool Definition', async () => { diff --git a/exercises/03.resources/06.problem.embedded/src/index.test.ts b/exercises/03.resources/06.problem.embedded/src/index.test.ts index 183ac55..3d3d438 100644 --- a/exercises/03.resources/06.problem.embedded/src/index.test.ts +++ b/exercises/03.resources/06.problem.embedded/src/index.test.ts @@ -1,11 +1,16 @@ +import fs from 'node:fs/promises' +import path from 'node:path' import { invariant } from '@epic-web/invariant' import { Client } from '@modelcontextprotocol/sdk/client/index.js' import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js' import { test, beforeAll, afterAll, expect } from 'vitest' let client: Client +const EPIC_ME_DB_PATH = `./test.ignored/db.${process.env.VITEST_WORKER_ID}.sqlite` beforeAll(async () => { + const dir = path.dirname(EPIC_ME_DB_PATH) + await fs.mkdir(dir, { recursive: true }) client = new Client({ name: 'EpicMeTester', version: '1.0.0', @@ -13,12 +18,17 @@ beforeAll(async () => { const transport = new StdioClientTransport({ command: 'tsx', args: ['src/index.ts'], + env: { + ...process.env, + EPIC_ME_DB_PATH, + }, }) await client.connect(transport) }) afterAll(async () => { await client.transport?.close() + await fs.unlink(EPIC_ME_DB_PATH) }) test('Tool Definition', async () => { diff --git a/exercises/03.resources/06.solution.embedded/src/index.test.ts b/exercises/03.resources/06.solution.embedded/src/index.test.ts index 2c0c5b4..d02c121 100644 --- a/exercises/03.resources/06.solution.embedded/src/index.test.ts +++ b/exercises/03.resources/06.solution.embedded/src/index.test.ts @@ -1,11 +1,16 @@ +import fs from 'node:fs/promises' +import path from 'node:path' import { invariant } from '@epic-web/invariant' import { Client } from '@modelcontextprotocol/sdk/client/index.js' import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js' import { test, beforeAll, afterAll, expect } from 'vitest' let client: Client +const EPIC_ME_DB_PATH = `./test.ignored/db.${process.env.VITEST_WORKER_ID}.sqlite` beforeAll(async () => { + const dir = path.dirname(EPIC_ME_DB_PATH) + await fs.mkdir(dir, { recursive: true }) client = new Client({ name: 'EpicMeTester', version: '1.0.0', @@ -13,12 +18,17 @@ beforeAll(async () => { const transport = new StdioClientTransport({ command: 'tsx', args: ['src/index.ts'], + env: { + ...process.env, + EPIC_ME_DB_PATH, + }, }) await client.connect(transport) }) afterAll(async () => { await client.transport?.close() + await fs.unlink(EPIC_ME_DB_PATH) }) test('Tool Definition', async () => { diff --git a/exercises/04.prompts/03.problem.completion/src/index.test.ts b/exercises/04.prompts/03.problem.completion/src/index.test.ts index 1cde8c8..b40258b 100644 --- a/exercises/04.prompts/03.problem.completion/src/index.test.ts +++ b/exercises/04.prompts/03.problem.completion/src/index.test.ts @@ -1,11 +1,16 @@ +import fs from 'node:fs/promises' +import path from 'node:path' import { invariant } from '@epic-web/invariant' import { Client } from '@modelcontextprotocol/sdk/client/index.js' import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js' import { test, beforeAll, afterAll, expect } from 'vitest' let client: Client +const EPIC_ME_DB_PATH = `./test.ignored/db.${process.env.VITEST_WORKER_ID}.sqlite` beforeAll(async () => { + const dir = path.dirname(EPIC_ME_DB_PATH) + await fs.mkdir(dir, { recursive: true }) client = new Client({ name: 'EpicMeTester', version: '1.0.0', @@ -13,12 +18,17 @@ beforeAll(async () => { const transport = new StdioClientTransport({ command: 'tsx', args: ['src/index.ts'], + env: { + ...process.env, + EPIC_ME_DB_PATH, + }, }) await client.connect(transport) }) afterAll(async () => { await client.transport?.close() + await fs.unlink(EPIC_ME_DB_PATH) }) test('Tool Definition', async () => { diff --git a/exercises/04.prompts/03.solution.completion/src/index.test.ts b/exercises/04.prompts/03.solution.completion/src/index.test.ts index 2c0c5b4..d02c121 100644 --- a/exercises/04.prompts/03.solution.completion/src/index.test.ts +++ b/exercises/04.prompts/03.solution.completion/src/index.test.ts @@ -1,11 +1,16 @@ +import fs from 'node:fs/promises' +import path from 'node:path' import { invariant } from '@epic-web/invariant' import { Client } from '@modelcontextprotocol/sdk/client/index.js' import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js' import { test, beforeAll, afterAll, expect } from 'vitest' let client: Client +const EPIC_ME_DB_PATH = `./test.ignored/db.${process.env.VITEST_WORKER_ID}.sqlite` beforeAll(async () => { + const dir = path.dirname(EPIC_ME_DB_PATH) + await fs.mkdir(dir, { recursive: true }) client = new Client({ name: 'EpicMeTester', version: '1.0.0', @@ -13,12 +18,17 @@ beforeAll(async () => { const transport = new StdioClientTransport({ command: 'tsx', args: ['src/index.ts'], + env: { + ...process.env, + EPIC_ME_DB_PATH, + }, }) await client.connect(transport) }) afterAll(async () => { await client.transport?.close() + await fs.unlink(EPIC_ME_DB_PATH) }) test('Tool Definition', async () => {