Skip to content

Commit d2fb381

Browse files
committed
formatting
1 parent 59ba547 commit d2fb381

File tree

8 files changed

+173
-109
lines changed

8 files changed

+173
-109
lines changed

__tests__/test_breakage.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import linking
1111
from linking import on_config, prepare_docs
1212

13+
1314
class TestLinkBreakageScenarios(unittest.TestCase):
1415
"""Tests focused on how links break and how to prevent/handle breakage."""
1516

@@ -394,5 +395,6 @@ def test_internal_link_macro_with_invalid_inputs(self) -> None:
394395
f"Unexpected exception for input {invalid_input}: {e}"
395396
)
396397

398+
397399
if __name__ == "__main__":
398400
unittest.main(verbosity=2)

__tests__/test_cli.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88

99
import linking
1010

11+
1112
class TestCommandLineInterface(unittest.TestCase):
1213
docs_path: Path
14+
1315
def setUp(self) -> None:
1416
"""Set up a temporary directory structure for each test."""
1517
self.test_dir = Path("./temp_test_convert_links")
@@ -25,35 +27,35 @@ def setUp(self) -> None:
2527
"DOCS_DIR": self.linking_module.DOCS_DIR,
2628
"REDIRECT_MAP_FILE": self.linking_module.REDIRECT_MAP_FILE,
2729
}
28-
self.linking_module.DOCS_DIR = self.docs_path # type: ignore
29-
self.linking_module.REDIRECT_MAP_FILE = self.redirect_map_file # type: ignore
30+
self.linking_module.DOCS_DIR = self.docs_path # type: ignore
31+
self.linking_module.REDIRECT_MAP_FILE = self.redirect_map_file # type: ignore
3032

3133
def test_main_handles_prepare_docs_exceptions(self) -> None:
32-
"""Test main() handles exceptions from prepare_docs gracefully."""
33-
# Arrange: Mock prepare_docs to raise an exception
34-
original_prepare_docs = linking.prepare_docs
34+
"""Test main() handles exceptions from prepare_docs gracefully."""
35+
# Arrange: Mock prepare_docs to raise an exception
36+
original_prepare_docs = linking.prepare_docs
3537

36-
def failing_prepare_docs(docs_dir_path=None):
37-
raise Exception("Test exception from prepare_docs")
38+
def failing_prepare_docs(docs_dir_path=None):
39+
raise Exception("Test exception from prepare_docs")
3840

39-
linking.prepare_docs = failing_prepare_docs
41+
linking.prepare_docs = failing_prepare_docs
4042

41-
import sys
43+
import sys
4244

43-
original_argv = sys.argv
44-
sys.argv = ["linking.py", "--prepare"]
45+
original_argv = sys.argv
46+
sys.argv = ["linking.py", "--prepare"]
4547

46-
try:
47-
# Act & Assert: Exception should propagate (this is expected behavior)
48-
with self.assertRaises(Exception) as context:
49-
linking.main()
48+
try:
49+
# Act & Assert: Exception should propagate (this is expected behavior)
50+
with self.assertRaises(Exception) as context:
51+
linking.main()
5052

51-
self.assertIn("Test exception from prepare_docs", str(context.exception))
53+
self.assertIn("Test exception from prepare_docs", str(context.exception))
5254

53-
finally:
54-
# Restore everything
55-
linking.prepare_docs = original_prepare_docs
56-
sys.argv = original_argv
55+
finally:
56+
# Restore everything
57+
linking.prepare_docs = original_prepare_docs
58+
sys.argv = original_argv
5759

5860
def test_main_with_prepare_argument(self) -> None:
5961
"""Test main() function when called with --prepare argument."""
@@ -118,5 +120,6 @@ def mock_prepare_docs(docs_dir_path=None):
118120
linking.prepare_docs = original_prepare_docs
119121
sys.argv = original_argv
120122

123+
121124
if __name__ == "__main__":
122125
unittest.main(verbosity=2)

__tests__/test_convert.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
class TestConvertFromRelativeLinks(unittest.TestCase):
1212
"""Tests for the convert_internal_links function."""
13+
1314
test_dir: Path
1415
docs_path: Path
1516
redirect_map_file: Path
@@ -31,10 +32,8 @@ def setUp(self) -> None:
3132
"DOCS_DIR": self.linking_module.DOCS_DIR,
3233
"REDIRECT_MAP_FILE": self.linking_module.REDIRECT_MAP_FILE,
3334
}
34-
self.linking_module.DOCS_DIR = self.docs_path # type: ignore
35-
self.linking_module.REDIRECT_MAP_FILE = self.redirect_map_file # type: ignore
36-
37-
35+
self.linking_module.DOCS_DIR = self.docs_path # type: ignore
36+
self.linking_module.REDIRECT_MAP_FILE = self.redirect_map_file # type: ignore
3837

3938
def test_basic_link_conversion(self) -> None:
4039
"""Test that a simple relative link is converted to a macro."""
@@ -63,15 +62,15 @@ def test_file_with_no_links(self) -> None:
6362

