Conversation
There was a problem hiding this comment.
Pull request overview
Adds unit + integration test scaffolding for the upcoming mongodb-mcp-remote wrapper package, aligning it with the repo’s existing Vitest/CI tooling and providing an in-process mock remote MCP server for deterministic end-to-end testing.
Changes:
- Introduces placeholder unit/integration tests plus an in-process mock remote server (token +
/mcpendpoints, SSE/JSON response modes). - Wires the new package into repo tooling (compile-on-test, Knip entry points, dependency updates).
- Documents how to run the wrapper package tests.
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| pnpm-lock.yaml | Adds new dev dependencies for the wrapper package test scaffolding. |
| packages/mongodb-mcp-remote/tsconfig.json | Excludes src/testHelpers/** from build output to keep test helpers out of dist. |
| packages/mongodb-mcp-remote/src/wrapper.integration.test.ts | Adds integration-test harness + initial mock-remote healthcheck test and it.todo placeholders. |
| packages/mongodb-mcp-remote/src/tokenManager.test.ts | Adds unit-test skeleton for a future token manager with timer cleanup conventions. |
| packages/mongodb-mcp-remote/src/testHelpers/mockRemote.ts | Implements an in-process mock remote MCP server + token endpoint for deterministic integration tests. |
| packages/mongodb-mcp-remote/package.json | Adds pretest compile step and test-time dependencies used by the scaffolding. |
| knip.json | Adds wrapper workspace entry points so dependency checks include tests + helpers. |
| CONTRIBUTING.md | Documents how to run wrapper package tests and what unit vs integration tests do. |
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
manupedrozo
left a comment
There was a problem hiding this comment.
Nice!
Instead of using express for mocking the remote server, I would avoid that dependency (even if just for testing) and use Node's http module which should be more than enough.
I created a branch moving to the http module here: c97c24f
WDYT? Feel free to bring those changes over if aligned.
Besides that, scaffolding looks good. Once the core logic is in place I'll adjust the assumptions accordingly.
|
Done, also scoped |
Stand up the wrapper package's offline test tiers, reusing the repo's Vitest setup (auto-discovered by the existing run-tests CI job, no workflow change): - Unit scaffold (tokenManager.test.ts) — network-mocked, it.todo for MCP-539. - Integration harness: an in-process fake remote MCP server (src/testHelpers/fakeRemote.ts, excluded from dist) driven via the MCP SDK client over a spawned wrapper (WRAPPER_CLI_PATH override); one live sanity test plus it.todo scenarios for MCP-539. - Add @modelcontextprotocol/sdk, express, @types/express devDeps + pretest compile so dist/cli.js exists for the harness. - Document wrapper unit/integration testing in CONTRIBUTING.md. Builds and runs green without any wrapper logic (cli.ts is still a stub).
…upport SSE+JSON (MCP-538) - Rename the test double from 'fake' to 'mock' (file, type, function, literals). - Rewrite comments in plain language; add a reason to the eslint-disable. - Mock remote now defaults to SSE (matching cloud-dev per MCP-542) with a responseMode: 'json' option; notifications return 202.
Replace the ASCII diagram with a short verbal description of how the integration tests are wired.
- Replace express with node:http in mockRemote.ts - Scope Mcp-Session-Id header to initialize response only - Wire transport.close() into client.close() in connectClientToWrapper - Remove MDB_MCP_REMOTE_URL from test env (derived from base URL internally) - Remove oauth4webapi scaffolding from tokenManager.test.ts
| }, | ||
| "scripts": { | ||
| "compile": "tsc --project tsconfig.json", | ||
| "pretest": "pnpm compile", |
There was a problem hiding this comment.
Not sure if it's correctly setup but vitest shouldn't need typescript compilation so this should hopefully not be necessary.
There was a problem hiding this comment.
integration tests spawn dist/cli.js, so compilation is required
| import { describe, it, beforeEach, afterEach, vi } from "vitest"; | ||
|
|
||
| /** | ||
| * TODO: every test here is `it.todo` until the token manager exists in |
There was a problem hiding this comment.
not sure I see much benefit in committing files like this; can we defer this to when these tests actually should be added?
Documentation for tests we're planning to add can be in Jira; we generally commit ready code and avoid commented out or incomplete functions
There was a problem hiding this comment.
It's also hard to review a helper function without actually seeing how it's used.
| // eslint-disable-next-line @typescript-eslint/no-unused-vars -- not called yet; the it.todo tests below will use it (remove once MCP-539 enables them) | ||
| async function connectClientToWrapper(remote: MockRemote): Promise<Client> { |
There was a problem hiding this comment.
similar idea, I don't think we should be adding dead code to the codebase, it's too easy for this to end up lost a couple handovers later
| "@mongodb-js/devtools-proxy-support": "^0.7.14" | ||
| }, | ||
| "devDependencies": { | ||
| "@modelcontextprotocol/sdk": "^1.29.0", |
There was a problem hiding this comment.
Can we move the tests to use 2.0?
There was a problem hiding this comment.
I can migrate when working on tests otherwise.
…mote package (MCP-538) Package was renamed from mongodb-mcp-remote to mongodb-atlas-mcp-remote in main. Move test files and test helper to match, update knip.json entry and CONTRIBUTING.md references.
…tion (MCP-538) The rebase conflict resolution left packages/mongodb-atlas-mcp-remote referencing @modelcontextprotocol/sdk@1.29.0(zod@4.4.3) in the importer section, but that snapshot was removed and replaced with the @cfworker/json-schema peer-dep form. pnpm --frozen-lockfile could not resolve the dangling reference, causing all CI install steps to fail.
This was unintentionally added during the rebase; removing it so that failures on stable Node versions block the PR as expected.
Sets up the test foundation (MCP-538) for the new mongodb-mcp-remote wrapper package, on the repo's existing Vitest setup. The wrapper itself (MCP-536) and the test bodies (MCP-539) come later — this PR adds the structure and a working mock.
Proposed changes
Ticket: MCP-538
Out of scope: wrapper implementation (MCP-536), test bodies (MCP-539), cloud-dev e2e + CI secrets (separate PR).
Checklist