[IMP] script TODO support running test
This commit is contained in:
parent
f1f57758a1
commit
6fe4fd0676
2 changed files with 187 additions and 1 deletions
|
|
@ -240,7 +240,8 @@ class TODO:
|
||||||
[8] {t("menu_config")}
|
[8] {t("menu_config")}
|
||||||
[9] {t("menu_network")}
|
[9] {t("menu_network")}
|
||||||
[10] {t("menu_security")}
|
[10] {t("menu_security")}
|
||||||
[11] {t("menu_lang")}
|
[11] {t("menu_test")}
|
||||||
|
[12] {t("menu_lang")}
|
||||||
[0] {t("back")}
|
[0] {t("back")}
|
||||||
"""
|
"""
|
||||||
while True:
|
while True:
|
||||||
|
|
@ -289,6 +290,10 @@ class TODO:
|
||||||
if status is not False:
|
if status is not False:
|
||||||
return
|
return
|
||||||
elif status == "11":
|
elif status == "11":
|
||||||
|
status = self.prompt_execute_test()
|
||||||
|
if status is not False:
|
||||||
|
return
|
||||||
|
elif status == "12":
|
||||||
status = self._change_language()
|
status = self._change_language()
|
||||||
if status is not False:
|
if status is not False:
|
||||||
return
|
return
|
||||||
|
|
@ -859,6 +864,118 @@ class TODO:
|
||||||
else:
|
else:
|
||||||
print(t("cmd_not_found"))
|
print(t("cmd_not_found"))
|
||||||
|
|
||||||
|
def prompt_execute_test(self):
|
||||||
|
print(f"🤖 {t('test_description')}")
|
||||||
|
lst_choice = [
|
||||||
|
{"prompt_description": t("test_run_module")},
|
||||||
|
{"prompt_description": t("test_run_module_coverage")},
|
||||||
|
]
|
||||||
|
help_info = self.fill_help_info(lst_choice)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
status = click.prompt(help_info)
|
||||||
|
print()
|
||||||
|
if status == "0":
|
||||||
|
return False
|
||||||
|
elif status == "1":
|
||||||
|
self.execute_test_module(coverage=False)
|
||||||
|
elif status == "2":
|
||||||
|
self.execute_test_module(coverage=True)
|
||||||
|
else:
|
||||||
|
print(t("cmd_not_found"))
|
||||||
|
|
||||||
|
def execute_test_module(self, coverage=False):
|
||||||
|
# Module name
|
||||||
|
module_name = input(t("test_enter_module_name")).strip()
|
||||||
|
if not module_name:
|
||||||
|
print(t("test_module_required"))
|
||||||
|
return
|
||||||
|
|
||||||
|
# Database name
|
||||||
|
db_name = input(t("test_db_name")).strip()
|
||||||
|
if not db_name:
|
||||||
|
db_name = "test_todo_tmp"
|
||||||
|
|
||||||
|
# Extra modules
|
||||||
|
extra_modules = input(
|
||||||
|
t("test_install_extra_modules")
|
||||||
|
).strip()
|
||||||
|
|
||||||
|
# Log level
|
||||||
|
log_level = input(t("test_log_level")).strip()
|
||||||
|
if not log_level:
|
||||||
|
log_level = "test"
|
||||||
|
|
||||||
|
# Build module list
|
||||||
|
modules_to_install = module_name
|
||||||
|
if extra_modules:
|
||||||
|
modules_to_install += f",{extra_modules}"
|
||||||
|
|
||||||
|
# Step 1: Create temp DB
|
||||||
|
print(f"\n--- {t('test_creating_db')} '{db_name}' ---")
|
||||||
|
cmd_restore = (
|
||||||
|
f"./script/database/db_restore.py --database {db_name}"
|
||||||
|
)
|
||||||
|
self.execute.exec_command_live(
|
||||||
|
cmd_restore,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Step 2: Install modules
|
||||||
|
print(f"\n--- {t('test_installing_modules')}: {modules_to_install} ---")
|
||||||
|
cmd_install = (
|
||||||
|
f"./script/addons/install_addons.sh"
|
||||||
|
f" {db_name} {modules_to_install}"
|
||||||
|
)
|
||||||
|
self.execute.exec_command_live(
|
||||||
|
cmd_install,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Step 3: Run tests
|
||||||
|
print(f"\n--- {t('test_running')}: {module_name} ---")
|
||||||
|
cmd_test = (
|
||||||
|
f"ODOO_MODE_TEST=true"
|
||||||
|
f" ./run.sh"
|
||||||
|
f" -d {db_name}"
|
||||||
|
f" -u {module_name}"
|
||||||
|
f" --log-level={log_level}"
|
||||||
|
)
|
||||||
|
if coverage:
|
||||||
|
cmd_test = f"ODOO_MODE_COVERAGE=true {cmd_test}"
|
||||||
|
status_code, output = self.execute.exec_command_live(
|
||||||
|
cmd_test,
|
||||||
|
return_status_and_output=True,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
if status_code == 0:
|
||||||
|
print(f"\n✅ {t('test_success')}")
|
||||||
|
else:
|
||||||
|
print(f"\n❌ {t('test_failed')} {status_code}")
|
||||||
|
|
||||||
|
# Step 4: Cleanup
|
||||||
|
lang = get_lang()
|
||||||
|
keep_input = input(t("test_keep_db")).strip().lower()
|
||||||
|
keep = keep_input in (
|
||||||
|
("o", "oui") if lang == "fr" else ("y", "yes")
|
||||||
|
)
|
||||||
|
if keep:
|
||||||
|
print(f"{t('test_db_kept')}: {db_name}")
|
||||||
|
else:
|
||||||
|
print(f"\n--- {t('test_cleaning_db')} '{db_name}' ---")
|
||||||
|
cmd_drop = (
|
||||||
|
f"./odoo_bin.sh db --drop --database {db_name}"
|
||||||
|
)
|
||||||
|
self.execute.exec_command_live(
|
||||||
|
cmd_drop,
|
||||||
|
source_erplibre=False,
|
||||||
|
single_source_erplibre=True,
|
||||||
|
)
|
||||||
|
|
||||||
def execute_pip_audit(self):
|
def execute_pip_audit(self):
|
||||||
lst_version, lst_version_installed, odoo_installed_version = (
|
lst_version, lst_version_installed, odoo_installed_version = (
|
||||||
self.get_odoo_version()
|
self.get_odoo_version()
|
||||||
|
|
|
||||||
|
|
@ -343,6 +343,75 @@ TRANSLATIONS = {
|
||||||
"fr": "Débogage todo.py",
|
"fr": "Débogage todo.py",
|
||||||
"en": "Debug todo.py",
|
"en": "Debug todo.py",
|
||||||
},
|
},
|
||||||
|
# Test section
|
||||||
|
"menu_test": {
|
||||||
|
"fr": "Test - Tester un module Odoo",
|
||||||
|
"en": "Test - Test an Odoo module",
|
||||||
|
},
|
||||||
|
"test_description": {
|
||||||
|
"fr": "Tester un module Odoo sur une base de données temporaire!",
|
||||||
|
"en": "Test an Odoo module on a temporary database!",
|
||||||
|
},
|
||||||
|
"test_run_module": {
|
||||||
|
"fr": "Tester un module",
|
||||||
|
"en": "Test a module",
|
||||||
|
},
|
||||||
|
"test_run_module_coverage": {
|
||||||
|
"fr": "Tester un module avec couverture de code",
|
||||||
|
"en": "Test a module with code coverage",
|
||||||
|
},
|
||||||
|
"test_enter_module_name": {
|
||||||
|
"fr": "Nom du module à tester : ",
|
||||||
|
"en": "Module name to test: ",
|
||||||
|
},
|
||||||
|
"test_db_name": {
|
||||||
|
"fr": "Nom de la base de données temporaire (défaut: test_todo_tmp) : ",
|
||||||
|
"en": "Temporary database name (default: test_todo_tmp): ",
|
||||||
|
},
|
||||||
|
"test_install_extra_modules": {
|
||||||
|
"fr": "Modules supplémentaires à installer (séparés par des virgules, vide pour aucun) : ",
|
||||||
|
"en": "Extra modules to install (comma-separated, empty for none): ",
|
||||||
|
},
|
||||||
|
"test_log_level": {
|
||||||
|
"fr": "Niveau de log (défaut: test) : ",
|
||||||
|
"en": "Log level (default: test): ",
|
||||||
|
},
|
||||||
|
"test_creating_db": {
|
||||||
|
"fr": "Création de la base de données temporaire",
|
||||||
|
"en": "Creating temporary database",
|
||||||
|
},
|
||||||
|
"test_installing_modules": {
|
||||||
|
"fr": "Installation des modules",
|
||||||
|
"en": "Installing modules",
|
||||||
|
},
|
||||||
|
"test_running": {
|
||||||
|
"fr": "Exécution des tests",
|
||||||
|
"en": "Running tests",
|
||||||
|
},
|
||||||
|
"test_cleaning_db": {
|
||||||
|
"fr": "Suppression de la base de données temporaire",
|
||||||
|
"en": "Cleaning up temporary database",
|
||||||
|
},
|
||||||
|
"test_keep_db": {
|
||||||
|
"fr": "Conserver la base de données temporaire? (o/N) : ",
|
||||||
|
"en": "Keep the temporary database? (y/N): ",
|
||||||
|
},
|
||||||
|
"test_db_kept": {
|
||||||
|
"fr": "Base de données conservée",
|
||||||
|
"en": "Database kept",
|
||||||
|
},
|
||||||
|
"test_success": {
|
||||||
|
"fr": "Tests terminés avec succès!",
|
||||||
|
"en": "Tests completed successfully!",
|
||||||
|
},
|
||||||
|
"test_failed": {
|
||||||
|
"fr": "Les tests ont échoué avec le code de retour",
|
||||||
|
"en": "Tests failed with return code",
|
||||||
|
},
|
||||||
|
"test_module_required": {
|
||||||
|
"fr": "Le nom du module est requis!",
|
||||||
|
"en": "Module name is required!",
|
||||||
|
},
|
||||||
# Language selection
|
# Language selection
|
||||||
"lang_prompt": {
|
"lang_prompt": {
|
||||||
"fr": "Choisir la langue / Choose language",
|
"fr": "Choisir la langue / Choose language",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue