Spaces:
Running
Running
| import { describe, expect, it } from "vitest"; | |
| import seedWorkPackages from "../agentic_pm_demo_codex_plans/data/work-packages.seed.json"; | |
| import { | |
| applyComposerSuggestion, | |
| getComposerSuggestions, | |
| } from "./composer-autocomplete"; | |
| import { parseCommand } from "./command-parser"; | |
| import type { WorkPackage } from "./work-package-types"; | |
| const workPackages = seedWorkPackages as WorkPackage[]; | |
| const selectedWorkPackage = workPackages.find((wp) => wp.shortName === "SRS"); | |
| describe("composer autocomplete", () => { | |
| it("returns work package suggestions for @ queries", () => { | |
| const suggestions = getComposerSuggestions("@sr", workPackages); | |
| expect(suggestions.some((suggestion) => suggestion.kind === "package")).toBe( | |
| true, | |
| ); | |
| expect( | |
| suggestions.find( | |
| (suggestion) => | |
| suggestion.kind === "package" && suggestion.shortName === "SRS", | |
| ), | |
| ).toBeTruthy(); | |
| }); | |
| it("returns all command suggestions for slash queries", () => { | |
| const suggestions = getComposerSuggestions("/", workPackages); | |
| expect(suggestions).toHaveLength(4); | |
| expect(suggestions.map((suggestion) => suggestion.kind)).toEqual([ | |
| "command", | |
| "command", | |
| "command", | |
| "command", | |
| ]); | |
| expect( | |
| suggestions.map((suggestion) => | |
| suggestion.kind === "command" ? suggestion.mode : null, | |
| ), | |
| ).toEqual(["ask", "plan", "change", "execute"]); | |
| }); | |
| it("applies slash suggestions by expanding into an @ command", () => { | |
| const suggestion = getComposerSuggestions("/pl", workPackages).find( | |
| (item) => item.kind === "command" && item.mode === "plan", | |
| ); | |
| expect(suggestion).toBeTruthy(); | |
| const nextDraft = applyComposerSuggestion({ | |
| draft: "/pl", | |
| suggestion: suggestion!, | |
| selectedWorkPackage, | |
| }); | |
| expect(nextDraft).toBe("@SRS plan "); | |
| expect(parseCommand(nextDraft, workPackages).parsed.mode).toBe("plan"); | |
| }); | |
| }); | |