import asyncio import pytest from hass_assistant import ConversationSession @pytest.mark.asyncio async def test_session_idle_timeout_triggers_end(): session = ConversationSession( enabled=True, idle_timeout_seconds=1, end_keywords=["再见", "拜拜", "滚", "退下"], ) triggered = {"value": False} async def on_timeout(): triggered["value"] = True session.restart_idle_timer(on_timeout) await asyncio.sleep(1.2) assert triggered["value"] is True await session.close() def test_session_end_keyword_contains_match(): session = ConversationSession( enabled=True, idle_timeout_seconds=15, end_keywords=["再见", "拜拜", "滚", "退下"], ) assert session.match_end_keyword("那就先这样吧,再见哈") == "再见" assert session.match_end_keyword("你先退下吧") == "退下" assert session.match_end_keyword("继续聊聊") is None def test_session_area_mapping_hit_and_miss(): session = ConversationSession( enabled=True, idle_timeout_seconds=15, end_keywords=["再见"], ) mapping = {"192.168.1.101": "客厅"} assert session.resolve_area("192.168.1.101", mapping) == "客厅" assert session.resolve_area("192.168.1.102", mapping) is None assert session.resolve_area(None, mapping) is None prefix = session.build_area_prefix("客厅") assert "当前用户对话所在区域:客厅" in prefix