6463
# Assert
6564
final_content = (self.docs_path / "no-links.md").read_text()
66-
expected_content = '---\nid: no-links\n---\n' + original_content
65+
expected_content = "---\nid: no-links\n---\n" + original_content
6766
self.assertEqual(final_content, expected_content)
6867

6968
def test_handles_complex_relative_paths(self) -> None:
7069
"""Test conversion of links with complex relative paths like ../.."""
7170
# Arrange
7271
(self.docs_path / "guides" / "advanced").mkdir(parents=True)
7372
(self.docs_path / "api" / "v1").mkdir(parents=True)
74-
73+
7574
(self.docs_path / "guides" / "advanced" / "config.md").write_text(
7675
"See the [Auth API](../../api/v1/auth.md) for details."
7776
)
@@ -80,7 +79,7 @@ def test_handles_complex_relative_paths(self) -> None:
8079

8180
# Act
8281
linking.convert_internal_links(str(self.docs_path))
83-
82+
8483
# Assert
8584
content = (self.docs_path / "guides" / "advanced" / "config.md").read_text()
8685
expected = '---\nid: guides-advanced-config\n---\nSee the [Auth API]({{ internal_link("api-v1-auth") }}) for details.'
@@ -96,29 +95,36 @@ def test_idempotency_does_not_reconvert_links(self) -> None:
9695
# Act
9796
linking.convert_internal_links(str(self.docs_path)) # First run
9897
content_after_first_run = (self.docs_path / "index.md").read_text()
99-
98+
10099
linking.convert_internal_links(str(self.docs_path)) # Second run
101100
content_after_second_run = (self.docs_path / "index.md").read_text()
102101

103102
# Assert
104103
expected = '---\nid: index\n---\nLink to [About]({{ internal_link("about") }}).'
105104
self.assertEqual(content_after_first_run, expected)
106-
self.assertEqual(content_after_second_run, expected, "Content should not change on the second run.")
105+
self.assertEqual(
106+
content_after_second_run,
107+
expected,
108+
"Content should not change on the second run.",
109+
)
107110

108111
def test_leaves_broken_links_unchanged(self) -> None:
109112
"""Test that a link to a non-existent .md file is not converted."""
110113
# Arrange
111114
original_content = "This is a [Broken Link](./nonexistent.md)."
112115
(self.docs_path / "index.md").write_text(original_content)
113116
linking.prepare_docs(str(self.docs_path))
114-
117+
115118
# Act
116119
linking.convert_internal_links(str(self.docs_path))
117-
120+
118121
# Assert
119122
final_content = (self.docs_path / "index.md").read_text()
120-
expected_content = '---\nid: index\n---\n' + original_content
121-
self.assertEqual(final_content, expected_content, "Broken link should not be modified.")
123+
expected_content = "---\nid: index\n---\n" + original_content
124+
self.assertEqual(
125+
final_content, expected_content, "Broken link should not be modified."
126+
)
127+
122128

123129
if __name__ == "__main__":
124130
unittest.main(verbosity=2)

__tests__/test_fontmatter.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,6 @@ def test_unicode_in_yaml_frontmatter(self) -> None:
142142
redirect_map = json.loads(linking.REDIRECT_MAP_FILE.read_text())
143143
self.assertEqual(redirect_map["unicode-test"], "unicode.md")
144144

145+
145146
if __name__ == "__main__":
146147
unittest.main(verbosity=2)

__tests__/test_internal_link.py

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from main import PageResolver
99

10+
1011
class TestPageResolver(unittest.TestCase):
1112
def setUp(self):
1213
"""Set up a temporary directory structure for each test."""
@@ -20,11 +21,16 @@ def setUp(self):
2021
(self.docs_path / "index.md").write_text("---\nid: home\n---\n# Home")
2122
(self.docs_path / "about.md").write_text("---\nid: about-us\n---\n# About")
2223
(self.docs_path / "guides").mkdir()
23-
(self.docs_path / "guides" / "first.md").write_text("---\nid: first-guide\n---\n# First Guide")
24-
(self.docs_path / "guides" / "second.md").write_text("---\nid: second-guide\n---\n# Second Guide")
24+
(self.docs_path / "guides" / "first.md").write_text(
25+
"---\nid: first-guide\n---\n# First Guide"
26+
)
27+
(self.docs_path / "guides" / "second.md").write_text(
28+
"---\nid: second-guide\n---\n# Second Guide"
29+
)
2530
(self.docs_path / "guides" / "subsection").mkdir()
26-
(self.docs_path / "guides" / "subsection" / "deep.md").write_text("---\nid: deep-page\n---\n# Deep Page")
27-
31+
(self.docs_path / "guides" / "subsection" / "deep.md").write_text(
32+
"---\nid: deep-page\n---\n# Deep Page"
33+
)
2834

2935
self.resolver = PageResolver(docs_dir=self.docs_path)
3036

