Files
agentic-dev/scripts/work/cli.test.mjs
Danijel Martinek 4e4cd5fa7c chore(tooling): port upstream infra/tooling audit fixes
Ports the kept-file portions of the upstream infra audit-fix subset onto
the clean-slate template branch (auth-only shape; workspaces feature never
existed here, so its package.json edit is skipped):

- resolve the root playwright config in pnpm test:visual (S8)
- prune dead VERCEL_ENV from turbo.json globalEnv (S9)
- drop the duplicate chromium install in the storybook CI job (S10)
- wire scripts/**/*.test.mjs under a dedicated vitest runner
  (vitest.scripts.config.mjs + pnpm test:scripts + CI validate step);
  convert node:test imports to vitest keeping node:assert
- ignore *.tsbuildinfo repo-wide and untrack the committed build state
- align every @trpc/* range on ^11.18.0 so the workspace resolves to a
  single version (peer-warning-free install)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
2026-07-13 06:04:36 +02:00

62 lines
1.8 KiB
JavaScript

import { describe, it, expect } from "vitest";
import { execSync } from "node:child_process";
import path from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const CLI = path.join(__dirname, "cli.mjs");
function run(args) {
try {
return execSync(`node "${CLI}" ${args}`, { encoding: "utf8" });
} catch (e) {
return e.stdout + e.stderr;
}
}
describe("pnpm work cli", () => {
it("prints usage when no subcommand is given", () => {
const out = run("");
expect(out).toContain("Usage:");
expect(out).toContain("rebuild-state");
expect(out).toContain("status");
expect(out).toContain("next");
expect(out).toContain("ready");
expect(out).toContain("blocked");
});
it("rebuild-state writes _state.json", () => {
const out = run("rebuild-state");
expect(out).toContain("Rebuilt");
expect(out).toContain("epic");
});
it("status prints a tree", () => {
const out = run("status");
// We expect at least one epic-line marker character
expect(out).toMatch(/[✓→○]/);
});
it("next prints the next non-done story OR confirms all done", () => {
const out = run("next");
expect(out.length).toBeGreaterThan(0);
});
it("ready prints something", () => {
const out = run("ready");
expect(out.length).toBeGreaterThan(0);
});
it("blocked prints something", () => {
const out = run("blocked");
expect(out.length).toBeGreaterThan(0);
});
it("dispatch prints a plan or reports nothing is ready", () => {
// Runs against the real docs/work tree, so the outcome depends on
// whether a ready task exists — both branches are valid CLI output.
const out = run("dispatch");
expect(out).toMatch(/Dispatch plan|No ready task to dispatch/);
});
});