import json import tempfile from pathlib import Path from graphify.build import build_from_json from graphify.cluster import cluster from graphify.export import to_json, to_cypher, to_graphml, to_html, to_canvas FIXTURES = Path(__file__).parent / "fixtures" def make_graph(): return build_from_json(json.loads((FIXTURES / "extraction.json").read_text())) def test_to_json_creates_file(): G = make_graph() communities = cluster(G) with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / "graph.json" to_json(G, communities, str(out)) assert out.exists() def test_to_json_valid_json(): G = make_graph() communities = cluster(G) with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / "graph.json" to_json(G, communities, str(out)) data = json.loads(out.read_text()) assert "nodes" in data assert "links" in data def test_to_json_nodes_have_community(): G = make_graph() communities = cluster(G) with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / "graph.json" to_json(G, communities, str(out)) data = json.loads(out.read_text()) for node in data["nodes"]: assert "community" in node def test_to_cypher_creates_file(): G = make_graph() with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / "cypher.txt" to_cypher(G, str(out)) assert out.exists() def test_to_cypher_contains_merge_statements(): G = make_graph() with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / "cypher.txt" to_cypher(G, str(out)) content = out.read_text() assert "MERGE" in content def test_to_graphml_creates_file(): G = make_graph() communities = cluster(G) with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / "graph.graphml" to_graphml(G, communities, str(out)) assert out.exists() def test_to_graphml_valid_xml(): G = make_graph() communities = cluster(G) with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / "graph.graphml" to_graphml(G, communities, str(out)) content = out.read_text() assert "