mkdocs2confluence 0.17.4__tar.gz → 0.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. {mkdocs2confluence-0.17.4/src/mkdocs2confluence.egg-info → mkdocs2confluence-0.18.0}/PKG-INFO +4 -1
  2. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/README.md +3 -0
  3. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/pyproject.toml +1 -1
  4. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0/src/mkdocs2confluence.egg-info}/PKG-INFO +4 -1
  5. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/compiler/page.py +1 -1
  6. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/loader/config.py +11 -0
  7. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_children_macro.py +80 -0
  8. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/LICENSE +0 -0
  9. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/setup.cfg +0 -0
  10. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs2confluence.egg-info/SOURCES.txt +0 -0
  11. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs2confluence.egg-info/dependency_links.txt +0 -0
  12. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs2confluence.egg-info/entry_points.txt +0 -0
  13. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs2confluence.egg-info/requires.txt +0 -0
  14. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs2confluence.egg-info/top_level.txt +0 -0
  15. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/__init__.py +0 -0
  16. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/cli.py +0 -0
  17. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/compiler/__init__.py +0 -0
  18. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/compiler/models.py +0 -0
  19. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/emitter/__init__.py +0 -0
  20. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/emitter/xhtml.py +0 -0
  21. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/ir/__init__.py +0 -0
  22. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/ir/nodes.py +0 -0
  23. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/ir/treeutil.py +0 -0
  24. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/loader/__init__.py +0 -0
  25. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/loader/extra_css.py +0 -0
  26. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/loader/nav.py +0 -0
  27. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/loader/page.py +0 -0
  28. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/parser/__init__.py +0 -0
  29. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/parser/markdown.py +0 -0
  30. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/pdf/__init__.py +0 -0
  31. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/pdf/generator.py +0 -0
  32. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/pdf/render.py +0 -0
  33. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preprocess/__init__.py +0 -0
  34. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preprocess/abbrevs.py +0 -0
  35. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preprocess/captions.py +0 -0
  36. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preprocess/fence.py +0 -0
  37. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preprocess/frontmatter.py +0 -0
  38. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preprocess/icons.py +0 -0
  39. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preprocess/includes.py +0 -0
  40. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preprocess/linkdefs.py +0 -0
  41. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preview/__init__.py +0 -0
  42. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preview/render.py +0 -0
  43. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/preview/server.py +0 -0
  44. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/publisher/__init__.py +0 -0
  45. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/publisher/changelog.py +0 -0
  46. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/publisher/client.py +0 -0
  47. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/publisher/executor.py +0 -0
  48. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/publisher/http_retry.py +0 -0
  49. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/publisher/models.py +0 -0
  50. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/publisher/planner.py +0 -0
  51. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/skill_installer.py +0 -0
  52. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/skills/mkdocs-changelog/SKILL.md +0 -0
  53. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/skills/mkdocs-changelog/scripts/changelog_data.py +0 -0
  54. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/sync/__init__.py +0 -0
  55. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/sync/anchoring.py +0 -0
  56. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/sync/command.py +0 -0
  57. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/sync/comments.py +0 -0
  58. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/sync/github.py +0 -0
  59. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/sync/platform.py +0 -0
  60. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/sync/state.py +0 -0
  61. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/__init__.py +0 -0
  62. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/_kroki.py +0 -0
  63. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/abbrevs.py +0 -0
  64. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/admonition_titles.py +0 -0
  65. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/assets.py +0 -0
  66. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/attachment_previews.py +0 -0
  67. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/captions.py +0 -0
  68. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/editlink.py +0 -0
  69. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/footer.py +0 -0
  70. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/images.py +0 -0
  71. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/internallinks.py +0 -0
  72. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/mermaid.py +0 -0
  73. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/src/mkdocs_to_confluence/transforms/plantuml.py +0 -0
  74. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_abbrevs.py +0 -0
  75. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_admonition_titles.py +0 -0
  76. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_attachment_previews.py +0 -0
  77. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_captions.py +0 -0
  78. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_changelog_config.py +0 -0
  79. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_changelog_publish.py +0 -0
  80. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_cli.py +0 -0
  81. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_editlink.py +0 -0
  82. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_emitter.py +0 -0
  83. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_exclude_properties_config.py +0 -0
  84. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_extra_css.py +0 -0
  85. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_footer.py +0 -0
  86. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_frontmatter.py +0 -0
  87. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_icons.py +0 -0
  88. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_images.py +0 -0
  89. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_internallinks.py +0 -0
  90. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_ir.py +0 -0
  91. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_linkdefs.py +0 -0
  92. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_loader.py +0 -0
  93. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_mermaid.py +0 -0
  94. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_page_loader.py +0 -0
  95. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_parser.py +0 -0
  96. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_pdf.py +0 -0
  97. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_plantuml.py +0 -0
  98. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_preprocess.py +0 -0
  99. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_preview.py +0 -0
  100. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_publish_client.py +0 -0
  101. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_publish_config.py +0 -0
  102. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_publish_pipeline.py +0 -0
  103. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_server.py +0 -0
  104. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_skill_installer.py +0 -0
  105. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_sync_anchoring.py +0 -0
  106. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_sync_command.py +0 -0
  107. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_sync_comments.py +0 -0
  108. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_sync_github.py +0 -0
  109. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_sync_state.py +0 -0
  110. {mkdocs2confluence-0.17.4 → mkdocs2confluence-0.18.0}/tests/test_treeutil.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mkdocs2confluence
