"""Smoke test for migration 0003: model classes import, schema shape correct.""" from backend.app.models import ( Base, ImageRecord, MLSettings, TagAlias, TagAllowlist, TagReferenceEmbedding, TagSuggestionRejection, ) def test_new_tables_registered(): expected = { "tag_allowlist", "tag_suggestion_rejection", "tag_alias", "tag_reference_embedding", "ml_settings", } assert expected.issubset(Base.metadata.tables.keys()) def test_image_record_columns_renamed(): cols = {c.name for c in ImageRecord.__table__.columns} # tagger_predictions (the renamed wd14_predictions) was later dropped in # migration 0046 — predictions live in image_prediction now (#768). assert "tagger_model_version" in cols assert "tagger_predictions" not in cols assert "wd14_predictions" not in cols assert "wd14_model_version" not in cols def test_tag_alias_composite_pk(): pk_cols = {c.name for c in TagAlias.__table__.primary_key.columns} assert pk_cols == {"alias_string", "alias_category"} def test_ml_settings_singleton_constraint(): names = {c.name for c in MLSettings.__table__.constraints} assert "ck_ml_settings_singleton" in names def test_tag_reference_embedding_has_vector(): cols = {c.name for c in TagReferenceEmbedding.__table__.columns} assert "embedding" in cols assert "reference_count" in cols def test_tag_allowlist_confidence_check(): names = {c.name for c in TagAllowlist.__table__.constraints} assert "ck_tag_allowlist_confidence_range" in names def test_tag_suggestion_rejection_pk(): pk_cols = {c.name for c in TagSuggestionRejection.__table__.primary_key.columns} assert pk_cols == {"image_record_id", "tag_id"}