File size: 1,829 Bytes
1432cf4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from __future__ import annotations

from pathlib import Path

from sqlmodel import Session, select

from db.schema import ModuleEdge
from db.seed import seed_project
from db.store import Store
from parser.ast_parser import parse_python_file
from parser.graph_builder import build_edges


def test_build_edges_resolves_from_import_relative_targets(tmp_path: Path) -> None:
    pkg = tmp_path / "pkg"
    pkg.mkdir(parents=True)
    (pkg / "__init__.py").write_text("", encoding="utf-8")
    (pkg / "a.py").write_text("from . import b\nfrom .c import x\n", encoding="utf-8")
    (pkg / "b.py").write_text("VALUE = 1\n", encoding="utf-8")
    (pkg / "c.py").write_text("x = 1\n", encoding="utf-8")

    parsed = [parse_python_file(path, tmp_path) for path in sorted(pkg.glob("*.py"))]
    module_ids = {item.module_id for item in parsed}

    edges = build_edges(parsed_modules=parsed, module_ids=module_ids, chunk_ids_by_parent={})
    pairs = {(edge.source_module_id, edge.target_module_id) for edge in edges}

    assert ("pkg.a", "pkg.b") in pairs
    assert ("pkg.a", "pkg.c") in pairs


def test_seed_project_creates_parent_chunk_connectivity_edges(tmp_path: Path) -> None:
    source_root = Path("sample_project").resolve()
    db_path = tmp_path / "graph_edges.db"

    seed_project(source_root, db_path=str(db_path), force=True)
    store = Store(source_root=str(source_root), db_path=str(db_path))

    with Session(store.engine) as session:
        contains_edges = list(
            session.exec(
                select(ModuleEdge).where(
                    ModuleEdge.source_root == store.config.source_root,
                    ModuleEdge.source_module_id == "huge_module",
                    ModuleEdge.import_line.startswith("contains:"),
                )
            ).all()
        )

    assert contains_edges