Files
openclaw/src/agents/pi-embedded-runner.sanitize-session-history.e2e.test.ts
2026-02-16 14:59:30 +00:00

73 lines
2.2 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
import * as helpers from "./pi-embedded-helpers.js";
import {
expectGoogleModelApiFullSanitizeCall,
loadSanitizeSessionHistoryWithCleanMocks,
makeMockSessionManager,
makeSimpleUserMessages,
makeSnapshotChangedOpenAIReasoningScenario,
sanitizeWithOpenAIResponses,
} from "./pi-embedded-runner.sanitize-session-history.test-harness.js";
type SanitizeSessionHistory =
typeof import("./pi-embedded-runner/google.js").sanitizeSessionHistory;
let sanitizeSessionHistory: SanitizeSessionHistory;
vi.mock("./pi-embedded-helpers.js", async () => {
const actual = await vi.importActual("./pi-embedded-helpers.js");
return {
...actual,
isGoogleModelApi: vi.fn(),
sanitizeSessionMessagesImages: vi.fn().mockImplementation(async (msgs) => msgs),
};
});
describe("sanitizeSessionHistory e2e smoke", () => {
const mockSessionManager = makeMockSessionManager();
const mockMessages = makeSimpleUserMessages();
beforeEach(async () => {
sanitizeSessionHistory = await loadSanitizeSessionHistoryWithCleanMocks();
});
it("applies full sanitize policy for google model APIs", async () => {
await expectGoogleModelApiFullSanitizeCall({
sanitizeSessionHistory,
messages: mockMessages,
sessionManager: mockSessionManager,
});
});
it("keeps images-only sanitize policy without tool-call id rewriting for openai-responses", async () => {
vi.mocked(helpers.isGoogleModelApi).mockReturnValue(false);
await sanitizeWithOpenAIResponses({
sanitizeSessionHistory,
messages: mockMessages,
sessionManager: mockSessionManager,
});
expect(helpers.sanitizeSessionMessagesImages).toHaveBeenCalledWith(
mockMessages,
"session:history",
expect.objectContaining({
sanitizeMode: "images-only",
sanitizeToolCallIds: false,
}),
);
});
it("downgrades openai reasoning blocks when the model snapshot changed", async () => {
const { sessionManager, messages, modelId } = makeSnapshotChangedOpenAIReasoningScenario();
const result = await sanitizeWithOpenAIResponses({
sanitizeSessionHistory,
messages,
modelId,
sessionManager,
});
expect(result).toEqual([]);
});
});