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.
66 lines
2.7 KiB
Python
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()
|