import pytest from unittest.mock import AsyncMock, patch, MagicMock @pytest.mark.asyncio async def test_get_or_create_profile_note_returns_body(): """get_profile_body() should return empty string when no profile note exists.""" with patch("fabledassistant.services.briefing_profile.list_notes", new_callable=AsyncMock) as mock_list: mock_list.return_value = ([], 0) from fabledassistant.services.briefing_profile import get_profile_body body = await get_profile_body(user_id=1) assert body == "" @pytest.mark.asyncio async def test_post_message_accepts_metadata(): """post_message should accept an optional metadata dict and store it.""" from unittest.mock import AsyncMock, patch, MagicMock mock_msg = MagicMock() mock_msg.id = 1 with patch("fabledassistant.services.briefing_conversations.async_session") as mock_session_cls: mock_session = AsyncMock() mock_session.__aenter__ = AsyncMock(return_value=mock_session) mock_session.__aexit__ = AsyncMock(return_value=False) mock_session.add = MagicMock() mock_session.get = AsyncMock(return_value=None) mock_session.commit = AsyncMock() mock_session.refresh = AsyncMock() mock_session_cls.return_value = mock_session from fabledassistant.services.briefing_conversations import post_message metadata = {"weather": {"location": "Berlin"}, "rss_item_ids": [1, 2]} await post_message(1, "assistant", "Hello", metadata=metadata) # Verify Message was constructed with msg_metadata call_args = mock_session.add.call_args[0][0] assert call_args.msg_metadata == metadata