Files
openclaw/src/browser-lifecycle-cleanup.test.ts
Nicolas 4ac90a5b48 fix: skip browser cleanup when browser is disabled
Skip browser lifecycle cleanup when root browser support or the browser plugin entry is disabled, and make the browser maintenance facade respect activation before cached surface use.

Also stabilize the resource-only MCP runtime test by waiting for the async rejection log that CI can observe late.

Verification:
- pnpm test src/plugin-sdk/browser-maintenance.test.ts src/browser-lifecycle-cleanup.test.ts src/auto-reply/reply/session.test.ts src/gateway/server.sessions.reset-cleanup.test.ts src/agents/auth-profiles/usage.test.ts
- pnpm test src/agents/agent-bundle-mcp-runtime.test.ts
- git diff --check
- pnpm build
- autoreview local: no accepted/actionable findings
- GitHub Actions: CI 26693713166, CodeQL 26693713159, CodeQL Critical Quality 26693713157, OpenGrep PR Diff 26693713125, Workflow Sanity 26693713149, Dependency Guard 26693712478

Co-authored-by: Nicolas Van Eenaeme <nicolas@poison.be>
2026-05-30 21:16:47 +01:00

70 lines
2.1 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
import type { OpenClawConfig } from "./config/types.openclaw.js";
const closeTrackedBrowserTabsForSessions = vi.hoisted(() => vi.fn(async () => 0));
vi.mock("./plugin-sdk/browser-maintenance.js", () => ({
closeTrackedBrowserTabsForSessions,
}));
const { cleanupBrowserSessionsForLifecycleEnd } = await import("./browser-lifecycle-cleanup.js");
describe("cleanupBrowserSessionsForLifecycleEnd", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("normalizes session keys before closing browser sessions", async () => {
const onWarn = vi.fn();
await expect(
cleanupBrowserSessionsForLifecycleEnd({
sessionKeys: ["", " session-a ", "session-a", "session-b"],
onWarn,
}),
).resolves.toBeUndefined();
expect(closeTrackedBrowserTabsForSessions).toHaveBeenCalledWith({
sessionKeys: ["session-a", "session-b"],
onWarn,
});
});
it("skips cleanup when root browser support is disabled", async () => {
await expect(
cleanupBrowserSessionsForLifecycleEnd({
cfg: { browser: { enabled: false } } as OpenClawConfig,
sessionKeys: ["session-a"],
}),
).resolves.toBeUndefined();
expect(closeTrackedBrowserTabsForSessions).not.toHaveBeenCalled();
});
it("skips cleanup when the browser plugin entry is disabled", async () => {
await expect(
cleanupBrowserSessionsForLifecycleEnd({
cfg: { plugins: { entries: { browser: { enabled: false } } } } as OpenClawConfig,
sessionKeys: ["session-a"],
}),
).resolves.toBeUndefined();
expect(closeTrackedBrowserTabsForSessions).not.toHaveBeenCalled();
});
it("swallows browser cleanup failures", async () => {
const onError = vi.fn();
const error = new Error("cleanup failed");
closeTrackedBrowserTabsForSessions.mockRejectedValueOnce(error);
await expect(
cleanupBrowserSessionsForLifecycleEnd({
sessionKeys: ["session-a"],
onError,
}),
).resolves.toBeUndefined();
expect(onError).toHaveBeenCalledWith(error);
});
});