mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-07 08:27:12 +00:00
Wrap root CLI errors at the main boundary so fatal diagnostics use miette's styled renderer while preserving existing telemetry, exit codes, and auth help hints.
91 lines
2.3 KiB
Rust
91 lines
2.3 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
|
||
|
||
Usage: fabro graph [OPTIONS] <WORKFLOW>
|
||
|
||
Arguments:
|
||
<WORKFLOW>
|
||
Path to the .fabro workflow file, .toml task config, or project workflow name
|
||
|
||
Options:
|
||
--json
|
||
Output as JSON
|
||
|
||
[env: FABRO_JSON=]
|
||
|
||
--server <SERVER>
|
||
Fabro server target: http(s) URL or absolute Unix socket path
|
||
|
||
[env: FABRO_SERVER=]
|
||
|
||
--debug
|
||
Enable DEBUG-level logging (default is INFO)
|
||
|
||
[env: FABRO_DEBUG=]
|
||
|
||
--format <FORMAT>
|
||
Output format
|
||
|
||
[default: svg]
|
||
[possible values: svg]
|
||
|
||
--no-upgrade-check
|
||
Disable automatic upgrade check
|
||
|
||
[env: FABRO_NO_UPGRADE_CHECK=true]
|
||
|
||
-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
|
||
|
||
--quiet
|
||
Suppress non-essential output
|
||
|
||
[env: FABRO_QUIET=]
|
||
|
||
--verbose
|
||
Enable verbose output
|
||
|
||
[env: FABRO_VERBOSE=]
|
||
|
||
-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)
|
||
× Validation failed
|
||
");
|
||
}
|