* feat(cli): add job, group, audit, token commands and schedule enable/disable Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(cli): regenerate system prompts after new commands Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(cli): address PR review feedback Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(cli): regenerate system prompts after review fixes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor(cli): extract shared formatTimestamp util and remove unused resolveWorkspace in token Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
208 lines
6.5 KiB
TypeScript
208 lines
6.5 KiB
TypeScript
/**
|
|
* Integration tests for:
|
|
* - `wmill schedule enable/disable`
|
|
* - `wmill script history`
|
|
* - `wmill flow history/show-version`
|
|
*/
|
|
|
|
import { expect, test, describe } from "bun:test";
|
|
import { withTestBackend } from "./test_backend.ts";
|
|
import {
|
|
setupWorkspaceProfile,
|
|
createRemoteScript,
|
|
createRemoteFlow,
|
|
createRemoteSchedule,
|
|
} from "./new_commands_helpers.ts";
|
|
|
|
// =============================================================================
|
|
// schedule enable/disable commands
|
|
// =============================================================================
|
|
|
|
describe("schedule enable/disable", () => {
|
|
test("schedule enable and disable toggle schedule state", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const uniqueId = Date.now();
|
|
const scriptPath = `f/test/sched_script_${uniqueId}`;
|
|
const schedulePath = `f/test/sched_${uniqueId}`;
|
|
|
|
await createRemoteScript(backend, scriptPath);
|
|
await createRemoteSchedule(backend, schedulePath, scriptPath);
|
|
|
|
// Enable
|
|
const enableResult = await backend.runCLICommand(
|
|
["schedule", "enable", schedulePath],
|
|
tempDir
|
|
);
|
|
expect(enableResult.code).toEqual(0);
|
|
expect(enableResult.stdout).toContain("enabled");
|
|
|
|
// Verify enabled via get
|
|
const getResult1 = await backend.runCLICommand(
|
|
["schedule", "get", schedulePath, "--json"],
|
|
tempDir
|
|
);
|
|
expect(getResult1.code).toEqual(0);
|
|
const schedule1 = JSON.parse(getResult1.stdout);
|
|
expect(schedule1.enabled).toBe(true);
|
|
|
|
// Disable
|
|
const disableResult = await backend.runCLICommand(
|
|
["schedule", "disable", schedulePath],
|
|
tempDir
|
|
);
|
|
expect(disableResult.code).toEqual(0);
|
|
expect(disableResult.stdout).toContain("disabled");
|
|
|
|
// Verify disabled via get
|
|
const getResult2 = await backend.runCLICommand(
|
|
["schedule", "get", schedulePath, "--json"],
|
|
tempDir
|
|
);
|
|
expect(getResult2.code).toEqual(0);
|
|
const schedule2 = JSON.parse(getResult2.stdout);
|
|
expect(schedule2.enabled).toBe(false);
|
|
});
|
|
});
|
|
|
|
test("schedule enable/disable shows in help", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const result = await backend.runCLICommand(
|
|
["schedule", "--help"],
|
|
tempDir
|
|
);
|
|
|
|
expect(result.code).toEqual(0);
|
|
const output = result.stdout + result.stderr;
|
|
expect(output).toContain("enable");
|
|
expect(output).toContain("disable");
|
|
});
|
|
});
|
|
});
|
|
|
|
// =============================================================================
|
|
// script history command
|
|
// =============================================================================
|
|
|
|
describe("script history", () => {
|
|
test("script history returns version list", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const uniqueId = Date.now();
|
|
const scriptPath = `f/test/history_script_${uniqueId}`;
|
|
await createRemoteScript(backend, scriptPath);
|
|
|
|
const result = await backend.runCLICommand(
|
|
["script", "history", scriptPath, "--json"],
|
|
tempDir
|
|
);
|
|
|
|
expect(result.code).toEqual(0);
|
|
const parsed = JSON.parse(result.stdout);
|
|
expect(Array.isArray(parsed)).toBe(true);
|
|
expect(parsed.length).toBeGreaterThanOrEqual(1);
|
|
expect(parsed[0]).toHaveProperty("script_hash");
|
|
});
|
|
});
|
|
|
|
test("script history shows table output", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const uniqueId = Date.now();
|
|
const scriptPath = `f/test/history_table_${uniqueId}`;
|
|
await createRemoteScript(backend, scriptPath);
|
|
|
|
const result = await backend.runCLICommand(
|
|
["script", "history", scriptPath],
|
|
tempDir
|
|
);
|
|
|
|
expect(result.code).toEqual(0);
|
|
expect(result.stdout).toContain("Hash");
|
|
expect(result.stdout).toContain("Deployment Message");
|
|
});
|
|
});
|
|
});
|
|
|
|
// =============================================================================
|
|
// flow history and show-version commands
|
|
// =============================================================================
|
|
|
|
describe("flow history", () => {
|
|
test("flow history returns version list", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const uniqueId = Date.now();
|
|
const flowPath = `f/test/history_flow_${uniqueId}`;
|
|
await createRemoteFlow(backend, flowPath);
|
|
|
|
const result = await backend.runCLICommand(
|
|
["flow", "history", flowPath, "--json"],
|
|
tempDir
|
|
);
|
|
|
|
expect(result.code).toEqual(0);
|
|
const parsed = JSON.parse(result.stdout);
|
|
expect(Array.isArray(parsed)).toBe(true);
|
|
expect(parsed.length).toBeGreaterThanOrEqual(1);
|
|
expect(parsed[0]).toHaveProperty("id");
|
|
expect(parsed[0]).toHaveProperty("created_at");
|
|
});
|
|
});
|
|
|
|
test("flow history shows table output", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const uniqueId = Date.now();
|
|
const flowPath = `f/test/history_table_flow_${uniqueId}`;
|
|
await createRemoteFlow(backend, flowPath);
|
|
|
|
const result = await backend.runCLICommand(
|
|
["flow", "history", flowPath],
|
|
tempDir
|
|
);
|
|
|
|
expect(result.code).toEqual(0);
|
|
expect(result.stdout).toContain("Version");
|
|
expect(result.stdout).toContain("Created At");
|
|
});
|
|
});
|
|
|
|
test("flow show-version returns specific version", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const uniqueId = Date.now();
|
|
const flowPath = `f/test/show_ver_flow_${uniqueId}`;
|
|
await createRemoteFlow(backend, flowPath);
|
|
|
|
const histResult = await backend.runCLICommand(
|
|
["flow", "history", flowPath, "--json"],
|
|
tempDir
|
|
);
|
|
expect(histResult.code).toEqual(0);
|
|
const versions = JSON.parse(histResult.stdout);
|
|
expect(versions.length).toBeGreaterThanOrEqual(1);
|
|
|
|
const versionId = String(versions[0].id);
|
|
|
|
const showResult = await backend.runCLICommand(
|
|
["flow", "show-version", flowPath, versionId, "--json"],
|
|
tempDir
|
|
);
|
|
|
|
expect(showResult.code).toEqual(0);
|
|
const flow = JSON.parse(showResult.stdout);
|
|
expect(flow.path).toBe(flowPath);
|
|
expect(flow.value).toBeDefined();
|
|
});
|
|
});
|
|
});
|