feat: bundle workspace tasks plugin

This commit is contained in:
Federico Jaramillo Martinez
2026-06-03 22:31:36 +02:00
parent fda6fb0eca
commit 08f69d09c0
52 changed files with 879 additions and 681 deletions
@@ -0,0 +1,99 @@
import { describe, expect, it } from "vitest";
import { parseTasksConfigText } from "./config";
describe("workspace tasks config", () => {
it("parses a minimal version 1 config", () => {
expect(parseTasksConfigText(JSON.stringify({
version: 1,
tasks: [
{ id: "db.reset", title: "Reset DB", command: "go -C klingit-go run ./cli db reset" },
],
}))).toEqual({
ok: true,
config: {
version: 1,
tasks: [
{ id: "db.reset", title: "Reset DB", command: "go -C klingit-go run ./cli db reset", confirm: false },
],
},
});
});
it("parses optional group, description, and confirm fields", () => {
expect(parseTasksConfigText(JSON.stringify({
version: 1,
tasks: [
{
id: "docker.start",
title: "Start Docker",
description: "Start the dev stack.",
group: "Docker",
command: "./docker/scripts/docker-compose-dev up -d",
confirm: true,
},
],
}))).toEqual({
ok: true,
config: {
version: 1,
tasks: [
{
id: "docker.start",
title: "Start Docker",
description: "Start the dev stack.",
group: "Docker",
command: "./docker/scripts/docker-compose-dev up -d",
confirm: true,
},
],
},
});
});
it("accepts an empty tasks array", () => {
expect(parseTasksConfigText(JSON.stringify({ version: 1, tasks: [] }))).toEqual({
ok: true,
config: { version: 1, tasks: [] },
});
});
it("rejects invalid JSON and unsupported versions", () => {
expect(parseTasksConfigText("{")).toMatchObject({ ok: false });
expect(parseTasksConfigText(JSON.stringify({ version: 2, tasks: [] }))).toEqual({
ok: false,
error: "Config version must be 1",
});
});
it("rejects missing, empty, or duplicate required fields", () => {
expect(parseTasksConfigText(JSON.stringify({ version: 1 }))).toEqual({
ok: false,
error: "Config tasks must be an array",
});
expect(parseTasksConfigText(JSON.stringify({ version: 1, tasks: [{ id: "", title: "T", command: "cmd" }] }))).toEqual({
ok: false,
error: "Task 1 id must be a non-empty string",
});
expect(parseTasksConfigText(JSON.stringify({
version: 1,
tasks: [
{ id: "one", title: "One", command: "cmd" },
{ id: "one", title: "Again", command: "cmd" },
],
}))).toEqual({
ok: false,
error: "Duplicate task id: one",
});
});
it("rejects invalid optional field types", () => {
expect(parseTasksConfigText(JSON.stringify({ version: 1, tasks: [{ id: "one", title: "One", command: "cmd", confirm: "yes" }] }))).toEqual({
ok: false,
error: "Task 1 confirm must be a boolean",
});
expect(parseTasksConfigText(JSON.stringify({ version: 1, tasks: [{ id: "one", title: "One", command: "cmd", group: "" }] }))).toEqual({
ok: false,
error: "Task 1 group must be a non-empty string when provided",
});
});
});