test_build_grouping.py (2725B)
1 #!/usr/bin/env python3 2 3 # This file is in the public domain. 4 5 import importlib.machinery 6 import importlib.util 7 import sys 8 import unittest 9 from dataclasses import replace 10 from io import StringIO 11 from pathlib import Path 12 from types import SimpleNamespace 13 from unittest.mock import patch 14 15 ROOT = Path(__file__).parents[1] 16 sys.path.insert(0, str(ROOT / "buildscripts")) 17 LOADER = importlib.machinery.SourceFileLoader("taler_pkg", str(ROOT / "taler-pkg")) 18 SPEC = importlib.util.spec_from_loader(LOADER.name, LOADER) 19 TALER_PKG = importlib.util.module_from_spec(SPEC) 20 LOADER.exec_module(TALER_PKG) 21 22 23 class BuildGroupingTests(unittest.TestCase): 24 def test_typescript_packages_share_one_group(self): 25 buildorder = TALER_PKG.buildsort(TALER_PKG.components) 26 typescript_packages = { 27 name 28 for name in TALER_PKG.components 29 if TALER_PKG.config.packages[name].repository == "typescript-core" 30 } 31 32 groups = TALER_PKG.group_components(typescript_packages, buildorder) 33 34 self.assertEqual(1, len(groups)) 35 self.assertEqual(typescript_packages, set(groups[0])) 36 37 def test_different_tags_create_different_groups(self): 38 original = TALER_PKG.config 39 packages = dict(original.packages) 40 packages["taler-wallet-cli"] = replace( 41 packages["taler-wallet-cli"], tag="v9.9.9" 42 ) 43 TALER_PKG.config = replace(original, packages=packages) 44 try: 45 selected = {"taler-wallet-cli", "taler-harness"} 46 groups = TALER_PKG.group_components( 47 selected, TALER_PKG.buildsort(TALER_PKG.components) 48 ) 49 finally: 50 TALER_PKG.config = original 51 52 self.assertEqual(2, len(groups)) 53 self.assertEqual(selected, {group[0] for group in groups}) 54 55 def test_generic_packages_remain_isolated(self): 56 selected = {"anastasis", "anastasis-gtk"} 57 58 groups = TALER_PKG.group_components( 59 selected, TALER_PKG.buildsort(TALER_PKG.components) 60 ) 61 62 self.assertEqual([["anastasis"], ["anastasis-gtk"]], groups) 63 64 def test_upgrade_queries_a_shared_repository_once(self): 65 arguments = SimpleNamespace( 66 components=["taler-wallet-cli", "taler-harness"], 67 dev=True, 68 dry=True, 69 ) 70 with ( 71 patch.object( 72 TALER_PKG, 73 "list_remote_tags", 74 return_value=["v1.6.33-dev.2", "v1.6.33-dev.3"], 75 ) as list_remote_tags, 76 patch("sys.stdout", new_callable=StringIO), 77 ): 78 TALER_PKG.upgrade(arguments) 79 80 list_remote_tags.assert_called_once() 81 82 83 if __name__ == "__main__": 84 unittest.main()