"""Release metadata and version increment regressions.""" from datetime import date from pathlib import Path from tempfile import TemporaryDirectory import unittest from core.version import __version__, __release_date__ from scripts.bump_version import bump_version class VersionTests(unittest.TestCase): def test_application_metadata(self): self.assertRegex(__version__, r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$") date.fromisoformat(__release_date__) def test_bumps_reset_lower_components_and_update_date(self): for part, expected in (("patch", "1.2.4"), ("minor", "1.3.0"), ("major", "2.0.0")): with self.subTest(part=part), TemporaryDirectory() as directory: path = Path(directory) / "version.py" path.write_text('__version__ = "1.2.3"\n__release_date__ = "2026-01-01"\n') self.assertEqual(bump_version(part, version_file=path, release_date=date(2026, 11, 8)), expected) self.assertIn(f'__version__ = "{expected}"', path.read_text()) self.assertIn('__release_date__ = "2026-11-08"', path.read_text()) def test_invalid_metadata_is_not_modified(self): with TemporaryDirectory() as directory: path = Path(directory) / "version.py" original = '__version__ = "broken"\n' path.write_text(original) with self.assertRaises(ValueError): bump_version(version_file=path) self.assertEqual(path.read_text(), original) if __name__ == "__main__": unittest.main()