Menu
popagent
publicLatest change 6edc7e928c57dab23c0973ed3f7ee70b3ebb72d5 - Initial popagent baseline by AkurAI Build
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import { mkdir, mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join, resolve } from "node:path";
import { AgentWorkspaceStore } from "./agent-workspaces";
let root = "";
let repositoryA = "";
let repositoryB = "";
let store: AgentWorkspaceStore;
let createdId: string | undefined;
beforeAll(async () => {
root = await mkdtemp(join(tmpdir(), "popagent-workspaces-"));
repositoryA = `repo-${crypto.randomUUID()}`;
repositoryB = `repo-${crypto.randomUUID()}`;
await Promise.all([
mkdir(join(root, repositoryA)),
mkdir(join(root, repositoryB)),
]);
store = new AgentWorkspaceStore(root);
await store.init();
});
afterAll(async () => {
if (createdId) await store.delete(createdId);
await rm(root, { recursive: true, force: true });
});
describe("AgentWorkspaceStore", () => {
test("persists repository workspaces and resolves contained paths", async () => {
const created = await store.create({ name: "Test repository", repositoryPath: repositoryA });
createdId = created.id;
expect(await store.list()).toContainEqual(expect.objectContaining({
id: created.id,
name: "Test repository",
repositoryPath: repositoryA,
}));
expect((await store.resolveRepository(created.id)).path).toBe(resolve(root, repositoryA));
const updated = await store.update(created.id, {
name: "Renamed repository",
repositoryPath: repositoryB,
});
expect(updated).toEqual(expect.objectContaining({
name: "Renamed repository",
repositoryPath: repositoryB,
}));
expect((await store.resolveRepository(created.id)).path).toBe(resolve(root, repositoryB));
expect(await store.delete(created.id)).toBe(true);
createdId = undefined;
expect(await store.get(created.id)).toBeUndefined();
});
test("rejects absolute paths and traversal outside the workspace root", async () => {
await expect(store.create({ name: "Absolute", repositoryPath: resolve(root) })).rejects.toThrow(
"relative to the workspace root",
);
await expect(store.create({ name: "Traversal", repositoryPath: ".." })).rejects.toThrow(
"inside the workspace root",
);
});
});