AgentEvalTool/tests/unit/test_campaign_analysis_model_migration.py
sinohqb c63236f671 feat(campaign): support per-campaign analysis model override
Campaigns can pin an analysis model config instead of following the
global analysis default. Creation validates the referenced config
exists (400 otherwise); the create form offers enabled chat configs
with the global default as the fallback option.
2026-08-03 01:53:13 +08:00

39 lines
1.4 KiB
Python

"""Verify the campaign analysis-model migration adds a nullable column."""
import importlib
import sqlalchemy as sa
from alembic.migration import MigrationContext
from alembic.operations import Operations
def test_campaign_analysis_model_migration_adds_nullable_column(tmp_path, monkeypatch):
engine = sa.create_engine(f"sqlite:///{tmp_path / 'campaign_analysis.db'}")
metadata = sa.MetaData()
legacy_table = sa.Table(
"campaigns",
metadata,
sa.Column("id", sa.String(), primary_key=True),
sa.Column("name", sa.String(), nullable=False),
)
metadata.create_all(engine)
with engine.begin() as connection:
connection.execute(legacy_table.insert().values(id="camp-1", name="现有活动"))
operations = Operations(MigrationContext.configure(connection))
migration = importlib.import_module(
"migrations.versions.b7e4d3a92c15_add_campaign_analysis_model"
)
monkeypatch.setattr(migration, "op", operations)
migration.upgrade()
columns = {c["name"]: c for c in sa.inspect(connection).get_columns("campaigns")}
assert "analysis_model_config_id" in columns
assert columns["analysis_model_config_id"]["nullable"] is True
value = connection.execute(
sa.text("SELECT analysis_model_config_id FROM campaigns WHERE id = :id"),
{"id": "camp-1"},
).scalar_one()
assert value is None