from pathlib import Path from docforge.loader import GriffeLoader, discover_module_paths from docforge.renderers.mkdocs import MkDocsRenderer def test_mkdocs_emits_all_modules(tmp_path: Path) -> None: loader = GriffeLoader() discovered_paths = discover_module_paths( "docforge", Path(r"C:\Users\vishe\WorkSpace\code\aetos\doc-forge") ) project = loader.load_project( discovered_paths ) renderer = MkDocsRenderer() renderer.generate_sources(project, tmp_path) emitted = { p.relative_to(tmp_path).as_posix() for p in tmp_path.rglob("*.md") } module_paths = [m.path for m in project.get_all_modules()] expected = set() for path in module_paths: parts = path.split(".") # treat package as index.md if any other module is nested under it is_package = any( other != path and other.startswith(path + ".") for other in module_paths ) if is_package: expected.add("/".join(parts) + "/index.md") else: expected.add("/".join(parts) + ".md") # expected = { # 'docforge/cli/main.md', # 'docforge/renderers/index.md', # 'docforge/loader/index.md', # 'docforge/model/index.md', # 'docforge/nav/index.md', # 'docforge/renderers/mkdocs.md', # 'docforge/index.md', # 'docforge/loader/griffe_loader.md', # 'docforge/model/object.md', # 'docforge/cli/index.md', # 'docforge/nav/resolver.md', # 'docforge/renderers/base.md', # 'docforge/nav/mkdocs.md', # 'docforge/nav/spec.md', # 'docforge/model/module.md', # 'docforge/cli/mkdocs.md', # 'docforge/model/project.md' # } missing = expected - emitted assert not missing, f"Missing markdown files for modules: {missing}"