Files
windmill/cli/test/group_commands.test.ts
Ruben Fiszel d29cb234db feat(cli): add job, group, audit, token commands and schedule enable/disable (#8581)
* 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>
2026-03-28 09:18:55 +00:00

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