import json import tempfile import unittest from pathlib import Path from unittest.mock import patch from scripts import update_librewolf class VersionOrderingTest(unittest.TestCase): def test_patch_release_is_newer_than_rebuild_without_patch(self) -> None: self.assertLess( update_librewolf.version_key("153.0-3"), update_librewolf.version_key("153.0.1-1"), ) def test_cask_and_release_versions_have_same_ordering(self) -> None: self.assertEqual( update_librewolf.version_key("153.0.3,1"), update_librewolf.version_key("153.0.3-1"), ) class StableReleaseTest(unittest.TestCase): @patch.object(update_librewolf, "fetch") def test_prerelease_is_rejected(self, fetch) -> None: fetch.return_value = json.dumps( { "tag_name": "154.0-1", "draft": False, "prerelease": True, } ).encode() with self.assertRaisesRegex(ValueError, "not stable"): update_librewolf.latest_stable_release() class CaskUpdateTest(unittest.TestCase): CASK = '''cask "librewolf" do version "152.0.6,1" sha256 arm: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", intel: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", arm64_linux: "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", x86_64_linux: "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" end ''' CHECKSUMS = { "arm": "1" * 64, "intel": "2" * 64, "arm64_linux": "3" * 64, "x86_64_linux": "4" * 64, } @patch.object(update_librewolf, "release_checksums") @patch.object(update_librewolf, "latest_stable_release") def test_new_stable_release_updates_version_and_all_hashes( self, latest_stable_release, release_checksums ) -> None: latest_stable_release.return_value = {"stable_tag": "153.0.3-1"} release_checksums.return_value = self.CHECKSUMS with tempfile.TemporaryDirectory() as directory: cask = Path(directory) / "librewolf.rb" cask.write_text(self.CASK) self.assertTrue(update_librewolf.update_cask(cask)) updated = cask.read_text() self.assertIn('version "153.0.3,1"', updated) for checksum in self.CHECKSUMS.values(): self.assertIn(checksum, updated) @patch.object(update_librewolf, "release_checksums") @patch.object(update_librewolf, "latest_stable_release") def test_older_release_does_not_downgrade_cask( self, latest_stable_release, release_checksums ) -> None: latest_stable_release.return_value = {"stable_tag": "151.0.3-1"} with tempfile.TemporaryDirectory() as directory: cask = Path(directory) / "librewolf.rb" cask.write_text(self.CASK) self.assertFalse(update_librewolf.update_cask(cask)) self.assertEqual(cask.read_text(), self.CASK) release_checksums.assert_not_called() if __name__ == "__main__": unittest.main()