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,
}));
vi.mock("../config/sessions.js", () => ({
loadSessionStore: vi.fn(() => loadSessionStoreFixture()),
resolveAgentIdFromSessionKey: () => "main",
resolveStorePath: () => "/tmp/sessions.json",
resolveMainSessionKey: () => "agent:main:main",
readSessionUpdatedAt: vi.fn(() => undefined),
recordSessionMetaFromInbound: vi.fn().mockResolvedValue(undefined),
}));
vi.mock("../config/sessions.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../config/sessions.js")>();
return {
...actual,
loadSessionStore: vi.fn(() => loadSessionStoreFixture()),
resolveAgentIdFromSessionKey: () => "main",
resolveStorePath: () => "/tmp/sessions.json",
resolveMainSessionKey: () => "agent:main:main",
readSessionUpdatedAt: vi.fn(() => undefined),
recordSessionMetaFromInbound: vi.fn().mockResolvedValue(undefined),
};
});
vi.mock("./pi-embedded.js", () => embeddedRunMock);

View File

@@ -83,11 +83,15 @@ vi.mock("@grammyjs/transformer-throttler", () => ({
vi.mock("../media/store.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../media/store.js")>();
return {
...actual,
saveMediaBuffer: (...args: Parameters<typeof saveMediaBufferSpy>) =>
saveMediaBufferSpy(...args),
};
const mockModule = Object.create(null) as Record<string, unknown>;
Object.defineProperties(mockModule, Object.getOwnPropertyDescriptors(actual));
Object.defineProperty(mockModule, "saveMediaBuffer", {
configurable: true,
enumerable: true,
writable: true,
value: (...args: Parameters<typeof saveMediaBufferSpy>) => saveMediaBufferSpy(...args),
});
return mockModule;
});
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", () => ({
saveMediaBuffer: vi.fn().mockImplementation(async (_buf: Buffer, contentType?: string) => ({
id: "mid",
path: "/tmp/mid",
size: _buf.length,
contentType,
})),
}));
vi.mock("../media/store.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../media/store.js")>();
const mockModule = Object.create(null) as Record<string, unknown>;
Object.defineProperties(mockModule, Object.getOwnPropertyDescriptors(actual));
Object.defineProperty(mockModule, "saveMediaBuffer", {
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", () => {
const created = createMockBaileys();

View File

@@ -21,7 +21,9 @@ export default defineConfig({
...base,
test: {
...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,
silent: !verboseE2E,
include: ["test/**/*.e2e.test.ts", "src/**/*.e2e.test.ts"],