import unittest import importlib.util from pathlib import Path MODULE_PATH = Path("services/update_service.py") SPEC = importlib.util.spec_from_file_location("update_service_under_test", MODULE_PATH) update_service = importlib.util.module_from_spec(SPEC) SPEC.loader.exec_module(update_service) class UpdateServiceTests(unittest.TestCase): def test_normalize_update_channel(self): self.assertEqual(update_service._normalize_update_channel("stable"), "stable") self.assertEqual(update_service._normalize_update_channel("beta"), "beta") self.assertEqual(update_service._normalize_update_channel("pre-release"), "beta") self.assertEqual(update_service._normalize_update_channel("unknown"), "stable") self.assertEqual(update_service._normalize_update_channel(""), "stable") def test_select_release_from_list_skips_drafts(self): releases = [ {"tag_name": "v2.0.0", "draft": True}, {"tag_name": "", "draft": False}, {"tag_name": "v1.9.0-beta.1", "draft": False}, ] selected = update_service._select_release_from_list(releases) self.assertIsNotNone(selected) self.assertEqual(selected["tag_name"], "v1.9.0-beta.1") def test_extract_release_payload_uses_zip_and_checksum(self): release_data = { "tag_name": "v1.7.2", "html_url": "https://example.com/release/v1.7.2", "assets": [ {"name": "notes.txt", "browser_download_url": "https://example.com/notes.txt"}, {"name": "AnabasisManager-win64.zip", "browser_download_url": "https://example.com/app.zip"}, {"name": "AnabasisManager-win64.zip.sha256", "browser_download_url": "https://example.com/app.zip.sha256"}, ], } payload = update_service._extract_release_payload( release_data=release_data, repository_url="https://git.daemonlord.ru/benya/AnabasisChatRemove", current_version="1.7.1", ) self.assertEqual(payload["latest_version"], "1.7.2") self.assertEqual(payload["download_url"], "https://example.com/app.zip") self.assertEqual(payload["checksum_url"], "https://example.com/app.zip.sha256") self.assertTrue(payload["has_update"]) if __name__ == "__main__": unittest.main()