details:   https://code.tryton.org/tryton/commit/1efc6cabfdf8
branch:    default
user:      Cédric Krier <[email protected]>
date:      Thu Oct 08 23:40:28 2026 +0200
description:
        Try to restore database without setup function when testing scenario

        Restoring a backup without some setup functions, we can still call the 
missing
        setup and make a new backup.
diffstat:

 trytond/trytond/tests/tools.py |  50 +++++++++++++++++++++++++++--------------
 1 files changed, 33 insertions(+), 17 deletions(-)

diffs (65 lines):

diff -r 261e0c174ddf -r 1efc6cabfdf8 trytond/trytond/tests/tools.py
--- a/trytond/trytond/tests/tools.py    Wed Sep 23 10:50:27 2026 +0200
+++ b/trytond/trytond/tests/tools.py    Thu Oct 08 23:40:28 2026 +0200
@@ -23,28 +23,44 @@
 def activate_modules(modules, *setup):
     if isinstance(modules, str):
         modules = [modules]
-    cache_name = '-'.join(sorted(modules))
+    modules = set(modules)
+    setup = list(setup)
+    cache_prefix_name = cache_name = '-'.join(sorted(modules))
     if setup_name := '|'.join(_func_name(f) for f in setup):
         cache_name += f'--{setup_name}'
-    if restore_db_cache(cache_name):
-        return _get_config()
-    drop_create()
+    setup_to_do = []
+    while True:
+        current_cache_name = cache_prefix_name
+        if setup_name := '|'.join(_func_name(f) for f in setup):
+            current_cache_name += f'--{setup_name}'
+
+        restored = restore_db_cache(current_cache_name)
+        if not restored:
+            if setup:
+                setup_to_do.append(setup.pop())
+                continue
+            drop_create()
+
+            cfg = _get_config()
 
-    cfg = _get_config()
-    Module = Model.get('ir.module')
-    records = Module.find([
-            ('name', 'in', modules),
-            ])
-    assert len(records) == len(modules), (
-        f"Not found: {', '.join(set(modules) - {r.name for r in records})}")
-    Module.click(records, 'activate')
-    Wizard('ir.module.activate_upgrade').execute('upgrade')
+            Module = Model.get('ir.module')
+            records = Module.find([
+                    ('name', 'in', list(modules)),
+                    ])
+            assert len(records) == len(modules), (
+                f"Not found: {', '.join(modules - {r.name for r in records})}")
+            Module.click(records, 'activate')
+            Wizard('ir.module.activate_upgrade').execute('upgrade')
+        else:
+            cfg = _get_config()
 
-    for func in setup:
-        func(config=cfg)
+        if setup_to_do:
+            for func in reversed(setup_to_do):
+                func(config=cfg)
 
-    backup_db_cache(cache_name)
-    return cfg
+        if setup_to_do or not restored:
+            backup_db_cache(cache_name)
+        return cfg
 
 
 def _get_config():

Reply via email to