Refactor tradfri diagnostics tests (#88017)

This commit is contained in:
Martin Hjelmare 2023-02-13 18:39:48 +01:00 committed by GitHub
parent 8993a36e27
commit ab2ab1573e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 53 deletions

View file

@ -2,12 +2,20 @@
from __future__ import annotations from __future__ import annotations
from collections.abc import Generator from collections.abc import Generator
import json
from typing import Any
from unittest.mock import MagicMock, Mock, patch from unittest.mock import MagicMock, Mock, patch
import pytest import pytest
from pytradfri.device import Device
from pytradfri.device.air_purifier import AirPurifier
from homeassistant.components.tradfri.const import DOMAIN
from . import GATEWAY_ID, TRADFRI_PATH from . import GATEWAY_ID, TRADFRI_PATH
from tests.common import load_fixture
@pytest.fixture @pytest.fixture
def mock_gateway_info(): def mock_gateway_info():
@ -79,3 +87,18 @@ def mock_api_factory(mock_api) -> Generator[MagicMock, None, None]:
factory.init.return_value = factory.return_value factory.init.return_value = factory.return_value
factory.return_value.request = mock_api factory.return_value.request = mock_api
yield factory.return_value yield factory.return_value
@pytest.fixture(scope="session")
def air_purifier_response() -> dict[str, Any]:
"""Return an air purifier response."""
return json.loads(load_fixture("air_purifier.json", DOMAIN))
@pytest.fixture
def air_purifier(air_purifier_response: dict[str, Any]) -> AirPurifier:
"""Return air purifier."""
device = Device(air_purifier_response)
air_purifier_control = device.air_purifier_control
assert air_purifier_control
return air_purifier_control.air_purifiers[0]

View file

@ -1,55 +1,32 @@
"""Tests for Tradfri diagnostics.""" """Tests for Tradfri diagnostics."""
from unittest.mock import MagicMock, Mock, PropertyMock, patch from __future__ import annotations
import pytest from unittest.mock import MagicMock, Mock
from pytradfri.device.air_purifier import AirPurifier
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from .common import setup_integration from .common import setup_integration
from .test_sensor import mock_fan
from tests.components.diagnostics import get_diagnostics_for_config_entry from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator from tests.typing import ClientSessionGenerator
@pytest.fixture(autouse=True)
def setup(request):
"""Set up patches for pytradfri methods for the fan platform.
This is used in test_fan as well as in test_sensor.
"""
with patch(
"pytradfri.device.AirPurifierControl.raw",
new_callable=PropertyMock,
return_value=[{"mock": "mock"}],
), patch(
"pytradfri.device.AirPurifierControl.air_purifiers",
):
yield
async def test_diagnostics( async def test_diagnostics(
hass: HomeAssistant, hass: HomeAssistant,
hass_client: ClientSessionGenerator, hass_client: ClientSessionGenerator,
mock_gateway: Mock, mock_gateway: Mock,
mock_api_factory: MagicMock, mock_api_factory: MagicMock,
air_purifier: AirPurifier,
) -> None: ) -> None:
"""Test diagnostics for config entry.""" """Test diagnostics for config entry."""
mock_gateway.mock_devices.append( device = air_purifier.device
# Add a fan mock_gateway.mock_devices.append(device)
mock_fan( config_entry = await setup_integration(hass)
test_state={
"fan_speed": 10,
"air_quality": 42,
"filter_lifetime_remaining": 120,
}
)
)
init_integration = await setup_integration(hass) result = await get_diagnostics_for_config_entry(hass, hass_client, config_entry)
result = await get_diagnostics_for_config_entry(hass, hass_client, init_integration)
assert isinstance(result, dict) assert isinstance(result, dict)
assert result["gateway_version"] == "1.2.1234" assert result["gateway_version"] == "1.2.1234"
assert result["device_data"] == ["model"] assert result["device_data"] == ["STARKVIND Air purifier"]

View file

@ -1,7 +1,6 @@
"""Tradfri fan (recognised as air purifiers in the IKEA ecosystem) platform tests.""" """Tradfri fan (recognised as air purifiers in the IKEA ecosystem) platform tests."""
from __future__ import annotations from __future__ import annotations
import json
from typing import Any from typing import Any
from unittest.mock import MagicMock, Mock from unittest.mock import MagicMock, Mock
@ -12,7 +11,6 @@ from pytradfri.const import (
ATTR_REACHABLE_STATE, ATTR_REACHABLE_STATE,
ROOT_AIR_PURIFIER, ROOT_AIR_PURIFIER,
) )
from pytradfri.device import Device
from pytradfri.device.air_purifier import AirPurifier from pytradfri.device.air_purifier import AirPurifier
from homeassistant.components.fan import ( from homeassistant.components.fan import (
@ -26,7 +24,6 @@ from homeassistant.components.fan import (
SERVICE_TURN_OFF, SERVICE_TURN_OFF,
SERVICE_TURN_ON, SERVICE_TURN_ON,
) )
from homeassistant.components.tradfri.const import DOMAIN
from homeassistant.const import ( from homeassistant.const import (
ATTR_SUPPORTED_FEATURES, ATTR_SUPPORTED_FEATURES,
STATE_OFF, STATE_OFF,
@ -37,23 +34,6 @@ from homeassistant.core import HomeAssistant
from .common import setup_integration, trigger_observe_callback from .common import setup_integration, trigger_observe_callback
from tests.common import load_fixture
@pytest.fixture(scope="module")
def air_purifier_response() -> dict[str, Any]:
"""Return an air purifier response."""
return json.loads(load_fixture("air_purifier.json", DOMAIN))
@pytest.fixture
def air_purifier(air_purifier_response: dict[str, Any]) -> AirPurifier:
"""Return air purifier."""
device = Device(air_purifier_response)
air_purifier_control = device.air_purifier_control
assert air_purifier_control
return air_purifier_control.air_purifiers[0]
async def test_fan_available( async def test_fan_available(
hass: HomeAssistant, hass: HomeAssistant,