@@ -35,24 +41,48 @@ def tearDown(self):
3541
def test_resolve_page_link_no_context(self):
3642
"""Test resolving page links without a current page context."""
3743
self.assertEqual(self.resolver.resolve_page_link("home"), "index.md")
38-
self.assertEqual(self.resolver.resolve_page_link("first-guide"), "guides/first.md")
44+
self.assertEqual(
45+
self.resolver.resolve_page_link("first-guide"), "guides/first.md"
46+
)
3947

4048
def test_resolve_page_link_from_root(self):
4149
"""Test resolving page links from a page in the docs root."""
42-
self.assertEqual(self.resolver.resolve_page_link("about-us", "index.md"), "about.md")
43-
self.assertEqual(self.resolver.resolve_page_link("first-guide", "index.md"), "guides/first.md")
50+
self.assertEqual(
51+
self.resolver.resolve_page_link("about-us", "index.md"), "about.md"
52+
)
53+
self.assertEqual(
54+
self.resolver.resolve_page_link("first-guide", "index.md"),
55+
"guides/first.md",
56+
)
4457

4558
def test_resolve_page_link_from_subdir(self):
4659
"""Test resolving page links from a page in a subdirectory."""
47-
self.assertEqual(self.resolver.resolve_page_link("home", "guides/first.md"), "../index.md")
48-
self.assertEqual(self.resolver.resolve_page_link("second-guide", "guides/first.md"), "second.md")
49-
self.assertEqual(self.resolver.resolve_page_link("about-us", "guides/first.md"), "../about.md")
50-
self.assertEqual(self.resolver.resolve_page_link("deep-page", "guides/first.md"), "subsection/deep.md")
60+
self.assertEqual(
61+
self.resolver.resolve_page_link("home", "guides/first.md"), "../index.md"
62+
)
63+
self.assertEqual(
64+
self.resolver.resolve_page_link("second-guide", "guides/first.md"),
65+
"second.md",
66+
)
67+
self.assertEqual(
68+
self.resolver.resolve_page_link("about-us", "guides/first.md"),
69+
"../about.md",
70+
)
71+
self.assertEqual(
72+
self.resolver.resolve_page_link("deep-page", "guides/first.md"),
73+
"subsection/deep.md",
74+
)
5175

5276
def test_resolve_page_link_from_deep_subdir(self):
5377
"""Test resolving page links from a deeply nested page."""
54-
self.assertEqual(self.resolver.resolve_page_link("home", "guides/subsection/deep.md"), "../../index.md")
55-
self.assertEqual(self.resolver.resolve_page_link("first-guide", "guides/subsection/deep.md"), "../first.md")
78+
self.assertEqual(
79+
self.resolver.resolve_page_link("home", "guides/subsection/deep.md"),
80+
"../../index.md",
81+
)
82+
self.assertEqual(
83+
self.resolver.resolve_page_link("first-guide", "guides/subsection/deep.md"),
84+
"../first.md",
85+
)
5686

5787
def test_resolve_page_link_not_found(self):
5888
"""Test that resolving a non-existent page ID raises a ValueError."""
@@ -62,19 +92,20 @@ def test_resolve_page_link_not_found(self):
6292
def test_id_changes_are_picked_up(self):
6393
"""Test that the resolver picks up changes to page IDs."""
6494
self.assertEqual(self.resolver.resolve_page_link("home"), "index.md")
65-
95+
6696
# Modify the ID in a file
6797
(self.docs_path / "index.md").write_text("---\nid: new-home\n---\n# Home")
68-
98+
6999
# Clear the resolver's cache to force it to re-scan the files
70100
self.resolver._page_cache = None
71-
101+
72102
# The new ID should now resolve correctly
73103
self.assertEqual(self.resolver.resolve_page_link("new-home"), "index.md")
74-
104+
75105
# The old ID should no longer be found
76106
with self.assertRaises(ValueError):
77107
self.resolver.resolve_page_link("home")
78108

109+
79110
if __name__ == "__main__":
80111
unittest.main(verbosity=2)

__tests__/test_migration.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import linking
1212
from linking import on_config, prepare_docs
1313

14+
1415
class TestMigration(unittest.TestCase):
1516
"""Tests the migration script's prepare and on_config functions."""
1617

@@ -32,8 +33,8 @@ def setUp(self) -> None:
3233
"DOCS_DIR": self.linking_module.DOCS_DIR,
3334
"REDIRECT_MAP_FILE": self.linking_module.REDIRECT_MAP_FILE,
3435
}
35-
self.linking_module.DOCS_DIR = self.docs_path # type: ignore
36-
self.linking_module.REDIRECT_MAP_FILE = self.redirect_map_file # type: ignore
36+
self.linking_module.DOCS_DIR = self.docs_path # type: ignore
37+
self.linking_module.REDIRECT_MAP_FILE = self.redirect_map_file # type: ignore
3738

3839
def tearDown(self) -> None:
3940
"""Clean up the temporary directory after each test."""

0 commit comments

Comments
 (0)