use super::*;
#[test]
fn stage4_byte_identity_dropping_the_heuristic_edges_reproduces_the_pre_stage4_edge_array() {
let files = fragments_for(BYTE_IDENTITY_FIXTURE);
let g = resolve_graph(&no_git_root(), &files);
let precise: Vec<&Edge> = g
.edges
.iter()
.filter(|e| {
!matches!(
e,
Edge::Inherits {
heuristic: true,
..
} | Edge::UsesType {
heuristic: true,
..
} | Edge::UsesMember {
heuristic: true,
..
}
)
})
.collect();
assert_eq!(
serde_json::to_string(&precise).unwrap(),
format!("[{}]", PRE_STAGE4_EDGE_ROWS.join(",")),
"stage 4 is emission-only: it may ADD tagged edges and may never move, drop or re-key a precise one"
);
assert_eq!(
heuristic_member_edges_from(&g, "Consumers/Consumer.cs"),
vec![
("App.Alpha.Config", 16),
("App.Beta.Config", 16),
("App.Solo.Counter", 18)
]
);
}
#[test]
fn stage6_without_a_project_model_the_byte_identity_fixture_serializes_exactly_as_before() {
let files = fragments_for(BYTE_IDENTITY_FIXTURE);
let root = no_git_root();
let legacy = serde_json::to_string(&resolve_graph(&root, &files)).unwrap();
let modelled =
serde_json::to_string(&resolve_graph_with_model(&root, &files, &[], None)).unwrap();
assert_eq!(
legacy, modelled,
"a None model must leave the artifact byte-identical, key for key"
);
assert!(
!legacy.contains(r#""units""#),
"no `.csproj`, no `units` key -- it is omit-when-empty precisely so a \
csproj-less repo's graph.json is unchanged: {legacy}"
);
}