105 lines
2.1 KiB
Python
105 lines
2.1 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from docforge.nav import NavSpec
|
|
from docforge.nav import resolve_nav
|
|
|
|
|
|
def _write_docs(root: Path, paths: list[str]) -> None:
|
|
for p in paths:
|
|
full = root / p
|
|
full.parent.mkdir(parents=True, exist_ok=True)
|
|
full.write_text(f"# {p}", encoding="utf-8")
|
|
|
|
|
|
def test_resolve_simple_nav(tmp_path: Path):
|
|
docs = tmp_path / "docs"
|
|
_write_docs(
|
|
docs,
|
|
[
|
|
"openapi_first/index.md",
|
|
"openapi_first/app.md",
|
|
"openapi_first/client.md",
|
|
],
|
|
)
|
|
|
|
spec = NavSpec(
|
|
home="openapi_first/index.md",
|
|
groups={
|
|
"Core": [
|
|
"openapi_first/app.md",
|
|
"openapi_first/client.md",
|
|
]
|
|
},
|
|
)
|
|
|
|
resolved = resolve_nav(spec, docs)
|
|
|
|
assert resolved.home == "openapi_first/index.md"
|
|
assert list(resolved.groups["Core"]) == [
|
|
docs / "openapi_first/app.md",
|
|
docs / "openapi_first/client.md",
|
|
]
|
|
|
|
|
|
def test_wildcard_expansion_preserves_order(tmp_path: Path):
|
|
docs = tmp_path / "docs"
|
|
_write_docs(
|
|
docs,
|
|
[
|
|
"pkg/a.md",
|
|
"pkg/b.md",
|
|
"pkg/c.md",
|
|
],
|
|
)
|
|
|
|
spec = NavSpec(
|
|
home=None,
|
|
groups={"All": ["pkg/*.md"]},
|
|
)
|
|
|
|
resolved = resolve_nav(spec, docs)
|
|
|
|
paths = [p.name for p in resolved.groups["All"]]
|
|
assert paths == ["a.md", "b.md", "c.md"]
|
|
|
|
|
|
def test_missing_doc_file_raises(tmp_path: Path):
|
|
docs = tmp_path / "docs"
|
|
docs.mkdir()
|
|
|
|
spec = NavSpec(
|
|
home="missing.md",
|
|
groups={},
|
|
)
|
|
|
|
with pytest.raises(FileNotFoundError):
|
|
resolve_nav(spec, docs)
|
|
|
|
|
|
def test_all_files_returns_flat_sequence(tmp_path: Path):
|
|
docs = tmp_path / "docs"
|
|
_write_docs(
|
|
docs,
|
|
[
|
|
"a.md",
|
|
"b.md",
|
|
"c.md",
|
|
],
|
|
)
|
|
|
|
spec = NavSpec(
|
|
home="a.md",
|
|
groups={"G": ["b.md", "c.md"]},
|
|
)
|
|
|
|
resolved = resolve_nav(spec, docs)
|
|
|
|
files = list(resolved.all_files())
|
|
assert files == [
|
|
docs / "a.md",
|
|
docs / "b.md",
|
|
docs / "c.md",
|
|
]
|