"""Shared fixtures for ha-diag-agent tests.""" from __future__ import annotations import os 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 # --------------------------------------------------------------------------- # Event dir fixture # --------------------------------------------------------------------------- @pytest.fixture def tmp_events_dir(tmp_path: Path) -> Path: events = tmp_path / "events" events.mkdir() return events # --------------------------------------------------------------------------- # Storage fixture (in-memory via tmp SQLite) # --------------------------------------------------------------------------- @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(): """HAClient mock that behaves as an async context manager.""" client = MagicMock() client.__aenter__ = AsyncMock(return_value=client) client.__aexit__ = AsyncMock(return_value=None) client.get_api_status = AsyncMock(return_value={"message": "API running."}) return client