import pytest from sir import EdgeKind, NodeKind, SemanticEdge, SemanticNode, SirSnapshot, SourceRef from sir import SnapshotValidationError, validate_snapshot def make_nodes(): module = SemanticNode( semantic_id="module.demo", lineage_id="lineage.module.demo", kind=NodeKind.MODULE, name="Module", qualified_name="Module", source_ref=SourceRef(source_path="module.bsl"), ) procedure = SemanticNode( semantic_id="procedure.posting", lineage_id="lineage.procedure.posting", kind=NodeKind.PROCEDURE, name="Проведение", qualified_name="Module.Проведение", source_ref=SourceRef(source_path="module.bsl"), ) return module, procedure def test_snapshot_validation_ok(): module, procedure = make_nodes() edge = SemanticEdge( edge_id="edge.declares.1", kind=EdgeKind.DECLARES, source_lineage=module.lineage_id, target_lineage=procedure.lineage_id, ) snapshot = SirSnapshot( snapshot_id="snapshot.demo", project_id="demo", nodes=[module, procedure], edges=[edge] ) validate_snapshot(snapshot) def test_snapshot_validation_dangling_edge(): module, _procedure = make_nodes() edge = SemanticEdge( edge_id="edge.bad.1", kind=EdgeKind.CALLS, source_lineage=module.lineage_id, target_lineage="lineage.missing", ) snapshot = SirSnapshot(snapshot_id="snapshot.demo", project_id="demo", nodes=[module], edges=[edge]) with pytest.raises(SnapshotValidationError): validate_snapshot(snapshot)