aboutsummaryrefslogtreecommitdiff
path: root/scripts/test_changelog.py
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-07 18:48:40 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-07 18:48:40 +0300
commitf279b4170e2c58d623cc9a1a83a177c2bdfb5eb3 (patch)
treeeeb1af564cb9576a60e344be7b2fba03289b8798 /scripts/test_changelog.py
parented0c051c55e40c1ab3cdc029ba4ca518ee407a1e (diff)
fix: tighten release manifest sync flow
Diffstat (limited to 'scripts/test_changelog.py')
-rw-r--r--scripts/test_changelog.py101
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()