diff options
Diffstat (limited to 'tests/tools/changes.test.py')
| -rw-r--r-- | tests/tools/changes.test.py | 70 |
1 files changed, 32 insertions, 38 deletions
diff --git a/tests/tools/changes.test.py b/tests/tools/changes.test.py index 7eeb777..98a571a 100644 --- a/tests/tools/changes.test.py +++ b/tests/tools/changes.test.py @@ -1,22 +1,12 @@ """Tests for the ``changes/`` fragment generator in ``tools/changes.py``.""" -import importlib.util from pathlib import Path -_REPO_ROOT = Path(__file__).parent.parent.parent -_GENERATOR_PATH = _REPO_ROOT / "tools" / "changes.py" - +import pytest -def _load_generator(): - spec = importlib.util.spec_from_file_location("edify_changes_tool", _GENERATOR_PATH) - assert spec is not None - assert spec.loader is not None - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - return module +from tools import changes - -_GENERATOR = _load_generator() +_REPO_ROOT = Path(__file__).parent.parent.parent def _write_fragment(directory: Path, name: str, body: str) -> Path: @@ -25,92 +15,96 @@ def _write_fragment(directory: Path, name: str, body: str) -> Path: return fragment_path -def test_collect_fragments_returns_files_in_fragment_id_order(tmp_path): +def test_collect_fragments_returns_files_in_fragment_id_order(tmp_path: Path) -> None: _write_fragment(tmp_path, "0020-second.rst", "[change]\nanchor=b\nheading=B\ncontext=b") _write_fragment(tmp_path, "0010-first.rst", "[change]\nanchor=a\nheading=A\ncontext=a") - collected = _GENERATOR.collect_fragments(tmp_path) + collected = changes.collect_fragments(tmp_path) assert [path.name for path in collected] == ["0010-first.rst", "0020-second.rst"] -def test_collect_fragments_skips_the_readme(tmp_path): +def test_collect_fragments_skips_the_readme(tmp_path: Path) -> None: _write_fragment(tmp_path, "README.rst", "not a fragment") _write_fragment(tmp_path, "0010-only.rst", "[change]\nanchor=a\nheading=A\ncontext=a") - collected = _GENERATOR.collect_fragments(tmp_path) + collected = changes.collect_fragments(tmp_path) assert [path.name for path in collected] == ["0010-only.rst"] -def test_render_fragment_emits_anchor_heading_and_context(tmp_path): +def test_render_fragment_emits_anchor_heading_and_context(tmp_path: Path) -> None: fragment_path = _write_fragment( tmp_path, "0010-example.rst", "[change]\nanchor = my-anchor\nheading = My Heading\ncontext = A single sentence.", ) - rendered = _GENERATOR.render_fragment(fragment_path) + rendered = changes.render_fragment(fragment_path) assert ".. _my-anchor:" in rendered assert "My Heading" in rendered assert "-" * len("My Heading") in rendered assert "A single sentence." in rendered -def test_render_fragment_collapses_multiline_context_into_one_paragraph(tmp_path): +def test_render_fragment_collapses_multiline_context_into_one_paragraph(tmp_path: Path) -> None: fragment_path = _write_fragment( tmp_path, "0010-multiline.rst", "[change]\nanchor = a\nheading = H\ncontext = first line\n second line", ) - rendered = _GENERATOR.render_fragment(fragment_path) + rendered = changes.render_fragment(fragment_path) assert "first line second line" in rendered -def test_render_fragment_includes_before_after_block_when_both_present(tmp_path): +def test_render_fragment_includes_before_after_block_when_both_present(tmp_path: Path) -> None: fragment_path = _write_fragment( tmp_path, "0010-beforeafter.rst", "[change]\nanchor = a\nheading = H\nbefore = old\nafter = new\ncontext = changed", ) - rendered = _GENERATOR.render_fragment(fragment_path) + rendered = changes.render_fragment(fragment_path) assert ".. code-block:: text" in rendered assert " old" in rendered assert " new" in rendered -def test_render_fragment_omits_before_after_block_when_absent(tmp_path): +def test_render_fragment_omits_before_after_block_when_absent(tmp_path: Path) -> None: fragment_path = _write_fragment( tmp_path, "0010-nofix.rst", "[change]\nanchor = a\nheading = H\ncontext = no before/after here", ) - rendered = _GENERATOR.render_fragment(fragment_path) + rendered = changes.render_fragment(fragment_path) assert ".. code-block:: text" not in rendered -def test_render_all_concatenates_every_fragment_in_order(tmp_path): +def test_render_all_concatenates_every_fragment_in_order(tmp_path: Path) -> None: _write_fragment(tmp_path, "0020-b.rst", "[change]\nanchor=b\nheading=Bravo\ncontext=b") _write_fragment(tmp_path, "0010-a.rst", "[change]\nanchor=a\nheading=Alpha\ncontext=a") - rendered = _GENERATOR.render_all(tmp_path) + rendered = changes.render_all(tmp_path) assert rendered.index("Alpha") < rendered.index("Bravo") -def test_main_release_deletes_consumed_fragments(tmp_path, monkeypatch): +def test_main_release_deletes_consumed_fragments( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: _write_fragment(tmp_path, "0010-a.rst", "[change]\nanchor=a\nheading=A\ncontext=a") - monkeypatch.setattr(_GENERATOR, "_CHANGES_DIR", tmp_path) - exit_code = _GENERATOR.main(["--release"]) + monkeypatch.setattr(changes, "_CHANGES_DIR", tmp_path) + exit_code = changes.main(["--release"]) assert exit_code == 0 - assert _GENERATOR.collect_fragments(tmp_path) == [] + assert changes.collect_fragments(tmp_path) == [] -def test_main_without_release_leaves_fragments_in_place(tmp_path, monkeypatch, capsys): +def test_main_without_release_leaves_fragments_in_place( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str] +) -> None: _write_fragment(tmp_path, "0010-a.rst", "[change]\nanchor=a\nheading=A\ncontext=a") - monkeypatch.setattr(_GENERATOR, "_CHANGES_DIR", tmp_path) - exit_code = _GENERATOR.main([]) + monkeypatch.setattr(changes, "_CHANGES_DIR", tmp_path) + exit_code = changes.main([]) captured = capsys.readouterr() assert exit_code == 0 assert "A" in captured.out - assert len(_GENERATOR.collect_fragments(tmp_path)) == 1 + assert len(changes.collect_fragments(tmp_path)) == 1 -def test_committed_changes_directory_fragments_all_parse(): +def test_committed_changes_directory_fragments_all_parse() -> None: changes_dir = _REPO_ROOT / "changes" - for fragment_path in _GENERATOR.collect_fragments(changes_dir): - rendered = _GENERATOR.render_fragment(fragment_path) + for fragment_path in changes.collect_fragments(changes_dir): + rendered = changes.render_fragment(fragment_path) assert rendered.strip() != "" |
