1adec62d6c
Co-authored-by: multica-agent <github@multica.ai>
67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
from sqlalchemy import create_engine, select
|
|
from sqlalchemy.orm import Session, sessionmaker
|
|
|
|
from app.core.database import Base
|
|
from app.models.atp_model import AtpModel, AtpModelVersion, AtpSimulationRun
|
|
from app.services.atp_model_service import delete_model
|
|
|
|
|
|
def _build_sessionmaker():
|
|
engine = create_engine("sqlite+pysqlite:///:memory:")
|
|
Base.metadata.create_all(
|
|
bind=engine,
|
|
tables=[
|
|
AtpModel.__table__,
|
|
AtpModelVersion.__table__,
|
|
AtpSimulationRun.__table__,
|
|
],
|
|
)
|
|
return sessionmaker(bind=engine, autocommit=False, autoflush=False, expire_on_commit=False)
|
|
|
|
|
|
def test_delete_model_cascades_hidden_versions_and_runs() -> None:
|
|
testing_session = _build_sessionmaker()
|
|
session: Session = testing_session()
|
|
try:
|
|
model = AtpModel(
|
|
code="ATP-001",
|
|
name="示例模型",
|
|
source_type="atp",
|
|
status="enabled",
|
|
latest_version_no=1,
|
|
active_version_no=1,
|
|
)
|
|
session.add(model)
|
|
session.flush()
|
|
|
|
version = AtpModelVersion(
|
|
model_id=model.id,
|
|
version_no=1,
|
|
status="released",
|
|
atp_text="sample",
|
|
content_hash="hash-v1",
|
|
)
|
|
session.add(version)
|
|
session.flush()
|
|
|
|
session.add(
|
|
AtpSimulationRun(
|
|
model_id=model.id,
|
|
version_id=version.id,
|
|
status="success",
|
|
engine_mode="native",
|
|
timeout_seconds=60,
|
|
)
|
|
)
|
|
session.commit()
|
|
|
|
assert delete_model(session, model.id) is True
|
|
|
|
assert session.execute(select(AtpModel).where(AtpModel.id == model.id)).scalar_one_or_none() is None
|
|
assert session.execute(select(AtpModelVersion).where(AtpModelVersion.model_id == model.id)).scalar_one_or_none() is None
|
|
assert session.execute(select(AtpSimulationRun).where(AtpSimulationRun.model_id == model.id)).scalar_one_or_none() is None
|
|
finally:
|
|
session.close()
|