core/tests/components/airvisual_pro/conftest.py

97 lines
2.8 KiB
Python
Raw Normal View History

"""Define test fixtures for AirVisual Pro."""
from collections.abc import AsyncGenerator, Generator
from typing import Any
from unittest.mock import AsyncMock, Mock, patch
import pytest
from homeassistant.components.airvisual_pro.const import DOMAIN
from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from homeassistant.util.json import JsonObjectType
from tests.common import MockConfigEntry, load_json_object_fixture
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.airvisual_pro.async_setup_entry", return_value=True
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture(name="config_entry")
def config_entry_fixture(
hass: HomeAssistant, config: dict[str, Any]
) -> MockConfigEntry:
"""Define a config entry fixture."""
entry = MockConfigEntry(
domain=DOMAIN,
entry_id="6a2b3770e53c28dc1eeb2515e906b0ce",
unique_id="XXXXXXX",
data=config,
)
entry.add_to_hass(hass)
return entry
@pytest.fixture(name="config")
def config_fixture() -> dict[str, Any]:
"""Define a config entry data fixture."""
return {
CONF_IP_ADDRESS: "192.168.1.101",
CONF_PASSWORD: "password123",
}
@pytest.fixture(name="connect")
def connect_fixture() -> AsyncMock:
"""Define a mocked async_connect method."""
return AsyncMock(return_value=True)
@pytest.fixture(name="disconnect")
def disconnect_fixture() -> AsyncMock:
"""Define a mocked async_connect method."""
return AsyncMock()
@pytest.fixture(name="data", scope="package")
def data_fixture() -> JsonObjectType:
"""Define an update coordinator data example."""
return load_json_object_fixture("data.json", "airvisual_pro")
@pytest.fixture(name="pro")
def pro_fixture(
connect: AsyncMock, data: JsonObjectType, disconnect: AsyncMock
) -> Mock:
"""Define a mocked NodeSamba object."""
return Mock(
async_connect=connect,
async_disconnect=disconnect,
async_get_latest_measurements=AsyncMock(return_value=data),
)
@pytest.fixture(name="setup_airvisual_pro")
async def setup_airvisual_pro_fixture(
hass: HomeAssistant, config, pro
) -> AsyncGenerator[None]:
"""Define a fixture to set up AirVisual Pro."""
with (
patch(
"homeassistant.components.airvisual_pro.config_flow.NodeSamba",
return_value=pro,
),
patch("homeassistant.components.airvisual_pro.NodeSamba", return_value=pro),
patch("homeassistant.components.airvisual_pro.PLATFORMS", []),
):
assert await async_setup_component(hass, DOMAIN, config)
await hass.async_block_till_done()
yield