import * as fs from "node:fs"; import * as path from "node:path"; import * as os from "node:os"; import { RoadmapperAgent } from "../agents/roadmapper.js"; describe("RoadmapperAgent", () => { let tempDir: string; beforeEach(() => { tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "ciagent-roadmapper-test-")); }); afterEach(() => { fs.rmSync(tempDir, { recursive: true, force: true }); }); it("generates phases from REQUIREMENTS.md", () => { const ciagentDir = path.join(tempDir, ".ciagent"); fs.mkdirSync(ciagentDir, { recursive: true }); fs.writeFileSync( path.join(ciagentDir, "REQUIREMENTS.md"), "REQ-1: Phase: 1 — Build core\nREQ-2: Phase: 1 — Build utils\nREQ-3: Phase: 2 — Add features" ); const agent = new RoadmapperAgent(); const phases = agent.mechanicalRoadmapGenerate(tempDir); expect(phases.length).toBeGreaterThanOrEqual(2); expect(phases[0].requirements).toContain("REQ-1"); expect(phases[0].requirements).toContain("REQ-2"); expect(phases[1].requirements).toContain("REQ-3"); }); it("sets phase dependencies correctly", () => { const ciagentDir = path.join(tempDir, ".ciagent"); fs.mkdirSync(ciagentDir, { recursive: true }); fs.writeFileSync( path.join(ciagentDir, "REQUIREMENTS.md"), "REQ-1: Phase: 1 — Core\nREQ-2: Phase: 2 — Extension" ); const agent = new RoadmapperAgent(); const phases = agent.mechanicalRoadmapGenerate(tempDir); expect(phases.length).toBe(2); expect(phases[0].dependencies).toEqual([]); expect(phases[1].dependencies).toEqual([1]); }); it("generates success criteria from requirements", () => { const ciagentDir = path.join(tempDir, ".ciagent"); fs.mkdirSync(ciagentDir, { recursive: true }); fs.writeFileSync( path.join(ciagentDir, "REQUIREMENTS.md"), "REQ-1: Phase: 1 — Build core" ); const agent = new RoadmapperAgent(); const phases = agent.mechanicalRoadmapGenerate(tempDir); expect(phases.length).toBe(1); expect(phases[0].successCriteria.length).toBeGreaterThan(0); expect(phases[0].successCriteria.some((c) => c.includes("REQ-1"))).toBe(true); }); it("returns empty when no REQUIREMENTS.md exists", () => { const agent = new RoadmapperAgent(); const phases = agent.mechanicalRoadmapGenerate(tempDir); expect(phases).toEqual([]); }); it("agent name is roadmapper", () => { const agent = new RoadmapperAgent(); expect(agent.name).toBe("roadmapper"); }); });