5665f484ed
msg_metadata maps to the 'metadata' DB column ('metadata' is reserved
by SQLAlchemy Declarative API). to_dict() exposes the key as 'metadata'
for frontend compatibility.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
41 lines
1.7 KiB
Python
41 lines
1.7 KiB
Python
def test_conversation_has_briefing_fields():
|
|
"""Conversation model must declare conversation_type and briefing_date."""
|
|
from fabledassistant.models.conversation import Conversation
|
|
cols = {c.key for c in Conversation.__table__.columns}
|
|
assert "conversation_type" in cols
|
|
assert "briefing_date" in cols
|
|
|
|
|
|
def test_rss_models_exist():
|
|
from fabledassistant.models.rss_feed import RssFeed, RssItem
|
|
feed_cols = {c.key for c in RssFeed.__table__.columns}
|
|
item_cols = {c.key for c in RssItem.__table__.columns}
|
|
assert {"id", "user_id", "url", "title", "last_fetched_at"} <= feed_cols
|
|
assert {"id", "feed_id", "guid", "title", "url", "published_at", "content"} <= item_cols
|
|
|
|
|
|
def test_weather_cache_model_exists():
|
|
from fabledassistant.models.weather_cache import WeatherCache
|
|
cols = {c.key for c in WeatherCache.__table__.columns}
|
|
assert {"id", "user_id", "location_key", "location_label", "forecast_json", "previous_json", "fetched_at"} <= cols
|
|
|
|
|
|
def test_message_metadata_field_exists():
|
|
from fabledassistant.models.conversation import Message
|
|
|
|
# DB column is named 'metadata'; Python attribute is 'msg_metadata'
|
|
# (SQLAlchemy reserves 'metadata' as an attribute name on mapped classes)
|
|
col_names = {c.name for c in Message.__table__.columns}
|
|
assert "metadata" in col_names
|
|
|
|
m = Message(conversation_id=1, role="assistant", content="hi", msg_metadata={"foo": 1})
|
|
assert m.msg_metadata == {"foo": 1}
|
|
|
|
|
|
def test_rss_item_topics_field_exists():
|
|
from fabledassistant.models.rss_feed import RssItem
|
|
|
|
cols = {c.key for c in RssItem.__table__.columns}
|
|
assert "topics" in cols
|
|
assert "classified_at" in cols
|