core/tests/components/airvisual/conftest.py

155 lines
4.2 KiB
Python
Raw Normal View History

"""Define test fixtures for AirVisual."""
from collections.abc import Generator
import json
from unittest.mock import AsyncMock, Mock, patch
import pytest
from homeassistant.components.airvisual import (
CONF_CITY,
CONF_INTEGRATION_TYPE,
DOMAIN,
INTEGRATION_TYPE_GEOGRAPHY_COORDS,
)
from homeassistant.components.airvisual.config_flow import async_get_geography_id
from homeassistant.const import (
CONF_API_KEY,
CONF_COUNTRY,
CONF_LATITUDE,
CONF_LONGITUDE,
CONF_SHOW_ON_MAP,
CONF_STATE,
)
from tests.common import MockConfigEntry, load_fixture
TEST_API_KEY = "abcde12345"
TEST_LATITUDE = 51.528308
TEST_LONGITUDE = -0.3817765
TEST_LATITUDE2 = 37.514626
TEST_LONGITUDE2 = 127.057414
COORDS_CONFIG = {
CONF_API_KEY: TEST_API_KEY,
CONF_LATITUDE: TEST_LATITUDE,
CONF_LONGITUDE: TEST_LONGITUDE,
}
COORDS_CONFIG2 = {
CONF_API_KEY: TEST_API_KEY,
CONF_LATITUDE: TEST_LATITUDE2,
CONF_LONGITUDE: TEST_LONGITUDE2,
}
TEST_CITY = "Beijing"
TEST_STATE = "Beijing"
TEST_COUNTRY = "China"
NAME_CONFIG = {
CONF_API_KEY: TEST_API_KEY,
CONF_CITY: TEST_CITY,
CONF_STATE: TEST_STATE,
CONF_COUNTRY: TEST_COUNTRY,
}
@pytest.fixture(name="cloud_api")
def cloud_api_fixture(data_cloud):
"""Define a mock CloudAPI object."""
return Mock(
air_quality=Mock(
city=AsyncMock(return_value=data_cloud),
nearest_city=AsyncMock(return_value=data_cloud),
)
)
@pytest.fixture(name="config_entry")
def config_entry_fixture(hass, config, config_entry_version, integration_type):
"""Define a config entry fixture."""
entry = MockConfigEntry(
domain=DOMAIN,
entry_id="3bd2acb0e4f0476d40865546d0d91921",
unique_id=async_get_geography_id(config),
data={**config, CONF_INTEGRATION_TYPE: integration_type},
options={CONF_SHOW_ON_MAP: True},
version=config_entry_version,
)
entry.add_to_hass(hass)
return entry
@pytest.fixture(name="config_entry_version")
def config_entry_version_fixture():
"""Define a config entry version fixture."""
return 2
@pytest.fixture(name="config")
def config_fixture():
"""Define a config entry data fixture."""
return COORDS_CONFIG
@pytest.fixture(name="data_cloud", scope="package")
def data_cloud_fixture():
"""Define an update coordinator data example."""
return json.loads(load_fixture("data.json", "airvisual"))
@pytest.fixture(name="data_pro", scope="package")
def data_pro_fixture():
"""Define an update coordinator data example for the Pro."""
return json.loads(load_fixture("data.json", "airvisual_pro"))
@pytest.fixture(name="integration_type")
def integration_type_fixture():
"""Define an integration type."""
return INTEGRATION_TYPE_GEOGRAPHY_COORDS
@pytest.fixture(name="mock_pyairvisual")
async def mock_pyairvisual_fixture(cloud_api, node_samba):
"""Define a fixture to patch pyairvisual."""
with patch(
"homeassistant.components.airvisual.CloudAPI",
return_value=cloud_api,
), patch(
"homeassistant.components.airvisual.config_flow.CloudAPI",
return_value=cloud_api,
), patch(
"homeassistant.components.airvisual_pro.NodeSamba",
return_value=node_samba,
), patch(
"homeassistant.components.airvisual_pro.config_flow.NodeSamba",
return_value=node_samba,
):
yield
@pytest.fixture(name="node_samba")
def node_samba_fixture(data_pro):
"""Define a mock NodeSamba object."""
return Mock(
async_connect=AsyncMock(),
async_disconnect=AsyncMock(),
async_get_latest_measurements=AsyncMock(return_value=data_pro),
)
@pytest.fixture(name="setup_config_entry")
async def setup_config_entry_fixture(hass, config_entry, mock_pyairvisual):
"""Define a fixture to set up airvisual."""
assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock, None, None]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.airvisual.async_setup_entry", return_value=True
) as mock_setup_entry:
yield mock_setup_entry