52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
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)
|