[ADD] test for command execute-script-sql
This commit is contained in:
parent
fb28a547f2
commit
e044954432
|
|
@ -40,15 +40,43 @@ def get_postgres_container(ctx):
|
||||||
detach=True,
|
detach=True,
|
||||||
)
|
)
|
||||||
# TODO, improve me.
|
# TODO, improve me.
|
||||||
|
# Postgres container doesn't seems available immediately.
|
||||||
|
# check in odoo container, i remember that there is
|
||||||
|
# some script to do the job
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
return container
|
return container
|
||||||
|
|
||||||
|
|
||||||
def execute_sql_file(ctx, request, sql_file):
|
def execute_sql_file(ctx, database, sql_file):
|
||||||
# TODO.
|
container = get_postgres_container(ctx)
|
||||||
# Note : work on path in a docker context.
|
|
||||||
# container = get_postgres_container(ctx)
|
# Recreate relative path to make posible to
|
||||||
pass
|
# call psql in the container
|
||||||
|
if str(ctx.obj["env_folder_path"]) not in str(sql_file):
|
||||||
|
raise Exception(
|
||||||
|
"The SQL file %s is not in the"
|
||||||
|
" main folder %s available"
|
||||||
|
" in the postgres container."
|
||||||
|
% (sql_file, ctx.obj["env_folder_path"])
|
||||||
|
)
|
||||||
|
relative_path = Path(
|
||||||
|
str(sql_file).replace(str(ctx.obj["env_folder_path"]), ".")
|
||||||
|
)
|
||||||
|
|
||||||
|
container_path = Path("/env/") / relative_path
|
||||||
|
docker_command = (
|
||||||
|
"psql" " --username=odoo" " --dbname={database}" " --file {file_path}"
|
||||||
|
).format(database=database, file_path=container_path)
|
||||||
|
logger.info(
|
||||||
|
"Executing the script '%s' in postgres container"
|
||||||
|
" on database %s" % (relative_path, database)
|
||||||
|
)
|
||||||
|
docker_result = container.exec_run(docker_command)
|
||||||
|
if docker_result.exit_code != 0:
|
||||||
|
raise Exception(
|
||||||
|
"The script '%s' failed on database %s. Exit Code : %d"
|
||||||
|
% (relative_path, database, docker_result.exit_code)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def execute_sql_request(ctx, request, database="postgres"):
|
def execute_sql_request(ctx, request, database="postgres"):
|
||||||
|
|
@ -111,9 +139,9 @@ def ensure_database(ctx, database: str, state="present"):
|
||||||
def execute_sql_files_pre_migration(
|
def execute_sql_files_pre_migration(
|
||||||
ctx, database: str, migration_step: dict, sql_files: list = []
|
ctx, database: str, migration_step: dict, sql_files: list = []
|
||||||
):
|
):
|
||||||
|
ensure_database(ctx, database, state="present")
|
||||||
if not sql_files:
|
if not sql_files:
|
||||||
script_folder = get_script_folder(ctx, migration_step)
|
script_folder = get_script_folder(ctx, migration_step)
|
||||||
|
|
||||||
sql_files = [
|
sql_files = [
|
||||||
script_folder / Path(f)
|
script_folder / Path(f)
|
||||||
for f in os.listdir(script_folder)
|
for f in os.listdir(script_folder)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ def test_cli_execute_script_python():
|
||||||
"./tests/extra_script_B/post-migration-custom_test.py"
|
"./tests/extra_script_B/post-migration-custom_test.py"
|
||||||
).absolute()
|
).absolute()
|
||||||
|
|
||||||
db_name = "database_test_cli_execute_script"
|
db_name = "database_test_cli_execute_script_python"
|
||||||
|
|
||||||
# Install Odoo on V13 with product installed
|
# Install Odoo on V13 with product installed
|
||||||
cli_runner_invoke(
|
cli_runner_invoke(
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,40 @@
|
||||||
|
import shutil
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from odoo_openupgrade_wizard.tools_postgres import (
|
||||||
|
ensure_database,
|
||||||
|
execute_sql_request,
|
||||||
|
)
|
||||||
|
|
||||||
|
from . import build_ctx_from_config_file, cli_runner_invoke
|
||||||
|
|
||||||
|
|
||||||
def test_cli_execute_script_sql():
|
def test_cli_execute_script_sql():
|
||||||
return
|
output_folder_path = Path("./tests/output_B").absolute()
|
||||||
|
|
||||||
|
extra_script_path = Path(
|
||||||
|
"./tests/extra_script_B/pre-migration-custom_test.sql"
|
||||||
|
).absolute()
|
||||||
|
|
||||||
|
destination_path = output_folder_path / "scripts/step_01__update__13.0"
|
||||||
|
shutil.copy(extra_script_path, destination_path)
|
||||||
|
ctx = build_ctx_from_config_file(output_folder_path)
|
||||||
|
db_name = "database_test_cli_execute_script_sql"
|
||||||
|
ensure_database(ctx, db_name, state="absent")
|
||||||
|
ensure_database(ctx, db_name, state="present")
|
||||||
|
|
||||||
|
cli_runner_invoke(
|
||||||
|
[
|
||||||
|
"--log-level=DEBUG",
|
||||||
|
"--env-folder=%s" % output_folder_path,
|
||||||
|
"execute-script-sql",
|
||||||
|
"--step=1",
|
||||||
|
"--database=%s" % db_name,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Ensure that the request has been done correctlys
|
||||||
|
request = "SELECT name from city order by id;"
|
||||||
|
result = execute_sql_request(ctx, request, database=db_name)
|
||||||
|
|
||||||
|
assert result == [["Chicago"], ["Cavalaire Sur Mer"]]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user