mod common;
use common::{copy_fixture, run_ok, workdir};
#[test]
fn atlas_renders_typed_contracts_surfaces_and_coverage() {
let repo = copy_fixture("python-facts-service");
let dir = workdir(repo.path());
run_ok(&dir, &["index", "--quiet"]);
let atlas = run_ok(&dir, &["atlas"]);
assert!(atlas.contains("# CONTRACTS"), "{atlas}");
assert!(atlas.contains("http: GET /ping"), "http contract: {atlas}");
assert!(atlas.contains("http: GET /items/{item_id}"), "http contract: {atlas}");
assert!(atlas.contains("http: GET /admin"), "http contract: {atlas}");
assert!(atlas.contains("cli: --port"), "cli contract: {atlas}");
assert!(atlas.contains("cli: --verbose"), "cli contract: {atlas}");
assert!(atlas.contains("cli: --workers"), "cli contract: {atlas}");
assert!(atlas.contains("config: DEBUG"), "config contract: {atlas}");
assert!(atlas.contains("config: PORT"), "config contract: {atlas}");
assert!(atlas.contains("config: DATABASE_URL"), "config contract: {atlas}");
assert!(atlas.contains("create_app [public_api]"), "export surface: {atlas}");
assert!(atlas.contains("ping [public_api]"), "export surface: {atlas}");
assert!(
!atlas.contains("[framework_callback]"),
"no fabricated callback surface: {atlas}"
);
assert!(atlas.contains("GET /ping [route]"), "route entrypoint: {atlas}");
assert!(atlas.contains("# MODEL COVERAGE"), "{atlas}");
for key in [
"parsed_source_files:",
"exported_api:",
"call_targets_resolved:",
"invocation_surfaces:",
"dynamic_receivers_unresolved:",
"framework_registrations_unknown:",
"stale_evidence:",
"unparsed_files:",
"model_epoch_generations:",
] {
assert!(atlas.contains(key), "coverage key {key} missing: {atlas}");
}
assert!(atlas.contains("parsed_source_files: 75% (3/4)"), "{atlas}");
assert!(atlas.contains("call_targets_resolved: 0% (0/7"), "{atlas}");
assert!(atlas.contains("dynamic_receivers_unresolved: 7"), "{atlas}");
assert!(atlas.contains("stale_evidence: 0 (model FRESH)"), "{atlas}");
let atlas2 = run_ok(&dir, &["atlas"]);
assert_eq!(atlas, atlas2, "atlas must be deterministic");
let out = run_ok(&dir, &["export", "system-ir.json"]);
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
let entities = v["entities"].as_array().unwrap();
let has_kind_name = |kind: &str, name: &str| {
entities
.iter()
.any(|e| e["kind"] == kind && e["name"].as_str() == Some(name))
};
assert!(
has_kind_name("route", "GET /ping"),
"route entity for GET /ping missing"
);
assert!(
has_kind_name("contract", "router") && has_kind_name("contract", "bp"),
"registration-target contract entities missing"
);
}
#[test]
fn model_coverage_is_droppable_but_contracts_never() {
let repo = copy_fixture("python-facts-service");
let dir = workdir(repo.path());
run_ok(&dir, &["index", "--quiet"]);
let out = run_ok(&dir, &["atlas", "--budget", "250", "--json"]);
let v: serde_json::Value = serde_json::from_str(&out).unwrap();
assert!(
v["tokens"].as_u64().unwrap() <= 250,
"hard cap violated: {}",
v["tokens"]
);
let dropped: Vec<&str> = v["dropped_sections"]
.as_array()
.map(|a| {
a.iter()
.filter_map(|x| x.as_str())
.collect::<Vec<_>>()
})
.unwrap_or_default();
assert!(!dropped.is_empty(), "cuts must be recorded: {out}");
let cov_idx = dropped.iter().position(|d| d.contains("MODEL COVERAGE"));
let con_idx = dropped.iter().position(|d| d.contains("CONTRACTS"));
if let (Some(cov), Some(con)) = (cov_idx, con_idx) {
assert!(
cov < con,
"coverage must drop before contracts: {dropped:?}"
);
}
}