repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/bak/__tests__/state.test.ts
Rawimport { mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { afterEach, describe, expect, it } from "vitest";
import {
clearPending,
markPending,
normalizeAlias,
readPending,
statePaths,
} from "../state.js";
let directory: string | undefined;
afterEach(async () => {
if (directory) await rm(directory, { recursive: true, force: true });
directory = undefined;
});
describe("bak state", () => {
it("keeps machine identity outside Pi configuration", () => {
expect(
statePaths(
{ XDG_STATE_HOME: "/state", XDG_CACHE_HOME: "/cache" },
"linux",
"/home/me",
),
).toEqual({
identity: "/state/pi/bak/identity.json",
cache: "/cache/pi/bak/catalog.json",
pendingDir: "/state/pi/bak/pending",
});
});
it("keeps concurrent pending markers independent", async () => {
directory = await mkdtemp(join(tmpdir(), "pi-bak-state-"));
const pendingDir = join(directory, "pending");
const [first, second, newer] = await Promise.all([
markPending(pendingDir, "/sessions/a.jsonl"),
markPending(pendingDir, "/sessions/b.jsonl"),
markPending(pendingDir, "/sessions/a.jsonl"),
]);
expect(
(await readPending(pendingDir)).map((entry) => entry.path).sort(),
).toEqual(["/sessions/a.jsonl", "/sessions/a.jsonl", "/sessions/b.jsonl"]);
await clearPending(pendingDir, first.id);
expect(
(await readPending(pendingDir)).map((entry) => entry.id).sort(),
).toEqual([second.id, newer.id].sort());
});
it("normalizes safe human aliases", () => {
expect(normalizeAlias(" Work-Laptop ")).toBe("work-laptop");
expect(normalizeAlias("bad alias")).toBeUndefined();
expect(normalizeAlias("-bad")).toBeUndefined();
});
});