mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-02 01:00:22 +00:00
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import path from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
import { withTempDir } from "../test-utils/temp-dir.js";
|
|
import {
|
|
defaultVoiceWakeTriggers,
|
|
loadVoiceWakeConfig,
|
|
setVoiceWakeTriggers,
|
|
} from "./voicewake.js";
|
|
|
|
describe("voicewake config", () => {
|
|
it("returns defaults when missing", async () => {
|
|
await withTempDir("openclaw-voicewake-", async (baseDir) => {
|
|
await expect(loadVoiceWakeConfig(baseDir)).resolves.toEqual({
|
|
triggers: defaultVoiceWakeTriggers(),
|
|
updatedAtMs: 0,
|
|
});
|
|
});
|
|
});
|
|
|
|
it("sanitizes and persists triggers", async () => {
|
|
await withTempDir("openclaw-voicewake-", async (baseDir) => {
|
|
const saved = await setVoiceWakeTriggers([" hi ", "", " there "], baseDir);
|
|
expect(saved.triggers).toEqual(["hi", "there"]);
|
|
expect(saved.updatedAtMs).toBeGreaterThan(0);
|
|
|
|
await expect(loadVoiceWakeConfig(baseDir)).resolves.toEqual({
|
|
triggers: ["hi", "there"],
|
|
updatedAtMs: saved.updatedAtMs,
|
|
});
|
|
});
|
|
});
|
|
|
|
it("falls back to defaults for empty or malformed persisted values", async () => {
|
|
await withTempDir("openclaw-voicewake-", async (baseDir) => {
|
|
const emptySaved = await setVoiceWakeTriggers(["", " "], baseDir);
|
|
expect(emptySaved.triggers).toEqual(defaultVoiceWakeTriggers());
|
|
|
|
await fs.mkdir(path.join(baseDir, "settings"), { recursive: true });
|
|
await fs.writeFile(
|
|
path.join(baseDir, "settings", "voicewake.json"),
|
|
JSON.stringify({
|
|
triggers: [" wake ", "", 42, null],
|
|
updatedAtMs: -1,
|
|
}),
|
|
"utf8",
|
|
);
|
|
|
|
await expect(loadVoiceWakeConfig(baseDir)).resolves.toEqual({
|
|
triggers: ["wake"],
|
|
updatedAtMs: 0,
|
|
});
|
|
});
|
|
});
|
|
});
|