Files
graphify/tests/test_build.py
T

63 lines
2.6 KiB
Python

import json
from pathlib import Path
from graphify.build import build_from_json, build
FIXTURES = Path(__file__).parent / "fixtures"
def load_extraction():
return json.loads((FIXTURES / "extraction.json").read_text())
def test_build_from_json_node_count():
G = build_from_json(load_extraction())
assert G.number_of_nodes() == 4
def test_build_from_json_edge_count():
G = build_from_json(load_extraction())
assert G.number_of_edges() == 4
def test_nodes_have_label():
G = build_from_json(load_extraction())
assert G.nodes["n_transformer"]["label"] == "Transformer"
def test_edges_have_confidence():
G = build_from_json(load_extraction())
data = G.edges["n_attention", "n_concept_attn"]
assert data["confidence"] == "INFERRED"
def test_ambiguous_edge_preserved():
G = build_from_json(load_extraction())
data = G.edges["n_layernorm", "n_concept_attn"]
assert data["confidence"] == "AMBIGUOUS"
def test_legacy_node_source_canonicalized():
"""Legacy 'source' key on nodes is renamed to 'source_file' before graph build."""
ext = {"nodes": [{"id": "n1", "label": "A", "file_type": "code", "source": "a.py"}],
"edges": [], "input_tokens": 0, "output_tokens": 0}
G = build_from_json(ext)
assert "source_file" in G.nodes["n1"]
assert G.nodes["n1"]["source_file"] == "a.py"
assert "source" not in G.nodes["n1"]
def test_legacy_edge_from_to_canonicalized():
"""Legacy 'from'/'to' keys on edges are accepted alongside 'source'/'target'."""
ext = {"nodes": [{"id": "n1", "label": "A", "file_type": "code", "source_file": "a.py"},
{"id": "n2", "label": "B", "file_type": "code", "source_file": "b.py"}],
"edges": [{"from": "n1", "to": "n2", "relation": "calls",
"confidence": "EXTRACTED", "source_file": "a.py", "weight": 1.0}],
"input_tokens": 0, "output_tokens": 0}
G = build_from_json(ext)
assert G.number_of_edges() == 1
def test_build_merges_multiple_extractions():
ext1 = {"nodes": [{"id": "n1", "label": "A", "file_type": "code", "source_file": "a.py"}],
"edges": [], "input_tokens": 0, "output_tokens": 0}
ext2 = {"nodes": [{"id": "n2", "label": "B", "file_type": "document", "source_file": "b.md"}],
"edges": [{"source": "n1", "target": "n2", "relation": "references",
"confidence": "INFERRED", "source_file": "b.md", "weight": 1.0}],
"input_tokens": 0, "output_tokens": 0}
G = build([ext1, ext2])
assert G.number_of_nodes() == 2
assert G.number_of_edges() == 1