diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-07 18:48:40 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-07 18:48:40 +0300 |
| commit | f279b4170e2c58d623cc9a1a83a177c2bdfb5eb3 (patch) | |
| tree | eeb1af564cb9576a60e344be7b2fba03289b8798 /scripts/test_changelog.py | |
| parent | ed0c051c55e40c1ab3cdc029ba4ca518ee407a1e (diff) | |
fix: tighten release manifest sync flow
Diffstat (limited to 'scripts/test_changelog.py')
| -rw-r--r-- | scripts/test_changelog.py | 101 |
1 files changed, 100 insertions, 1 deletions
diff --git a/scripts/test_changelog.py b/scripts/test_changelog.py index cf9e23ac..6821dc38 100644 --- a/scripts/test_changelog.py +++ b/scripts/test_changelog.py @@ -1,8 +1,17 @@ from __future__ import annotations +import json import unittest -from scripts.changelog import extract_section_body, prepare_release +from scripts.changelog import ( + ChangelogError, + build_latest_json, + default_release_assets, + ensure_manifest_is_outdated, + extract_section_body, + manifest_from_release_payload, + prepare_release, +) class ChangelogScriptTests(unittest.TestCase): @@ -30,6 +39,96 @@ class ChangelogScriptTests(unittest.TestCase): self.assertEqual(body, "### Fixed\n- Smoothed Claude flapping.\n") + def test_build_latest_json_trims_notes(self) -> None: + manifest = json.loads( + build_latest_json( + "0.1.1", + "\n### Fixed\n- One\n\n", + default_release_assets("0.1.1"), + ) + ) + + self.assertEqual(manifest["notes"], "### Fixed\n- One") + + def test_build_latest_json_embeds_notes_and_release_assets(self) -> None: + manifest = json.loads( + build_latest_json( + "v0.1.1", + "### Fixed\n- Smoothed Claude flapping.\n", + default_release_assets("0.1.1"), + ) + ) + + self.assertEqual(manifest["version"], "0.1.1") + self.assertEqual(manifest["notes"], "### Fixed\n- Smoothed Claude flapping.") + self.assertEqual( + manifest["assets"], + { + "linux-x86_64": "https://github.com/ogulcancelik/herdr/releases/download/v0.1.1/herdr-linux-x86_64", + "linux-aarch64": "https://github.com/ogulcancelik/herdr/releases/download/v0.1.1/herdr-linux-aarch64", + "macos-x86_64": "https://github.com/ogulcancelik/herdr/releases/download/v0.1.1/herdr-macos-x86_64", + "macos-aarch64": "https://github.com/ogulcancelik/herdr/releases/download/v0.1.1/herdr-macos-aarch64", + }, + ) + + def test_manifest_from_release_payload_uses_release_body_and_asset_urls(self) -> None: + manifest = manifest_from_release_payload( + { + "tagName": "v0.1.1", + "isDraft": False, + "isPrerelease": False, + "body": "### Fixed\n- One\n", + "assets": [ + {"name": "herdr-linux-x86_64", "url": "https://example.com/linux-x86_64"}, + {"name": "herdr-linux-aarch64", "url": "https://example.com/linux-aarch64"}, + {"name": "herdr-macos-x86_64", "url": "https://example.com/macos-x86_64"}, + {"name": "herdr-macos-aarch64", "url": "https://example.com/macos-aarch64"}, + ], + }, + "0.1.1", + ) + + self.assertEqual( + manifest, + { + "version": "0.1.1", + "notes": "### Fixed\n- One", + "assets": { + "linux-x86_64": "https://example.com/linux-x86_64", + "linux-aarch64": "https://example.com/linux-aarch64", + "macos-x86_64": "https://example.com/macos-x86_64", + "macos-aarch64": "https://example.com/macos-aarch64", + }, + }, + ) + + def test_manifest_from_release_payload_rejects_missing_asset(self) -> None: + with self.assertRaisesRegex(ChangelogError, "missing asset herdr-macos-aarch64"): + manifest_from_release_payload( + { + "tagName": "v0.1.1", + "isDraft": False, + "isPrerelease": False, + "body": "### Fixed\n- One\n", + "assets": [ + {"name": "herdr-linux-x86_64", "url": "https://example.com/linux-x86_64"}, + {"name": "herdr-linux-aarch64", "url": "https://example.com/linux-aarch64"}, + {"name": "herdr-macos-x86_64", "url": "https://example.com/macos-x86_64"}, + ], + }, + "0.1.1", + ) + + def test_ensure_manifest_is_outdated_rejects_same_or_newer_version(self) -> None: + with self.assertRaisesRegex(ChangelogError, "already at v0.1.1"): + ensure_manifest_is_outdated({"version": "0.1.1"}, "0.1.1") + + with self.assertRaisesRegex(ChangelogError, "already at v0.1.2"): + ensure_manifest_is_outdated({"version": "0.1.2"}, "0.1.1") + + def test_ensure_manifest_is_outdated_allows_older_version(self) -> None: + ensure_manifest_is_outdated({"version": "0.1.0"}, "0.1.1") + if __name__ == "__main__": unittest.main() |
