diff --git a/test_package/functional/relative_links/guide.md b/test_package/functional/relative_links/guide.md new file mode 100644 index 0000000..b19f950 --- /dev/null +++ b/test_package/functional/relative_links/guide.md @@ -0,0 +1,11 @@ +# Guide + +## Authentication + +Tokens are required for all calls. + +## See Also + +- [Back to index](./index.md) +- [Deep page](./sub/deep.md) +- [External](https://example.com/docs) diff --git a/test_package/functional/relative_links/index.md b/test_package/functional/relative_links/index.md new file mode 100644 index 0000000..a357759 --- /dev/null +++ b/test_package/functional/relative_links/index.md @@ -0,0 +1,16 @@ +# Index Page + +## Sibling links + +- [See the guide](./guide.md) +- [Guide auth section](./guide.md#authentication) + +## Subdirectory links + +- [Deep page](./sub/deep.md) +- [Deep page section](./sub/deep.md#details) + +## Mixed + +- [External link](https://example.com) +- [Header in this page](#sibling-links) diff --git a/test_package/functional/relative_links/sub/deep.md b/test_package/functional/relative_links/sub/deep.md new file mode 100644 index 0000000..8da2011 --- /dev/null +++ b/test_package/functional/relative_links/sub/deep.md @@ -0,0 +1,11 @@ +# Deep Page + +## Details + +More detailed information here. + +## Parent traversal links + +- [Back to index](../index.md) +- [Guide auth](../guide.md#authentication) +- [Local header](#details) diff --git a/test_package/unit/test_renderer.py b/test_package/unit/test_renderer.py index fc95539..623915f 100644 --- a/test_package/unit/test_renderer.py +++ b/test_package/unit/test_renderer.py @@ -336,6 +336,33 @@ def test_renderer_relative_link_with_fragment_enabled(): assert relative_link.escaped_original == "document/../path/page.md#header-name" +@pytest.mark.parametrize( + "url, expected_path, expected_fragment", + [ + ("./guide.md", "./guide.md", ""), + ("./guide.md#authentication", "./guide.md", "authentication"), + ("./sub/deep.md", "./sub/deep.md", ""), + ("./sub/deep.md#details", "./sub/deep.md", "details"), + ("../index.md", "../index.md", ""), + ("../guide.md#authentication", "../guide.md", "authentication"), + ], +) +def test_renderer_relative_link_variants(url, expected_path, expected_fragment): + renderer = ConfluenceRenderer(enable_relative_links=True) + + relative_link_regex = re.compile( + r"link text" + ) + temporary_link = renderer.link(text="link text", url=url, title=None) + assert relative_link_regex.match(temporary_link) + assert len(renderer.relative_links) == 1 + relative_link = renderer.relative_links[0] + + assert relative_link.path == expected_path + assert relative_link.fragment == expected_fragment + assert relative_link.original == url + + def test_renderer_relative_link_disabled(): renderer = ConfluenceRenderer(enable_relative_links=False)