mod common;
use common::{copy_fixture, run_ok, workdir};
#[test]
fn rust_service_indexes_and_atlas() {
let repo = copy_fixture("rust-service");
let dir = workdir(repo.path());
run_ok(&dir, &["index", "--quiet"]);
let flows = run_ok(&dir, &["flows"]);
assert!(flows.contains("main"), "flows must mention main: {flows}");
let atlas = run_ok(&dir, &["atlas"]);
assert!(atlas.contains("main [entrypoint]"), "entrypoint in atlas: {atlas}");
assert!(atlas.contains("SRC"), "src service component in atlas: {atlas}");
let ir = run_ok(&dir, &["export", "system-ir.json"]);
let v: serde_json::Value = serde_json::from_str(&ir).unwrap();
let syms: Vec<&str> = v["entities"]
.as_array()
.unwrap()
.iter()
.filter(|e| e["kind"] == "symbol" && e["attributes"]["file"] == "src/main.rs")
.filter_map(|e| e["name"].as_str())
.collect();
assert!(syms.contains(&"main"), "main symbol: {syms:?}");
assert!(syms.contains(&"publish_with_retry"), "retry symbol: {syms:?}");
let task = run_ok(&dir, &["context", "task", "describe the retry behavior"]);
assert!(task.contains("publish_with_retry"), "task pack: {task}");
assert!(task.contains("retry(attempts = 3"), "retry policy in task pack: {task}");
}