from types import SimpleNamespace from docforge.mkdocs_links import LinkFixPlugin def _page(dest_uri: str): return SimpleNamespace(file=SimpleNamespace(dest_uri=dest_uri)) def _fix(markdown: str, dest_uri: str) -> str: return LinkFixPlugin().on_page_markdown( markdown, page=_page(dest_uri), config=SimpleNamespace(), files=SimpleNamespace(), ) def test_root_page_keeps_single_parent(): src = "[lib](../lib/pkg/index.md)" assert _fix(src, "index.html") == src def test_nested_page_adds_directory_depth(): assert _fix("[lib](../lib/pkg/index.md)", "01_overview/index.html") == ( "[lib](../../lib/pkg/index.md)" ) def test_deeply_nested_page_adds_two_levels(): src = "[lib](../lib/pkg/index.md)" got = _fix(src, "04_development/02_releasing/index.html") assert got == "[lib](../../../lib/pkg/index.md)" def test_multiple_cross_kind_links_are_rebased(): src = "See [a](../lib/a) and [b](../api/b)." got = _fix(src, "01_overview/index.html") assert got == "See [a](../../lib/a) and [b](../../api/b)." def test_wiki_kind_is_rebased(): assert _fix("[w](../wiki/index.md)", "01_overview/index.html") == ( "[w](../../wiki/index.md)" ) def test_relative_within_kind_untouched(): src = "[next](02_install.md) and [prev](../index.md)" assert _fix(src, "01_overview/index.html") == src def test_absolute_and_url_links_untouched(): src = "[site](https://example.com/lib/x) and [root](/lib/x) and [r](lib/x)" assert _fix(src, "a/index.html") == src