"""Fixtures for the Tailwind integration tests.""" from __future__ import annotations from collections.abc import Generator from unittest.mock import AsyncMock, MagicMock, patch from gotailwind import TailwindDeviceStatus import pytest from homeassistant.components.tailwind.const import DOMAIN from homeassistant.const import CONF_HOST, CONF_TOKEN from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry, load_fixture @pytest.fixture def device_fixture() -> str: """Return the device fixtures for a specific device.""" return "iq3" @pytest.fixture def mock_config_entry() -> MockConfigEntry: """Return the default mocked config entry.""" return MockConfigEntry( title="Tailwind iQ3", domain=DOMAIN, data={ CONF_HOST: "127.0.0.127", CONF_TOKEN: "123456", }, unique_id="3c:e9:0e:6d:21:84", ) @pytest.fixture def mock_setup_entry() -> Generator[AsyncMock, None, None]: """Mock setting up a config entry.""" with patch( "homeassistant.components.tailwind.async_setup_entry", return_value=True ): yield @pytest.fixture def mock_tailwind(device_fixture: str) -> Generator[MagicMock, None, None]: """Return a mocked Tailwind client.""" with patch( "homeassistant.components.tailwind.coordinator.Tailwind", autospec=True ) as tailwind_mock, patch( "homeassistant.components.tailwind.config_flow.Tailwind", new=tailwind_mock, ): tailwind = tailwind_mock.return_value tailwind.status.return_value = TailwindDeviceStatus.from_json( load_fixture(f"{device_fixture}.json", DOMAIN) ) yield tailwind @pytest.fixture async def init_integration( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_tailwind: MagicMock, ) -> MockConfigEntry: """Set up the Tailwind integration for testing.""" mock_config_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() return mock_config_entry