generated from coulomb/repo-seed
extension for ref resolve, explode, implode, weave, tangle
This commit is contained in:
93
tests/test_explode_implode.py
Normal file
93
tests/test_explode_implode.py
Normal file
@@ -0,0 +1,93 @@
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from click.testing import CliRunner
|
||||
|
||||
from markitect_tool.cli import main
|
||||
from markitect_tool.explode import (
|
||||
EXPLODE_MANIFEST_NAME,
|
||||
ExplodeError,
|
||||
explode_markdown_file,
|
||||
implode_markdown_directory,
|
||||
)
|
||||
|
||||
|
||||
ROUNDTRIP_DOC = """---
|
||||
title: Explode Example
|
||||
---
|
||||
|
||||
Opening text before the first heading.
|
||||
|
||||
# Intro
|
||||
|
||||
Intro body.
|
||||
|
||||
## Detail
|
||||
|
||||
Detail body.
|
||||
|
||||
# Later
|
||||
|
||||
Later body.
|
||||
"""
|
||||
|
||||
|
||||
def test_flat_explode_implode_roundtrips_exact_markdown(tmp_path: Path):
|
||||
source = tmp_path / "source.md"
|
||||
output_dir = tmp_path / "exploded"
|
||||
source.write_text(ROUNDTRIP_DOC, encoding="utf-8")
|
||||
|
||||
result = explode_markdown_file(source, output_dir, variant="flat")
|
||||
imploded = implode_markdown_directory(output_dir)
|
||||
|
||||
assert Path(result.manifest_path).name == EXPLODE_MANIFEST_NAME
|
||||
assert (output_dir / "00-preamble.md").exists()
|
||||
assert (output_dir / "sections" / "01-intro.md").exists()
|
||||
assert imploded.markdown == ROUNDTRIP_DOC
|
||||
assert imploded.current_hash == result.manifest.source_hash
|
||||
|
||||
|
||||
def test_hierarchical_explode_places_child_sections_under_parent(tmp_path: Path):
|
||||
source = tmp_path / "source.md"
|
||||
output_dir = tmp_path / "exploded"
|
||||
source.write_text(ROUNDTRIP_DOC, encoding="utf-8")
|
||||
|
||||
result = explode_markdown_file(source, output_dir, variant="hierarchical")
|
||||
|
||||
files = {Path(path).relative_to(output_dir).as_posix() for path in result.written_files}
|
||||
assert "01-intro.md" in files
|
||||
assert "01-intro/02-detail.md" in files
|
||||
assert implode_markdown_directory(output_dir).markdown == ROUNDTRIP_DOC
|
||||
|
||||
|
||||
def test_explode_rejects_non_empty_output_without_force(tmp_path: Path):
|
||||
source = tmp_path / "source.md"
|
||||
output_dir = tmp_path / "exploded"
|
||||
output_dir.mkdir()
|
||||
(output_dir / "existing.md").write_text("Existing", encoding="utf-8")
|
||||
source.write_text(ROUNDTRIP_DOC, encoding="utf-8")
|
||||
|
||||
with pytest.raises(ExplodeError, match="not empty"):
|
||||
explode_markdown_file(source, output_dir)
|
||||
|
||||
|
||||
def test_mkt_explode_and_implode(tmp_path: Path):
|
||||
source = tmp_path / "source.md"
|
||||
output_dir = tmp_path / "exploded"
|
||||
rebuilt = tmp_path / "rebuilt.md"
|
||||
source.write_text(ROUNDTRIP_DOC, encoding="utf-8")
|
||||
runner = CliRunner()
|
||||
|
||||
explode_result = runner.invoke(
|
||||
main,
|
||||
["explode", str(source), "--output-dir", str(output_dir), "--variant", "flat"],
|
||||
)
|
||||
implode_result = runner.invoke(
|
||||
main,
|
||||
["implode", str(output_dir), "--output", str(rebuilt)],
|
||||
)
|
||||
|
||||
assert explode_result.exit_code == 0
|
||||
assert "entries: 4" in explode_result.output
|
||||
assert implode_result.exit_code == 0
|
||||
assert rebuilt.read_text(encoding="utf-8") == ROUNDTRIP_DOC
|
||||
Reference in New Issue
Block a user