Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions test_package/functional/relative_links/guide.md
Original file line number Diff line number Diff line change
@@ -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)
16 changes: 16 additions & 0 deletions test_package/functional/relative_links/index.md
Original file line number Diff line number Diff line change
@@ -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)
11 changes: 11 additions & 0 deletions test_package/functional/relative_links/sub/deep.md
Original file line number Diff line number Diff line change
@@ -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)
27 changes: 27 additions & 0 deletions test_package/unit/test_renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"<a href=\"md2cf-internal-link-([-a-z0-9]+)\">link text</a>"
)
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)

Expand Down
Loading