You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/tests/test_admin_db_bootstrap.py

66 lines
2.7 KiB
Python

import unittest
from unittest.mock import MagicMock, patch
from admin_app.db import bootstrap as bootstrap_module
from admin_app.db import init_db as init_db_module
class AdminBootstrapRuntimeTests(unittest.TestCase):
@patch.object(bootstrap_module, "_ensure_admin_schema_evolution")
@patch.object(bootstrap_module.AdminBase.metadata, "create_all")
def test_bootstrap_admin_database_creates_schema(self, create_all, ensure_admin_schema_evolution):
bootstrap_module.bootstrap_admin_database()
create_all.assert_called_once_with(bind=bootstrap_module.admin_engine)
ensure_admin_schema_evolution.assert_called_once_with()
@patch.object(
bootstrap_module.AdminBase.metadata,
"create_all",
side_effect=RuntimeError("admin db down"),
)
def test_bootstrap_admin_database_wraps_failures(self, create_all):
with self.assertRaisesRegex(RuntimeError, "admin db down"):
bootstrap_module.bootstrap_admin_database()
create_all.assert_called_once_with(bind=bootstrap_module.admin_engine)
@patch.object(bootstrap_module, "text", side_effect=lambda statement: statement)
@patch.object(bootstrap_module, "inspect")
def test_schema_evolution_adds_version_columns_when_missing(self, inspect_mock, text_mock):
inspector = inspect_mock.return_value
inspector.get_table_names.return_value = ["tool_drafts"]
inspector.get_columns.return_value = [
{"name": "id"},
{"name": "draft_id"},
{"name": "tool_name"},
]
connection = MagicMock()
transaction = MagicMock()
transaction.__enter__.return_value = connection
transaction.__exit__.return_value = None
with patch.object(bootstrap_module.admin_engine, "begin", return_value=transaction) as begin:
bootstrap_module._ensure_admin_schema_evolution()
begin.assert_called_once_with()
executed_statements = [call.args[0] for call in connection.execute.call_args_list]
self.assertEqual(
executed_statements,
[
"ALTER TABLE tool_drafts ADD COLUMN current_version_number INT NOT NULL DEFAULT 1",
"ALTER TABLE tool_drafts ADD COLUMN version_count INT NOT NULL DEFAULT 1",
"ALTER TABLE tool_drafts ADD COLUMN generation_model VARCHAR(120)",
],
)
@patch.object(init_db_module, "bootstrap_admin_database")
def test_init_db_wrapper_delegates_to_bootstrap_admin_database(self, bootstrap_admin_database):
init_db_module.init_db()
bootstrap_admin_database.assert_called_once_with()
if __name__ == "__main__":
unittest.main()