* 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>
139 lines
4.3 KiB
TypeScript
139 lines
4.3 KiB
TypeScript
/**
|
|
* Integration tests for `wmill group` commands:
|
|
* list, get, create, delete, add-user, remove-user
|
|
*/
|
|
|
|
import { expect, test, describe } from "bun:test";
|
|
import { withTestBackend } from "./test_backend.ts";
|
|
import { setupWorkspaceProfile } from "./new_commands_helpers.ts";
|
|
|
|
describe("group command", () => {
|
|
test("group list returns valid JSON", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const result = await backend.runCLICommand(
|
|
["group", "list", "--json"],
|
|
tempDir
|
|
);
|
|
|
|
expect(result.code).toEqual(0);
|
|
const parsed = JSON.parse(result.stdout);
|
|
expect(Array.isArray(parsed)).toBe(true);
|
|
expect(parsed.some((g: any) => g.name === "all")).toBe(true);
|
|
});
|
|
});
|
|
|
|
test("group list shows table output", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const result = await backend.runCLICommand(
|
|
["group", "list"],
|
|
tempDir
|
|
);
|
|
|
|
expect(result.code).toEqual(0);
|
|
expect(result.stdout).toContain("Name");
|
|
expect(result.stdout).toContain("Summary");
|
|
expect(result.stdout).toContain("Members");
|
|
});
|
|
});
|
|
|
|
test("group create + get + delete lifecycle", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const groupName = `cli_test_${Date.now()}`;
|
|
|
|
// Create
|
|
const createResult = await backend.runCLICommand(
|
|
["group", "create", groupName, "--summary", "CLI test group"],
|
|
tempDir
|
|
);
|
|
expect(createResult.code).toEqual(0);
|
|
expect(createResult.stdout).toContain("created");
|
|
|
|
// Get
|
|
const getResult = await backend.runCLICommand(
|
|
["group", "get", groupName],
|
|
tempDir
|
|
);
|
|
expect(getResult.code).toEqual(0);
|
|
expect(getResult.stdout).toContain(groupName);
|
|
expect(getResult.stdout).toContain("CLI test group");
|
|
|
|
// Get --json
|
|
const getJsonResult = await backend.runCLICommand(
|
|
["group", "get", groupName, "--json"],
|
|
tempDir
|
|
);
|
|
expect(getJsonResult.code).toEqual(0);
|
|
const parsed = JSON.parse(getJsonResult.stdout);
|
|
expect(parsed.name).toBe(groupName);
|
|
|
|
// Delete
|
|
const deleteResult = await backend.runCLICommand(
|
|
["group", "delete", groupName],
|
|
tempDir
|
|
);
|
|
expect(deleteResult.code).toEqual(0);
|
|
expect(deleteResult.stdout).toContain("deleted");
|
|
});
|
|
});
|
|
|
|
test("group add-user and remove-user", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const groupName = `cli_member_test_${Date.now()}`;
|
|
|
|
await backend.runCLICommand(["group", "create", groupName], tempDir);
|
|
|
|
// Add user
|
|
const addResult = await backend.runCLICommand(
|
|
["group", "add-user", groupName, "admin@windmill.dev"],
|
|
tempDir
|
|
);
|
|
expect(addResult.code).toEqual(0);
|
|
expect(addResult.stdout).toContain("added");
|
|
|
|
// Remove user
|
|
const removeResult = await backend.runCLICommand(
|
|
["group", "remove-user", groupName, "admin@windmill.dev"],
|
|
tempDir
|
|
);
|
|
expect(removeResult.code).toEqual(0);
|
|
expect(removeResult.stdout).toContain("removed");
|
|
|
|
// Cleanup
|
|
await backend.runCLICommand(["group", "delete", groupName], tempDir);
|
|
});
|
|
});
|
|
|
|
test("default action (wmill group) lists groups", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
await setupWorkspaceProfile(backend);
|
|
|
|
const result = await backend.runCLICommand(["group", "--json"], tempDir);
|
|
|
|
expect(result.code).toEqual(0);
|
|
const parsed = JSON.parse(result.stdout);
|
|
expect(Array.isArray(parsed)).toBe(true);
|
|
});
|
|
});
|
|
|
|
test("group --help shows all subcommands", async () => {
|
|
await withTestBackend(async (backend, tempDir) => {
|
|
const result = await backend.runCLICommand(["group", "--help"], tempDir);
|
|
const output = result.stdout + result.stderr;
|
|
expect(output).toContain("list");
|
|
expect(output).toContain("get");
|
|
expect(output).toContain("create");
|
|
expect(output).toContain("delete");
|
|
expect(output).toContain("add-user");
|
|
expect(output).toContain("remove-user");
|
|
});
|
|
});
|
|
});
|