diff --git a/src/cli/helpers/planName.ts b/src/cli/helpers/planName.ts index 62bdf2a..fed0d84 100644 --- a/src/cli/helpers/planName.ts +++ b/src/cli/helpers/planName.ts @@ -1,4 +1,5 @@ import { homedir } from "node:os"; +import { join } from "node:path"; const adjectives = [ "bold", @@ -113,5 +114,5 @@ export function generatePlanName(): string { export function generatePlanFilePath(): string { const name = generatePlanName(); - return `${homedir()}/.letta/plans/${name}.md`; + return join(homedir(), ".letta", "plans", `${name}.md`); } diff --git a/src/tests/helpers/planName.test.ts b/src/tests/helpers/planName.test.ts new file mode 100644 index 0000000..a9af33d --- /dev/null +++ b/src/tests/helpers/planName.test.ts @@ -0,0 +1,28 @@ +import { expect, test } from "bun:test"; +import { sep } from "node:path"; +import { + generatePlanFilePath, + generatePlanName, +} from "../../cli/helpers/planName"; + +test("generatePlanName returns valid format", () => { + const name = generatePlanName(); + expect(name).toMatch(/^[a-z]+-[a-z]+-[a-z]+$/); +}); + +test("generatePlanFilePath uses platform-specific path separator", () => { + const path = generatePlanFilePath(); + expect(path).toContain(sep); + expect(path).toMatch(/\.letta.+plans.+/); +}); + +test("generatePlanFilePath ends with .md extension", () => { + const path = generatePlanFilePath(); + expect(path).toMatch(/\.md$/); +}); + +test("generatePlanFilePath contains valid plan name structure", () => { + const path = generatePlanFilePath(); + const basename = path.split(sep).pop(); + expect(basename).toMatch(/^[a-z]+-[a-z]+-[a-z]+\.md$/); +});