Files
openclaw/src/logging/logger.browser-import.test.ts

71 lines
2.3 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
type LoggerModule = typeof import("./logger.js");
const originalGetBuiltinModule = (
process as NodeJS.Process & { getBuiltinModule?: (id: string) => unknown }
).getBuiltinModule;
async function importBrowserSafeLogger(params?: {
resolvePreferredOpenClawTmpDir?: ReturnType<typeof vi.fn>;
}): Promise<{
module: LoggerModule;
resolvePreferredOpenClawTmpDir: ReturnType<typeof vi.fn>;
}> {
vi.resetModules();
const resolvePreferredOpenClawTmpDir =
params?.resolvePreferredOpenClawTmpDir ??
vi.fn(() => {
throw new Error("resolvePreferredOpenClawTmpDir should not run during browser-safe import");
});
vi.doMock("../infra/tmp-openclaw-dir.js", async () => {
const actual = await vi.importActual<typeof import("../infra/tmp-openclaw-dir.js")>(
"../infra/tmp-openclaw-dir.js",
);
return {
...actual,
resolvePreferredOpenClawTmpDir,
};
});
Object.defineProperty(process, "getBuiltinModule", {
configurable: true,
value: undefined,
});
const module = await import("./logger.js");
return { module, resolvePreferredOpenClawTmpDir };
}
describe("logging/logger browser-safe import", () => {
afterEach(() => {
vi.resetModules();
vi.doUnmock("../infra/tmp-openclaw-dir.js");
Object.defineProperty(process, "getBuiltinModule", {
configurable: true,
value: originalGetBuiltinModule,
});
});
it("does not resolve the preferred temp dir at import time when node fs is unavailable", async () => {
const { module, resolvePreferredOpenClawTmpDir } = await importBrowserSafeLogger();
expect(resolvePreferredOpenClawTmpDir).not.toHaveBeenCalled();
expect(module.DEFAULT_LOG_DIR).toBe("/tmp/openclaw");
expect(module.DEFAULT_LOG_FILE).toBe("/tmp/openclaw/openclaw.log");
});
it("disables file logging when imported in a browser-like environment", async () => {
const { module, resolvePreferredOpenClawTmpDir } = await importBrowserSafeLogger();
expect(module.getResolvedLoggerSettings()).toMatchObject({
level: "silent",
file: "/tmp/openclaw/openclaw.log",
});
expect(module.isFileLogLevelEnabled("info")).toBe(false);
expect(() => module.getLogger().info("browser-safe")).not.toThrow();
expect(resolvePreferredOpenClawTmpDir).not.toHaveBeenCalled();
});
});