taler-deployment

Deployment scripts and configuration files
Log | Files | Refs | README

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()