67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
import { mkdtempSync, rmSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { resolveProject } from "../src/hooks/_project.js";
|
|
|
|
describe("resolveProject — hook project basename resolver", () => {
|
|
const originalEnv = process.env.AGENTMEMORY_PROJECT_NAME;
|
|
|
|
beforeEach(() => {
|
|
delete process.env.AGENTMEMORY_PROJECT_NAME;
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (originalEnv === undefined) {
|
|
delete process.env.AGENTMEMORY_PROJECT_NAME;
|
|
} else {
|
|
process.env.AGENTMEMORY_PROJECT_NAME = originalEnv;
|
|
}
|
|
});
|
|
|
|
it("AGENTMEMORY_PROJECT_NAME env wins over everything", () => {
|
|
process.env.AGENTMEMORY_PROJECT_NAME = "my-override";
|
|
expect(resolveProject("/var/log")).toBe("my-override");
|
|
expect(resolveProject(process.cwd())).toBe("my-override");
|
|
});
|
|
|
|
it("trims whitespace on env override", () => {
|
|
process.env.AGENTMEMORY_PROJECT_NAME = " spaced ";
|
|
expect(resolveProject("/var/log")).toBe("spaced");
|
|
});
|
|
|
|
it("ignores empty env override", () => {
|
|
process.env.AGENTMEMORY_PROJECT_NAME = " ";
|
|
const repoBasename = "agentmemory";
|
|
expect(resolveProject(process.cwd())).toBe(repoBasename);
|
|
});
|
|
|
|
it("returns git toplevel basename when cwd is inside a repo", () => {
|
|
const top = resolveProject(process.cwd());
|
|
expect(top).toBe("agentmemory");
|
|
});
|
|
|
|
it("returns git toplevel basename from a nested subdir", () => {
|
|
const nested = join(process.cwd(), "src", "hooks");
|
|
expect(resolveProject(nested)).toBe("agentmemory");
|
|
});
|
|
|
|
it("falls back to basename(cwd) when not in a git repo", () => {
|
|
const dir = mkdtempSync(join(tmpdir(), "amem-noproj-"));
|
|
try {
|
|
expect(resolveProject(dir)).toBe(dir.split("/").pop());
|
|
} finally {
|
|
rmSync(dir, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
it("defaults to process.cwd() when no cwd argument given", () => {
|
|
expect(resolveProject()).toBe("agentmemory");
|
|
});
|
|
|
|
it("defaults to process.cwd() when cwd argument is empty", () => {
|
|
expect(resolveProject("")).toBe("agentmemory");
|
|
expect(resolveProject(" ")).toBe("agentmemory");
|
|
});
|
|
});
|