Improve type hints in airvisual test fixtures (#119079)

This commit is contained in:
epenet 2024-06-07 15:35:33 +02:00 committed by GitHub
parent 5bf42e64e3
commit 37b0e8fa33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 45 additions and 26 deletions

View File

@ -1,10 +1,10 @@
"""Define test fixtures for AirVisual.""" """Define test fixtures for AirVisual."""
import json from typing import Any
from unittest.mock import AsyncMock, Mock, patch from unittest.mock import AsyncMock, Mock, patch
import pytest import pytest
from typing_extensions import Generator from typing_extensions import AsyncGenerator, Generator
from homeassistant.components.airvisual import ( from homeassistant.components.airvisual import (
CONF_CITY, CONF_CITY,
@ -21,8 +21,10 @@ from homeassistant.const import (
CONF_SHOW_ON_MAP, CONF_SHOW_ON_MAP,
CONF_STATE, CONF_STATE,
) )
from homeassistant.core import HomeAssistant
from homeassistant.util.json import JsonObjectType
from tests.common import MockConfigEntry, load_fixture from tests.common import MockConfigEntry, load_json_object_fixture
TEST_API_KEY = "abcde12345" TEST_API_KEY = "abcde12345"
TEST_LATITUDE = 51.528308 TEST_LATITUDE = 51.528308
@ -55,7 +57,7 @@ NAME_CONFIG = {
@pytest.fixture(name="cloud_api") @pytest.fixture(name="cloud_api")
def cloud_api_fixture(data_cloud): def cloud_api_fixture(data_cloud: JsonObjectType) -> Mock:
"""Define a mock CloudAPI object.""" """Define a mock CloudAPI object."""
return Mock( return Mock(
air_quality=Mock( air_quality=Mock(
@ -66,7 +68,12 @@ def cloud_api_fixture(data_cloud):
@pytest.fixture(name="config_entry") @pytest.fixture(name="config_entry")
def config_entry_fixture(hass, config, config_entry_version, integration_type): def config_entry_fixture(
hass: HomeAssistant,
config: dict[str, Any],
config_entry_version: int,
integration_type: str,
) -> MockConfigEntry:
"""Define a config entry fixture.""" """Define a config entry fixture."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -81,37 +88,39 @@ def config_entry_fixture(hass, config, config_entry_version, integration_type):
@pytest.fixture(name="config_entry_version") @pytest.fixture(name="config_entry_version")
def config_entry_version_fixture(): def config_entry_version_fixture() -> int:
"""Define a config entry version fixture.""" """Define a config entry version fixture."""
return 2 return 2
@pytest.fixture(name="config") @pytest.fixture(name="config")
def config_fixture(): def config_fixture() -> dict[str, Any]:
"""Define a config entry data fixture.""" """Define a config entry data fixture."""
return COORDS_CONFIG return COORDS_CONFIG
@pytest.fixture(name="data_cloud", scope="package") @pytest.fixture(name="data_cloud", scope="package")
def data_cloud_fixture(): def data_cloud_fixture() -> JsonObjectType:
"""Define an update coordinator data example.""" """Define an update coordinator data example."""
return json.loads(load_fixture("data.json", "airvisual")) return load_json_object_fixture("data.json", "airvisual")
@pytest.fixture(name="data_pro", scope="package") @pytest.fixture(name="data_pro", scope="package")
def data_pro_fixture(): def data_pro_fixture() -> JsonObjectType:
"""Define an update coordinator data example for the Pro.""" """Define an update coordinator data example for the Pro."""
return json.loads(load_fixture("data.json", "airvisual_pro")) return load_json_object_fixture("data.json", "airvisual_pro")
@pytest.fixture(name="integration_type") @pytest.fixture(name="integration_type")
def integration_type_fixture(): def integration_type_fixture() -> str:
"""Define an integration type.""" """Define an integration type."""
return INTEGRATION_TYPE_GEOGRAPHY_COORDS return INTEGRATION_TYPE_GEOGRAPHY_COORDS
@pytest.fixture(name="mock_pyairvisual") @pytest.fixture(name="mock_pyairvisual")
async def mock_pyairvisual_fixture(cloud_api, node_samba): async def mock_pyairvisual_fixture(
cloud_api: Mock, node_samba: Mock
) -> AsyncGenerator[None]:
"""Define a fixture to patch pyairvisual.""" """Define a fixture to patch pyairvisual."""
with ( with (
patch( patch(
@ -135,7 +144,7 @@ async def mock_pyairvisual_fixture(cloud_api, node_samba):
@pytest.fixture(name="node_samba") @pytest.fixture(name="node_samba")
def node_samba_fixture(data_pro): def node_samba_fixture(data_pro: JsonObjectType) -> Mock:
"""Define a mock NodeSamba object.""" """Define a mock NodeSamba object."""
return Mock( return Mock(
async_connect=AsyncMock(), async_connect=AsyncMock(),
@ -145,7 +154,9 @@ def node_samba_fixture(data_pro):
@pytest.fixture(name="setup_config_entry") @pytest.fixture(name="setup_config_entry")
async def setup_config_entry_fixture(hass, config_entry, mock_pyairvisual): async def setup_config_entry_fixture(
hass: HomeAssistant, config_entry: MockConfigEntry, mock_pyairvisual: None
) -> None:
"""Define a fixture to set up airvisual.""" """Define a fixture to set up airvisual."""
assert await hass.config_entries.async_setup(config_entry.entry_id) assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done() await hass.async_block_till_done()

View File

@ -1,16 +1,18 @@
"""Define test fixtures for AirVisual Pro.""" """Define test fixtures for AirVisual Pro."""
import json from typing import Any
from unittest.mock import AsyncMock, Mock, patch from unittest.mock import AsyncMock, Mock, patch
import pytest import pytest
from typing_extensions import Generator from typing_extensions import AsyncGenerator, Generator
from homeassistant.components.airvisual_pro.const import DOMAIN from homeassistant.components.airvisual_pro.const import DOMAIN
from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util.json import JsonObjectType
from tests.common import MockConfigEntry, load_fixture from tests.common import MockConfigEntry, load_json_object_fixture
@pytest.fixture @pytest.fixture
@ -23,7 +25,9 @@ def mock_setup_entry() -> Generator[AsyncMock]:
@pytest.fixture(name="config_entry") @pytest.fixture(name="config_entry")
def config_entry_fixture(hass, config): def config_entry_fixture(
hass: HomeAssistant, config: dict[str, Any]
) -> MockConfigEntry:
"""Define a config entry fixture.""" """Define a config entry fixture."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -36,7 +40,7 @@ def config_entry_fixture(hass, config):
@pytest.fixture(name="config") @pytest.fixture(name="config")
def config_fixture(hass): def config_fixture() -> dict[str, Any]:
"""Define a config entry data fixture.""" """Define a config entry data fixture."""
return { return {
CONF_IP_ADDRESS: "192.168.1.101", CONF_IP_ADDRESS: "192.168.1.101",
@ -45,25 +49,27 @@ def config_fixture(hass):
@pytest.fixture(name="connect") @pytest.fixture(name="connect")
def connect_fixture(): def connect_fixture() -> AsyncMock:
"""Define a mocked async_connect method.""" """Define a mocked async_connect method."""
return AsyncMock(return_value=True) return AsyncMock(return_value=True)
@pytest.fixture(name="disconnect") @pytest.fixture(name="disconnect")
def disconnect_fixture(): def disconnect_fixture() -> AsyncMock:
"""Define a mocked async_connect method.""" """Define a mocked async_connect method."""
return AsyncMock() return AsyncMock()
@pytest.fixture(name="data", scope="package") @pytest.fixture(name="data", scope="package")
def data_fixture(): def data_fixture() -> JsonObjectType:
"""Define an update coordinator data example.""" """Define an update coordinator data example."""
return json.loads(load_fixture("data.json", "airvisual_pro")) return load_json_object_fixture("data.json", "airvisual_pro")
@pytest.fixture(name="pro") @pytest.fixture(name="pro")
def pro_fixture(connect, data, disconnect): def pro_fixture(
connect: AsyncMock, data: JsonObjectType, disconnect: AsyncMock
) -> Mock:
"""Define a mocked NodeSamba object.""" """Define a mocked NodeSamba object."""
return Mock( return Mock(
async_connect=connect, async_connect=connect,
@ -73,7 +79,9 @@ def pro_fixture(connect, data, disconnect):
@pytest.fixture(name="setup_airvisual_pro") @pytest.fixture(name="setup_airvisual_pro")
async def setup_airvisual_pro_fixture(hass, config, pro): async def setup_airvisual_pro_fixture(
hass: HomeAssistant, config, pro
) -> AsyncGenerator[None]:
"""Define a fixture to set up AirVisual Pro.""" """Define a fixture to set up AirVisual Pro."""
with ( with (
patch( patch(