//! Integration guard: the `aura graph` viewer renders multiply-nested composites //! (a composite inside a composite inside the root) with valid Graphviz node ids //! at every depth. //! //! Like `viewer_dot_ids.rs`/`viewer_dot.rs`, the property lives in JavaScript //! (`genDot` in assets/graph-viewer.js), so this shells out to `node` running the //! headless guard `tests/viewer_nested_depth.mjs`, which loads the real viewer //! module and the re-captured sample fixture and expands it recursively to depth 2. //! //! `node` is REQUIRED: if it is not on PATH this test FAILS (a skipped guard is //! not a guard). use std::path::PathBuf; use std::process::Command; #[test] fn viewer_renders_nested_composites_to_depth_2_with_valid_ids() { let script = PathBuf::from(env!("CARGO_MANIFEST_DIR")) .join("tests") .join("viewer_nested_depth.mjs"); assert!( script.exists(), "guard script missing at {}", script.display() ); let out = match Command::new("node").arg(&script).output() { Ok(out) => out, Err(e) => panic!( "node is required for the viewer depth-2 nesting guard but could not be run \ ({e}); install Node.js or ensure `node` is on PATH" ), }; let stdout = String::from_utf8_lossy(&out.stdout); let stderr = String::from_utf8_lossy(&out.stderr); assert!( out.status.success(), "viewer depth-2 nesting guard failed (exit {:?}).\n--- node stdout ---\n{stdout}\n--- node stderr ---\n{stderr}", out.status.code() ); }