3
- Version: 0.17.4
3
+ Version: 0.18.0
4
4
  Summary: Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more
5
5
  Author: Anders Hybertz
6
6
  License: GPL-3.0-or-later
@@ -161,6 +161,7 @@ confluence:
161
161
  mermaid_render: kroki # "kroki" (default) | "kroki:https://your-kroki" | "none" — also controls PlantUML rendering
162
162
  full_width: true # default: true
163
163
  attachment_preview: false # default: false — inline PDF/Office previews
164
+ children_macro: true # default: true — child page list on section index pages
164
165
  changelog: CHANGELOG.md # optional: publish as a top-level "What's New" page
165
166
  exclude_properties: # optional: front matter keys to hide from Page Properties
166
167
  - source_documents
@@ -171,6 +172,8 @@ confluence:
171
172
 
172
173
  `attachment_preview` (bool, default `false`) renders links to local PDF/Office files (`.pdf`, `.doc(x)`, `.xls(x)`, `.ppt(x)`) as inline `view-file` previews instead of download links. Other file types always remain download links.
173
174
 
175
+ `children_macro` (bool, default `true`) controls the native Children Display macro appended to section index pages (a nav section with an `index.md`). Set it to `false` to publish those pages without the auto-generated child page list; the change takes effect on the next publish.
176
+
174
177
  The `confluence:` block is also accepted under `extra:` for MkDocs strict-mode compatibility. The API token is read from `token:` in `mkdocs.yml`, then `CONFLUENCE_API_TOKEN`, then `MK2CONF_TOKEN`.
175
178
 
176
179
  ### Changelog / What's New page
@@ -119,6 +119,7 @@ confluence:
119
119
  mermaid_render: kroki # "kroki" (default) | "kroki:https://your-kroki" | "none" — also controls PlantUML rendering
120
120
  full_width: true # default: true
121
121
  attachment_preview: false # default: false — inline PDF/Office previews
122
+ children_macro: true # default: true — child page list on section index pages
122
123
  changelog: CHANGELOG.md # optional: publish as a top-level "What's New" page
123
124
  exclude_properties: # optional: front matter keys to hide from Page Properties
124
125
  - source_documents
@@ -129,6 +130,8 @@ confluence:
129
130
 
130
131
  `attachment_preview` (bool, default `false`) renders links to local PDF/Office files (`.pdf`, `.doc(x)`, `.xls(x)`, `.ppt(x)`) as inline `view-file` previews instead of download links. Other file types always remain download links.
131
132
 
133
+ `children_macro` (bool, default `true`) controls the native Children Display macro appended to section index pages (a nav section with an `index.md`). Set it to `false` to publish those pages without the auto-generated child page list; the change takes effect on the next publish.
134
+
132
135
  The `confluence:` block is also accepted under `extra:` for MkDocs strict-mode compatibility. The API token is read from `token:` in `mkdocs.yml`, then `CONFLUENCE_API_TOKEN`, then `MK2CONF_TOKEN`.
