MagicCode/packages/ext-claudecode/src/tools/todowrite.test.ts

40 lines
1.5 KiB
TypeScript
Raw Normal View History

import { describe, expect, it } from "vitest";
import { todoWriteTool } from "./todowrite";
const run = (todos: unknown) => todoWriteTool.execute({ todos }, { cwd: "/" });
describe("TodoWrite", () => {
it("affiche la liste avec les symboles et le décompte", async () => {
const out = await run([
{ content: "Lire le code", status: "completed" },
{ content: "Implémenter", status: "in_progress", activeForm: "Implémentation du lot 3" },
{ content: "Écrire les tests", status: "pending" },
]);
expect(out.split("\n").slice(0, 4)).toEqual([
"Liste de tâches mise à jour (1/3 terminée(s)) :",
"☑ Lire le code",
"▶ Implémentation du lot 3",
"☐ Écrire les tests",
]);
});
it("liste vide : vidée", async () => {
expect(await run([])).toBe("Liste de tâches vidée.");
});
it("avertit si plusieurs tâches sont en cours", async () => {
const out = await run([
{ content: "A", status: "in_progress" },
{ content: "B", status: "in_progress" },
]);
expect(out).toContain("2 tâches sont « in_progress »");
});
it("valide l'entrée", async () => {
await expect(todoWriteTool.execute({}, { cwd: "/" })).rejects.toThrow("tableau attendu");
await expect(run([{ content: "", status: "pending" }])).rejects.toThrow("todos[0]");
await expect(run([{ content: "A", status: "fait" }])).rejects.toThrow("status");
await expect(run(["A"])).rejects.toThrow("objet attendu");
});
});