fabro/lib/crates/fabro-cli/tests/it/cmd/graph.rs
Bryan Helmkamp 9bfd7f5593
Remove server feature flag from fabro-cli, always compile server in
The server subcommand and related code were gated behind
cfg(feature = "server"). This removes the feature flag entirely,
making fabro-server a required dependency so the server command
is always available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 10:09:56 -07:00

96 lines
2.5 KiB
Rust

use fabro_test::{fabro_snapshot, test_context};
use super::support::fixture;
#[test]
fn help() {
let context = test_context!();
let mut cmd = context.command();
cmd.args(["graph", "--help"]);
fabro_snapshot!(context.filters(), cmd, @"
success: true
exit_code: 0
----- stdout -----
Render a workflow graph as SVG or PNG
Usage: fabro graph [OPTIONS] <WORKFLOW>
Arguments:
<WORKFLOW>
Path to the .fabro workflow file, .toml task config, or project workflow name
Options:
--format <FORMAT>
Output format
[default: svg]
[possible values: svg, png]
--json
Output as JSON
[env: FABRO_JSON=]
--debug
Enable DEBUG-level logging (default is INFO)
[env: FABRO_DEBUG=]
-o, --output <OUTPUT>
Output file path (defaults to stdout)
-d, --direction <DIRECTION>
Graph layout direction (overrides the DOT file's rankdir)
Possible values:
- lr: Left to right
- tb: Top to bottom
--no-upgrade-check
Disable automatic upgrade check
[env: FABRO_NO_UPGRADE_CHECK=true]
--quiet
Suppress non-essential output
[env: FABRO_QUIET=]
--verbose
Enable verbose output
[env: FABRO_VERBOSE=]
--storage-dir <STORAGE_DIR>
Storage directory (default: ~/.fabro)
[env: FABRO_STORAGE_DIR=[STORAGE_DIR]]
--server-url <SERVER_URL>
Server URL (overrides server.base_url from user.toml)
[env: FABRO_SERVER_URL=]
-h, --help
Print help (see a summary with '-h')
----- stderr -----
");
}
#[test]
fn graph_invalid_workflow_fails_after_diagnostics() {
let context = test_context!();
let workflow = fixture("invalid.fabro");
let mut cmd = context.command();
cmd.args(["graph", workflow.to_str().unwrap()]);
fabro_snapshot!(context.filters(), cmd, @"
success: false
exit_code: 1
----- stdout -----
----- stderr -----
error: Pipeline must have exactly one start node (shape=Mdiamond or id start/Start) (start_node)
error [node: exit]: Exit node 'exit' has 1 outgoing edge(s) but must have none (exit_no_outgoing)
error: Validation failed
");
}