use std::fs;
use std::path::PathBuf;
use std::process::Command;
fn temp_dir(tag: &str) -> PathBuf {
let dir = std::env::temp_dir().join(format!(
"camel-scenario-boot-root-{tag}-{}",
std::process::id()
));
fs::create_dir_all(&dir).expect("create temp dir"); dir
}
const CAMEL_TOML: &str = "# minimal\n";
const ROUTE: &str = r#"
routes:
- id: nested-route
from: direct:start
steps:
- to: log:info
"#;
const DOC: &str = r#"
routeFiles: [local.yaml]
scenario:
- send:
to: direct:start
"#;
#[test]
fn nested_scenario_doc_boots_via_cli() {
let root = temp_dir("nested");
let sub = root.join("sub");
fs::create_dir_all(&sub).expect("mkdir sub"); fs::write(root.join("Camel.toml"), CAMEL_TOML).expect("write Camel.toml"); fs::write(sub.join("local.yaml"), ROUTE).expect("write route file"); let doc = sub.join("doc.test.yaml");
fs::write(&doc, DOC).expect("write document");
let output = Command::new(env!("CARGO_BIN_EXE_camel"))
.arg("test")
.arg(&doc)
.output()
.expect("spawn camel test"); let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
assert_eq!(
output.status.code(),
Some(0),
"nested scenario must boot through the ancestor root\nstdout:\n{stdout}\nstderr:\n{stderr}"
);
assert!(
stdout.contains("1 passed, 0 failed"),
"the scenario action must pass\nstdout:\n{stdout}\nstderr:\n{stderr}"
);
}
#[test]
fn no_root_fails_named_exit_2() {
let dir = temp_dir("no-root");
let doc = dir.join("case.test.yaml");
fs::write(&doc, DOC).expect("write document");
let output = Command::new(env!("CARGO_BIN_EXE_camel"))
.arg("test")
.arg(&doc)
.output()
.expect("spawn camel test"); let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
assert_eq!(
output.status.code(),
Some(2),
"a scenario document without a Camel.toml ancestor must exit 2\nstdout:\n{stdout}\nstderr:\n{stderr}"
);
assert!(
stderr.contains("no Camel.toml ancestor"),
"stderr must name the missing project root\nstdout:\n{stdout}\nstderr:\n{stderr}"
);
}