"""Shared fixtures for ha-diag-agent tests.""" from __future__ import annotations from pathlib import Path from typing import AsyncGenerator from unittest.mock import AsyncMock, MagicMock import pytest import pytest_asyncio from ha_diag.event_emitter import EventEmitter from ha_diag.storage import Storage # --------------------------------------------------------------------------- # Filesystem fixtures # --------------------------------------------------------------------------- @pytest.fixture def tmp_events_dir(tmp_path: Path) -> Path: events = tmp_path / "events" events.mkdir() return events # --------------------------------------------------------------------------- # Storage fixture (tmp SQLite — fast, no mocking) # --------------------------------------------------------------------------- @pytest_asyncio.fixture async def storage(tmp_path: Path) -> AsyncGenerator[Storage, None]: s = Storage(tmp_path / "test.db") await s.open() yield s await s.close() # --------------------------------------------------------------------------- # EventEmitter fixture # --------------------------------------------------------------------------- @pytest.fixture def emitter(tmp_events_dir: Path) -> EventEmitter: return EventEmitter(tmp_events_dir, node_name="test-node") # --------------------------------------------------------------------------- # Mock HA client fixture # --------------------------------------------------------------------------- @pytest.fixture def mock_ha_client(): """Plain HAClient mock — no context manager, just async methods.""" client = MagicMock() client.get_api_status = AsyncMock(return_value={"message": "API running."}) client.get_states = AsyncMock(return_value=[]) client.get_entity_registry = AsyncMock(return_value=[]) return client