test(e2e): isolate module mocks across harnesses

This commit is contained in:
Peter Steinberger
2026-03-03 05:51:31 +00:00
parent 1d7a287cf6
commit fe92113472
4 changed files with 41 additions and 22 deletions

View File

@@ -118,14 +118,18 @@ vi.mock("./tools/agent-step.js", () => ({
readLatestAssistantReply: readLatestAssistantReplyMock, readLatestAssistantReply: readLatestAssistantReplyMock,
})); }));
vi.mock("../config/sessions.js", () => ({ vi.mock("../config/sessions.js", async (importOriginal) => {
loadSessionStore: vi.fn(() => loadSessionStoreFixture()), const actual = await importOriginal<typeof import("../config/sessions.js")>();
resolveAgentIdFromSessionKey: () => "main", return {
resolveStorePath: () => "/tmp/sessions.json", ...actual,
resolveMainSessionKey: () => "agent:main:main", loadSessionStore: vi.fn(() => loadSessionStoreFixture()),
readSessionUpdatedAt: vi.fn(() => undefined), resolveAgentIdFromSessionKey: () => "main",
recordSessionMetaFromInbound: vi.fn().mockResolvedValue(undefined), resolveStorePath: () => "/tmp/sessions.json",
})); resolveMainSessionKey: () => "agent:main:main",
readSessionUpdatedAt: vi.fn(() => undefined),
recordSessionMetaFromInbound: vi.fn().mockResolvedValue(undefined),
};
});
vi.mock("./pi-embedded.js", () => embeddedRunMock); vi.mock("./pi-embedded.js", () => embeddedRunMock);

View File

@@ -83,11 +83,15 @@ vi.mock("@grammyjs/transformer-throttler", () => ({
vi.mock("../media/store.js", async (importOriginal) => { vi.mock("../media/store.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../media/store.js")>(); const actual = await importOriginal<typeof import("../media/store.js")>();
return { const mockModule = Object.create(null) as Record<string, unknown>;
...actual, Object.defineProperties(mockModule, Object.getOwnPropertyDescriptors(actual));
saveMediaBuffer: (...args: Parameters<typeof saveMediaBufferSpy>) => Object.defineProperty(mockModule, "saveMediaBuffer", {
saveMediaBufferSpy(...args), configurable: true,
}; enumerable: true,
writable: true,
value: (...args: Parameters<typeof saveMediaBufferSpy>) => saveMediaBufferSpy(...args),
});
return mockModule;
}); });
vi.mock("../config/config.js", async (importOriginal) => { vi.mock("../config/config.js", async (importOriginal) => {

View File

@@ -64,14 +64,23 @@ vi.mock("../../config/config.js", async (importOriginal) => {
}; };
}); });
vi.mock("../media/store.js", () => ({ vi.mock("../media/store.js", async (importOriginal) => {
saveMediaBuffer: vi.fn().mockImplementation(async (_buf: Buffer, contentType?: string) => ({ const actual = await importOriginal<typeof import("../media/store.js")>();
id: "mid", const mockModule = Object.create(null) as Record<string, unknown>;
path: "/tmp/mid", Object.defineProperties(mockModule, Object.getOwnPropertyDescriptors(actual));
size: _buf.length, Object.defineProperty(mockModule, "saveMediaBuffer", {
contentType, configurable: true,
})), enumerable: true,
})); writable: true,
value: vi.fn().mockImplementation(async (_buf: Buffer, contentType?: string) => ({
id: "mid",
path: "/tmp/mid",
size: _buf.length,
contentType,
})),
});
return mockModule;
});
vi.mock("@whiskeysockets/baileys", () => { vi.mock("@whiskeysockets/baileys", () => {
const created = createMockBaileys(); const created = createMockBaileys();

View File

@@ -21,7 +21,9 @@ export default defineConfig({
...base, ...base,
test: { test: {
...baseTest, ...baseTest,
pool: "vmForks", // vmForks reuses VM contexts in ways that can leak module state/mocks across
// files for our e2e harnesses. Use process forks for deterministic isolation.
pool: "forks",
maxWorkers: e2eWorkers, maxWorkers: e2eWorkers,
silent: !verboseE2E, silent: !verboseE2E,
include: ["test/**/*.e2e.test.ts", "src/**/*.e2e.test.ts"], include: ["test/**/*.e2e.test.ts", "src/**/*.e2e.test.ts"],