|
| 1 | +#!/usr/bin/env python3 |
| 2 | +"""Unit tests for get-releases.py release filtering.""" |
| 3 | + |
| 4 | +import importlib.util |
| 5 | +import unittest |
| 6 | +from pathlib import Path |
| 7 | + |
| 8 | +_SCRIPT = Path(__file__).resolve().parent / "get-releases.py" |
| 9 | +_spec = importlib.util.spec_from_file_location("get_releases", _SCRIPT) |
| 10 | +gr = importlib.util.module_from_spec(_spec) |
| 11 | +assert _spec.loader is not None |
| 12 | +_spec.loader.exec_module(gr) |
| 13 | + |
| 14 | + |
| 15 | +def _release(tag: str, created: str, name=None, draft=False) -> dict: |
| 16 | + return { |
| 17 | + "name": tag if name is None else name, |
| 18 | + "tag_name": tag, |
| 19 | + "created_at": created, |
| 20 | + "html_url": f"https://example.test/{tag}", |
| 21 | + "draft": draft, |
| 22 | + } |
| 23 | + |
| 24 | + |
| 25 | +class FormatReleasesTest(unittest.TestCase): |
| 26 | + def test_keeps_stable_and_beta_releases(self): |
| 27 | + out = gr.format_releases( |
| 28 | + [ |
| 29 | + _release("v0.14.0", "2026-10-06T00:00:00Z"), |
| 30 | + _release("v0.14.0b8", "2026-09-18T00:00:00Z"), |
| 31 | + _release("v0.13.2", "2024-10-05T00:00:00Z"), |
| 32 | + ] |
| 33 | + ) |
| 34 | + self.assertEqual([r["tag"] for r in out], ["v0.14.0", "v0.14.0b8", "v0.13.2"]) |
| 35 | + |
| 36 | + def test_skips_drafts_nightlies_and_research_builds(self): |
| 37 | + out = gr.format_releases( |
| 38 | + [ |
| 39 | + _release("v0.14.0b9", "2026-10-06T00:00:00Z", draft=True), |
| 40 | + _release("v0.14.0dev20260723", "2026-07-23T00:00:00Z"), |
| 41 | + _release("v0.14.0dev202607121", "2026-07-12T00:00:00Z"), |
| 42 | + _release("v0.14.0b5-research", "2026-09-09T00:00:00Z"), |
| 43 | + _release("v0.14.0b5", "2026-09-07T00:00:00Z"), |
| 44 | + ] |
| 45 | + ) |
| 46 | + self.assertEqual([r["tag"] for r in out], ["v0.14.0b5"]) |
| 47 | + |
| 48 | + def test_sorted_newest_first(self): |
| 49 | + out = gr.format_releases( |
| 50 | + [ |
| 51 | + _release("v0.12.0", "2023-09-26T00:00:00Z"), |
| 52 | + _release("v0.14.2", "2026-09-22T00:00:00Z"), |
| 53 | + ] |
| 54 | + ) |
| 55 | + self.assertEqual([r["tag"] for r in out], ["v0.14.2", "v0.12.0"]) |
| 56 | + |
| 57 | + def test_empty_name_falls_back_to_tag(self): |
| 58 | + out = gr.format_releases([_release("v0.4.12", "2019-08-13T00:00:00Z", name="")]) |
| 59 | + self.assertEqual(out[0]["title"], "v0.4.12") |
| 60 | + self.assertEqual( |
| 61 | + set(out[0]), {"title", "tag", "date", "url"} |
| 62 | + ) |
| 63 | + |
| 64 | + |
| 65 | +if __name__ == "__main__": |
| 66 | + unittest.main() |
0 commit comments