diff --git a/src/common/exportsManager.ts b/src/common/exportsManager.ts index 86b7cc57..f83b07ee 100644 --- a/src/common/exportsManager.ts +++ b/src/common/exportsManager.ts @@ -56,7 +56,7 @@ type StoredExport = ReadyExport | InProgressExport; * * Ref Cursor: https://forum.cursor.com/t/cursor-mcp-resource-feature-support/50987 * JIRA: https://jira.mongodb.org/browse/MCP-104 */ -type AvailableExport = Pick; +export type AvailableExport = Pick; export type ExportsManagerConfig = Pick; diff --git a/tests/unit/common/exportsManager.test.ts b/tests/unit/common/exportsManager.test.ts index 8ead40fb..264d3230 100644 --- a/tests/unit/common/exportsManager.test.ts +++ b/tests/unit/common/exportsManager.test.ts @@ -11,7 +11,7 @@ import { ExportsManager, validateExportName, } from "../../../src/common/exportsManager.js"; - +import type { AvailableExport } from "../../../src/common/exportsManager.js"; import { config } from "../../../src/common/config.js"; import { ROOT_DIR } from "../../accuracy/sdk/constants.js"; import { timeout } from "../../integration/helpers.js"; @@ -124,6 +124,15 @@ function timeoutPromise(timeoutMS: number, context: string): Promise { }); } +async function waitUntilThereIsAnExportAvailable(manager: ExportsManager): Promise { + return await vi.waitFor(() => { + const exports = manager.availableExports; + expect(exports.length).toBeGreaterThan(0); + + return exports; + }); +} + async function getExportAvailableNotifier( expectedExportURI: string, manager: ExportsManager, @@ -318,7 +327,8 @@ describe("ExportsManager unit test", () => { await cursorCloseNotification; // Updates available export - const availableExports = manager.availableExports; + // this is async code so we should wait and retry + const availableExports = await waitUntilThereIsAnExportAvailable(manager); expect(availableExports).toHaveLength(1); expect(availableExports).toContainEqual( expect.objectContaining({ @@ -352,7 +362,7 @@ describe("ExportsManager unit test", () => { const expectedExportName = exportName.endsWith(".json") ? exportName : `${exportName}.json`; // Updates available export - const availableExports = manager.availableExports; + const availableExports = await waitUntilThereIsAnExportAvailable(manager); expect(availableExports).toHaveLength(1); expect(availableExports).toContainEqual( expect.objectContaining({ @@ -387,7 +397,7 @@ describe("ExportsManager unit test", () => { const expectedExportName = exportName.endsWith(".json") ? exportName : `${exportName}.json`; // Updates available export - const availableExports = manager.availableExports; + const availableExports = await waitUntilThereIsAnExportAvailable(manager); expect(availableExports).toHaveLength(1); expect(availableExports).toContainEqual( expect.objectContaining({