PMFlow/backend/tests/test_mounted_ai_runtime_mig...

91 lines
3.0 KiB
Python

from __future__ import annotations
import importlib.util
from pathlib import Path
import sqlalchemy as sa
from alembic.migration import MigrationContext
from alembic.operations import Operations
def _load_migration_module():
path = (
Path(__file__).resolve().parents[1]
/ "alembic"
/ "versions"
/ "20260405_add_mounted_ai_runtime_tables.py"
)
spec = importlib.util.spec_from_file_location("mounted_ai_runtime_tables_migration", path)
module = importlib.util.module_from_spec(spec)
assert spec is not None
assert spec.loader is not None
spec.loader.exec_module(module)
return module
def _load_plan_state_migration_module():
path = (
Path(__file__).resolve().parents[1]
/ "alembic"
/ "versions"
/ "20260405_add_mounted_runtime_plan_state_fields.py"
)
spec = importlib.util.spec_from_file_location("mounted_runtime_plan_state_migration", path)
module = importlib.util.module_from_spec(spec)
assert spec is not None
assert spec.loader is not None
spec.loader.exec_module(module)
return module
def test_mounted_ai_runtime_migration_adds_tables() -> None:
migration = _load_migration_module()
engine = sa.create_engine("sqlite:///:memory:")
with engine.begin() as conn:
context = MigrationContext.configure(conn)
migration.op = Operations(context)
migration.upgrade()
inspector = sa.inspect(conn)
tables = set(inspector.get_table_names())
assert "mounted_topic_workspaces" in tables
assert "mounted_draft_workspaces" in tables
assert "mounted_conversation_runs" in tables
assert "mounted_agent_traces" in tables
assert "mounted_source_activations" in tables
assert "mounted_tool_capability_policies" in tables
migration.downgrade()
inspector = sa.inspect(conn)
tables = set(inspector.get_table_names())
assert "mounted_topic_workspaces" not in tables
assert "mounted_draft_workspaces" not in tables
assert "mounted_conversation_runs" not in tables
assert "mounted_agent_traces" not in tables
assert "mounted_source_activations" not in tables
assert "mounted_tool_capability_policies" not in tables
def test_mounted_ai_runtime_plan_state_migration_adds_topic_fields() -> None:
base_migration = _load_migration_module()
plan_state_migration = _load_plan_state_migration_module()
engine = sa.create_engine("sqlite:///:memory:")
with engine.begin() as conn:
context = MigrationContext.configure(conn)
base_migration.op = Operations(context)
plan_state_migration.op = Operations(context)
base_migration.upgrade()
plan_state_migration.upgrade()
inspector = sa.inspect(conn)
columns = {column["name"] for column in inspector.get_columns("mounted_topic_workspaces")}
assert "conversation_scope_key" in columns
assert "plan_status" in columns