test: dedupe memory and context suites

This commit is contained in:
Peter Steinberger
2026-04-25 14:06:17 +01:00
parent 2413c0f5a5
commit cd392b947c
7 changed files with 344 additions and 383 deletions

View File

@@ -265,26 +265,31 @@ describe("buildFileEntry", () => {
expect(built?.structuredInputBytes).toBeGreaterThan(0);
});
it("skips lazy multimodal indexing when the file grows after discovery", async () => {
const tmpDir = getTmpDir();
const target = path.join(tmpDir, "diagram.png");
await fs.writeFile(target, Buffer.from("png"));
it("skips lazy multimodal indexing when file state changes after discovery", async () => {
for (const testCase of [
{
name: "grows",
mutate: async (target: string, entrySize: number) => {
await fs.writeFile(target, Buffer.alloc(entrySize + 32, 1));
},
},
{
name: "bytes change",
mutate: async (target: string) => {
await fs.writeFile(target, Buffer.from("gif"));
},
},
] as const) {
const tmpDir = getTmpDir();
const target = path.join(tmpDir, `${testCase.name}.png`);
await fs.writeFile(target, Buffer.from("png"));
const entry = await buildFileEntry(target, tmpDir, multimodal);
await fs.writeFile(target, Buffer.alloc(entry!.size + 32, 1));
const entry = await buildFileEntry(target, tmpDir, multimodal);
expect(entry, testCase.name).not.toBeNull();
await testCase.mutate(target, entry!.size);
await expect(buildMultimodalChunkForIndexing(entry!)).resolves.toBeNull();
});
it("skips lazy multimodal indexing when file bytes change after discovery", async () => {
const tmpDir = getTmpDir();
const target = path.join(tmpDir, "diagram.png");
await fs.writeFile(target, Buffer.from("png"));
const entry = await buildFileEntry(target, tmpDir, multimodal);
await fs.writeFile(target, Buffer.from("gif"));
await expect(buildMultimodalChunkForIndexing(entry!)).resolves.toBeNull();
await expect(buildMultimodalChunkForIndexing(entry!), testCase.name).resolves.toBeNull();
}
});
});

View File

@@ -2,7 +2,7 @@ import { EventEmitter } from "node:events";
import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const spawnMock = vi.hoisted(() => vi.fn());
@@ -24,25 +24,36 @@ function createMockChild() {
return child;
}
let fixtureRoot = "";
let tempDir = "";
let platformSpy: { mockRestore(): void } | null = null;
let fixtureId = 0;
const originalPath = process.env.PATH;
const originalPathExt = process.env.PATHEXT;
beforeEach(async () => {
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-qmd-win-spawn-"));
beforeAll(async () => {
fixtureRoot = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-qmd-win-spawn-"));
platformSpy = vi.spyOn(process, "platform", "get").mockReturnValue("win32");
});
afterEach(async () => {
afterAll(async () => {
platformSpy?.mockRestore();
platformSpy = null;
if (fixtureRoot) {
await fs.rm(fixtureRoot, { recursive: true, force: true });
}
});
beforeEach(async () => {
tempDir = path.join(fixtureRoot, `case-${fixtureId++}`);
await fs.mkdir(tempDir, { recursive: true });
});
afterEach(() => {
process.env.PATH = originalPath;
process.env.PATHEXT = originalPathExt;
spawnMock.mockReset();
if (tempDir) {
await fs.rm(tempDir, { recursive: true, force: true });
tempDir = "";
}
tempDir = "";
});
describe("resolveCliSpawnInvocation", () => {

View File

@@ -1,25 +1,35 @@
import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
import { buildSessionEntry, listSessionFilesForAgent } from "./session-files.js";
let fixtureRoot: string;
let tmpDir: string;
let originalStateDir: string | undefined;
let fixtureId = 0;
beforeAll(async () => {
fixtureRoot = await fs.mkdtemp(path.join(os.tmpdir(), "session-entry-test-"));
});
afterAll(async () => {
await fs.rm(fixtureRoot, { recursive: true, force: true });
});
beforeEach(async () => {
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "session-entry-test-"));
tmpDir = path.join(fixtureRoot, `case-${fixtureId++}`);
await fs.mkdir(tmpDir, { recursive: true });
originalStateDir = process.env.OPENCLAW_STATE_DIR;
process.env.OPENCLAW_STATE_DIR = tmpDir;
});
afterEach(async () => {
afterEach(() => {
if (originalStateDir === undefined) {
delete process.env.OPENCLAW_STATE_DIR;
} else {
process.env.OPENCLAW_STATE_DIR = originalStateDir;
}
await fs.rm(tmpDir, { recursive: true, force: true });
});
describe("listSessionFilesForAgent", () => {