156 lines Β· 4.6 KB Β· Python
RawDownload
from scripts import releasefrom scripts.release import (    format_github_release_notes,    include_extra_pull_requests,    merge_changelog,)  def test_merge_changelog_preserves_edits_but_uses_generated_categories():    existing = """## What's Changed### Bug Fixes πŸ›* Carefully copy-edited note by {user}`alice` in {pr}`1`   A manually added description.* Existing note by {user}`bob` in {pr}`2`* Obsolete note by {user}`dave` in {pr}`4` ## New Contributors* {user}`alice` made their first contribution in {pr}`1`"""    generated = """## What's Changed### Enhancements πŸš€* Original generated note by {user}`alice` in {pr}`1`* Newly merged PR by {user}`carol` in {pr}`3` ### Bug Fixes πŸ›* Regenerated note by {user}`bob` in {pr}`2` ## New Contributors* {user}`alice` made their first contribution in {pr}`1`* {user}`carol` made their first contribution in {pr}`3`"""     merged = merge_changelog(generated, existing)     assert "Carefully copy-edited note" in merged    assert "A manually added description." in merged    assert "Original generated note" not in merged    assert "Newly merged PR" in merged    assert "Obsolete note" not in merged    assert merged.index("### Enhancements") < merged.index("Carefully copy-edited note")    assert merged.index("Carefully copy-edited note") < merged.index("### Bug Fixes")  def test_merge_changelog_keeps_release_and_contributor_entries_separate():    existing = """## What's Changed### Enhancements* Edited release note in {pr}`10` ## New Contributors* Edited welcome for the author of {pr}`10` **Full Changelog**: existing compare link"""    generated = """## What's Changed### Documentation* Generated release note in {pr}`10` ## New Contributors* Generated welcome for the author of {pr}`10`* Welcome for the author of {pr}`11` **Full Changelog**: generated compare link"""     merged = merge_changelog(generated, existing)     assert "Edited release note" in merged    assert "Edited welcome" in merged    assert "Generated release note" not in merged    assert "Generated welcome" not in merged    assert merged.count("{pr}`10`") == 2    assert "Welcome for the author of {pr}`11`" in merged    assert merged.count("**Full Changelog**") == 1    assert "generated compare link" in merged  def test_include_extra_pull_requests_adds_other_changes_category(monkeypatch):    body = """## What's Changed### Bug Fixes* Fix a bug by @alice in https://github.com/ManimCommunity/manim/pull/1 ## New Contributors* @alice made their first contribution in https://github.com/ManimCommunity/manim/pull/1 **Full Changelog**: compare link"""    monkeypatch.setattr(        release,        "get_pull_request_release_note",        lambda number: (            f"* Prepare a release by @bob in "            f"https://github.com/ManimCommunity/manim/pull/{number}"        ),    )     result = include_extra_pull_requests(body, [99])     assert "### Other Changes\n* Prepare a release by @bob" in result    assert result.index("### Other Changes") < result.index("## New Contributors")  def test_include_extra_pull_requests_skips_existing_pr(monkeypatch):    body = """## What's Changed### Other Changes* Existing entry in https://github.com/ManimCommunity/manim/pull/99"""     def fail_if_called(number):        raise AssertionError(f"unexpected fetch for #{number}")     monkeypatch.setattr(release, "get_pull_request_release_note", fail_if_called)     assert include_extra_pull_requests(body, [99]) == body  def test_merge_changelog_without_matching_entries_is_unchanged():    generated = """## What's Changed### New Features* A new entry in {pr}`42`"""     assert merge_changelog(generated, "") == generated  def test_format_github_release_notes_removes_docs_metadata_and_converts_roles():    changelog = """---short-title: v1.2.3description: Changelog for v1.2.3--- # v1.2.3 Date: January 02, 2026 ## What's Changed* Improve {class}`.Example` by {user}`alice` in {pr}`123`* Fix {issue}`456` **Full Changelog**: [Compare view](https://example.com/compare)"""     result = format_github_release_notes("1.2.3", changelog)     assert result.startswith(        "See [our rendered changelog](https://docs.manim.community/en/stable/"        "changelog/1.2.3-changelog.html).\n\n## What's Changed"    )    assert "frontmatter" not in result    assert "# v1.2.3" not in result    assert "January 02, 2026" not in result    assert "`Example` by @alice" in result    assert "https://github.com/manimcommunity/manim/pull/123" in result    assert "https://github.com/manimcommunity/manim/issues/456" in result    assert result.endswith("\n")