Initial SFERA platform baseline
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
from sir import SirDelta
|
||||
|
||||
|
||||
def test_delta_defaults():
|
||||
delta = SirDelta(delta_id="delta.1", snapshot_from="a", snapshot_to="b")
|
||||
assert delta.added_nodes == []
|
||||
assert delta.updated_nodes == []
|
||||
assert delta.removed_nodes == []
|
||||
@@ -0,0 +1,15 @@
|
||||
from sir import NodeKind, SemanticNode, SirSnapshot, SourceRef, compute_snapshot_hash
|
||||
|
||||
|
||||
def test_snapshot_hash_deterministic_ignores_created_at():
|
||||
node = 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"),
|
||||
)
|
||||
a = SirSnapshot(snapshot_id="snapshot.demo", project_id="demo", nodes=[node])
|
||||
b = SirSnapshot(snapshot_id="snapshot.demo", project_id="demo", nodes=[node])
|
||||
assert compute_snapshot_hash(a) == compute_snapshot_hash(b)
|
||||
@@ -0,0 +1,17 @@
|
||||
from sir import NodeKind, SemanticNode, SirSnapshot, SourceRef, snapshot_from_json, snapshot_to_json
|
||||
|
||||
|
||||
def test_snapshot_serialization_roundtrip():
|
||||
node = 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"),
|
||||
)
|
||||
snapshot = SirSnapshot(snapshot_id="snapshot.demo", project_id="demo", nodes=[node])
|
||||
data = snapshot_to_json(snapshot)
|
||||
restored = snapshot_from_json(data)
|
||||
assert restored.snapshot_id == snapshot.snapshot_id
|
||||
assert restored.nodes[0].lineage_id == node.lineage_id
|
||||
@@ -0,0 +1,51 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user