133
136
 
134
137
  ### Changelog / What's New page
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mkdocs2confluence"
3
- version = "0.17.4"
3
+ version = "0.18.0"
4
4
  description = "Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more"
5
5
  readme = "README.md"
6
6
  license = { text = "GPL-3.0-or-later" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mkdocs2confluence
3
- Version: 0.17.4
3
+ Version: 0.18.0
4
4
  Summary: Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more
5
5
  Author: Anders Hybertz
6
6
  License: GPL-3.0-or-later
@@ -161,6 +161,7 @@ confluence:
161
161
  mermaid_render: kroki # "kroki" (default) | "kroki:https://your-kroki" | "none" — also controls PlantUML rendering
162
162
  full_width: true # default: true
163
163
  attachment_preview: false # default: false — inline PDF/Office previews
164
+ children_macro: true # default: true — child page list on section index pages
164
165
  changelog: CHANGELOG.md # optional: publish as a top-level "What's New" page
165
166
  exclude_properties: # optional: front matter keys to hide from Page Properties
166
167
  - source_documents
@@ -171,6 +172,8 @@ confluence:
171
172
 
172
173
  `attachment_preview` (bool, default `false`) renders links to local PDF/Office files (`.pdf`, `.doc(x)`, `.xls(x)`, `.ppt(x)`) as inline `view-file` previews instead of download links. Other file types always remain download links.
173
174
 
175
+ `children_macro` (bool, default `true`) controls the native Children Display macro appended to section index pages (a nav section with an `index.md`). Set it to `false` to publish those pages without the auto-generated child page list; the change takes effect on the next publish.
176
+
174
177
  The `confluence:` block is also accepted under `extra:` for MkDocs strict-mode compatibility. The API token is read from `token:` in `mkdocs.yml`, then `CONFLUENCE_API_TOKEN`, then `MK2CONF_TOKEN`.
175
178
 
176
179
  ### Changelog / What's New page
@@ -79,7 +79,7 @@ def compile_page(
79
79
  preprocessed = strip_link_defs(preprocessed)
80
80
  ir_nodes = parse(preprocessed)
81
81
  ir_nodes = strip_links_in_admonition_titles(ir_nodes, node.docs_path or "")
82
- if is_section_index:
82
+ if is_section_index and (config.confluence is None or config.confluence.children_macro):
83
83
  ir_nodes = ir_nodes + (ChildrenMacro(),)
84
84
  # Parse definitions as inline markdown so links etc. survive into the glossary.
85
85
  parsed_abbrevs = {abbr: parse_inline(defn) for abbr, defn in abbrevs.items()}
@@ -37,6 +37,7 @@ class ConfluenceConfig:
37
37
  changelog_file: str | None = None # path relative to docs_dir; None means disabled
38
38
  exclude_properties: tuple[str, ...] = () # front matter keys to omit from Page Properties table
39
39
  attachment_preview: bool = False # render PDF/Office attachment links as view-file macros
40
+ children_macro: bool = True # append Children Display macro to section index pages
40
41
 
41
42
 
42
43
  @dataclass(frozen=True)
@@ -300,6 +301,15 @@ def load_config(mkdocs_yml: Path) -> MkDocsConfig:
300
301
  )
301
302
  attachment_preview = raw_preview
302
303
 
304
+ # children_macro (optional) — child page list on section index pages
305
+ raw_children = raw_conf.get("children_macro", True)
306
+ if not isinstance(raw_children, bool):
307
+ raise ConfigError(
308
+ "mkdocs.yml: 'confluence.children_macro' must be a boolean, "
309
+ f"got {type(raw_children).__name__}."
310
+ )
311
+ children_macro = raw_children
312
+
303
313
  confluence = ConfluenceConfig(
304
314
  base_url=base_url.rstrip("/"),
305
315
  space_key=space_key,
@@ -317,6 +327,7 @@ def load_config(mkdocs_yml: Path) -> MkDocsConfig:
317
327
  changelog_file=changelog_file,
318
328
  exclude_properties=exclude_properties,
319
329
  attachment_preview=attachment_preview,
330
+ children_macro=children_macro,
320
331
  )
321
332
 
322
333
  # --- extra_css (optional) ---
@@ -92,9 +92,89 @@ def test_compile_page_children_macro_before_footer(tmp_path: Path) -> None:
92
92
  assert children_pos < panel_pos
93
93
 
94
94
 
95
+ # ── children_macro config flag ────────────────────────────────────────────────
96
+
97
+
98
+ def test_children_macro_disabled_omits_macro(tmp_path: Path) -> None:
99
+ """confluence.children_macro=false must suppress the macro on section indexes."""
100
+ xhtml = _compile_index(tmp_path, children_macro=False)
101
+
102
+ assert 'ac:name="children"' not in xhtml
103
+
104
+
105
+ def test_children_macro_enabled_by_default(tmp_path: Path) -> None:
106
+ """A confluence block without children_macro must keep the macro."""
107
+ xhtml = _compile_index(tmp_path, children_macro=True)
108
+
109
+ assert 'ac:name="children"' in xhtml
110
+
111
+
112
+ def test_children_macro_config_default_true(tmp_path: Path) -> None:
113
+ from mkdocs_to_confluence.loader.config import load_config
114
+
115
+ cfg = load_config(_write_mkdocs(tmp_path, _CONF))
116
+ assert cfg.confluence.children_macro is True
117
+
118
+
119
+ def test_children_macro_config_false(tmp_path: Path) -> None:
120
+ from mkdocs_to_confluence.loader.config import load_config
121
+
122
+ cfg = load_config(_write_mkdocs(tmp_path, _CONF + " children_macro: false\n"))
123
+ assert cfg.confluence.children_macro is False
124
+
125
+
126
+ def test_children_macro_config_non_bool_raises(tmp_path: Path) -> None:
127
+ import pytest
128
+
129
+ from mkdocs_to_confluence.loader.config import ConfigError, load_config
130
+
131
+ with pytest.raises(ConfigError, match="children_macro"):
132
+ load_config(_write_mkdocs(tmp_path, _CONF + " children_macro: maybe\n"))
133
+
134
+
95
135
  # ── Helpers ───────────────────────────────────────────────────────────────────
96
136
 
97
137
 
138
+ _CONF = (
139
+ "confluence:\n"
140
+ " base_url: https://x.atlassian.net/wiki\n"
141
+ " email: a@b.test\n"
142
+ " space_key: TECH\n"
143
+ )
144
+
145
+
146
+ def _write_mkdocs(tmp_path: Path, extra: str = "") -> Path:
147
+ (tmp_path / "docs").mkdir()
148
+ (tmp_path / "mkdocs.yml").write_text(f"site_name: Test Site\n{extra}", encoding="utf-8")
149
+ return tmp_path / "mkdocs.yml"
150
+
151
+
152
+ def _compile_index(tmp_path: Path, *, children_macro: bool) -> str:
153
+ """Compile a section index page with a confluence block set to *children_macro*."""
154
+ from mkdocs_to_confluence.loader.config import ConfluenceConfig, MkDocsConfig
155
+
156
+ docs = tmp_path / "docs"
157
+ docs.mkdir()
158
+ md = docs / "index.md"
159
+ md.write_text("# Section\n\nIntro.\n", encoding="utf-8")
160
+
161
+ config = MkDocsConfig(
162
+ site_name="Test",
163
+ docs_dir=docs,
164
+ repo_url=None,
165
+ edit_uri=None,
166
+ nav=None,
167
+ confluence=ConfluenceConfig(
168
+ base_url="https://x.atlassian.net/wiki",
169
+ email="a@b.test",
170
+ token="",
171
+ space_key="TECH",
172
+ children_macro=children_macro,
173
+ ),
174
+ )
175
+ return compile_page(_page_node("Section", md), config, is_section_index=True).xhtml
176
+
177
+
98
178
  def _page_node(title: str, path: Path) -> object:
99
179
  from mkdocs_to_confluence.loader.nav import NavNode
100
180