This repository has been archived on 2026-08-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
pi-web/pi-web-plugins/workspace-tasks/config.test.ts
T

100 lines
3.0 KiB
TypeScript

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",
});
});
});