odoo-openupgrade-wizard/tests/cli_33_shell_test.py
2024-12-12 10:40:10 +00:00

80 lines
2.1 KiB
Python

import pathlib
import shutil
from pytest import raises
from odoo_openupgrade_wizard.cli.cli_options import (
get_migration_step_from_options,
)
from odoo_openupgrade_wizard.tools.tools_odoo import run_odoo
from odoo_openupgrade_wizard.tools.tools_postgres import ensure_database
from . import (
build_ctx_from_config_file,
cli_runner_invoke,
move_to_test_folder,
)
def test_cli_shell():
move_to_test_folder()
ctx = build_ctx_from_config_file()
migration_step = get_migration_step_from_options(ctx, 1)
# Ensure environment is clean
db_name = "database_test_cli___shell"
ensure_database(ctx, db_name, state="absent")
dest_filestore_path = pathlib.Path(f"./filestore/filestore/{db_name}")
shutil.rmtree(dest_filestore_path, ignore_errors=True)
# Set the log prefix
ctx.obj["log_prefix"] = "test_cli_shell"
# Initialize the database
stop_after_init = False
run_odoo(
ctx,
migration_step,
database=db_name,
detached_container=not stop_after_init,
stop_after_init=stop_after_init,
init="base",
execution_context="regular",
publish_ports=False,
)
# Test that a simple script executes successfully
result = cli_runner_invoke(
[
"shell",
f"--database={db_name}",
"--step=1",
'--code="print("Hello, World!")"',
]
)
assert result.exit_code == 0
assert "Hello, World!" in result.output
# Test with a script that queries a model
result = cli_runner_invoke(
[
"shell",
f"--database={db_name}",
"--step=1",
"--code=\"print(env['res.partner'].search_count([]))\"",
]
)
assert result.exit_code == 0
assert result.output.strip().isdigit() # Should return a number
# Test with missing database
with raises(Exception):
cli_runner_invoke(
[
"shell",
"--database=nonexistent_database",
"--step=1",
'--script="print(env.user.name)"',
]
)