Skip to content

Commit

Permalink
Refactor tradfri diagnostics tests (#88017)
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinHjelmare committed Feb 13, 2023
1 parent 8993a36 commit ab2ab15
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 53 deletions.
23 changes: 23 additions & 0 deletions tests/components/tradfri/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,20 @@
from __future__ import annotations

from collections.abc import Generator
import json
from typing import Any
from unittest.mock import MagicMock, Mock, patch

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 tests.common import load_fixture


@pytest.fixture
def mock_gateway_info():
Expand Down Expand Up @@ -79,3 +87,18 @@ def mock_api_factory(mock_api) -> Generator[MagicMock, None, None]:
factory.init.return_value = factory.return_value
factory.return_value.request = mock_api
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]
43 changes: 10 additions & 33 deletions tests/components/tradfri/test_diagnostics.py
Original file line number Diff line number Diff line change
@@ -1,55 +1,32 @@
"""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 .common import setup_integration
from .test_sensor import mock_fan

from tests.components.diagnostics import get_diagnostics_for_config_entry
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(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
mock_gateway: Mock,
mock_api_factory: MagicMock,
air_purifier: AirPurifier,
) -> None:
"""Test diagnostics for config entry."""
mock_gateway.mock_devices.append(
# Add a fan
mock_fan(
test_state={
"fan_speed": 10,
"air_quality": 42,
"filter_lifetime_remaining": 120,
}
)
)

init_integration = await setup_integration(hass)
device = air_purifier.device
mock_gateway.mock_devices.append(device)
config_entry = await setup_integration(hass)

result = await get_diagnostics_for_config_entry(hass, hass_client, init_integration)
result = await get_diagnostics_for_config_entry(hass, hass_client, config_entry)

assert isinstance(result, dict)
assert result["gateway_version"] == "1.2.1234"
assert result["device_data"] == ["model"]
assert result["device_data"] == ["STARKVIND Air purifier"]
20 changes: 0 additions & 20 deletions tests/components/tradfri/test_fan.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"""Tradfri fan (recognised as air purifiers in the IKEA ecosystem) platform tests."""
from __future__ import annotations

import json
from typing import Any
from unittest.mock import MagicMock, Mock

Expand All @@ -12,7 +11,6 @@
ATTR_REACHABLE_STATE,
ROOT_AIR_PURIFIER,
)
from pytradfri.device import Device
from pytradfri.device.air_purifier import AirPurifier

from homeassistant.components.fan import (
Expand All @@ -26,7 +24,6 @@
SERVICE_TURN_OFF,
SERVICE_TURN_ON,
)
from homeassistant.components.tradfri.const import DOMAIN
from homeassistant.const import (
ATTR_SUPPORTED_FEATURES,
STATE_OFF,
Expand All @@ -37,23 +34,6 @@

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(
hass: HomeAssistant,
Expand Down

0 comments on commit ab2ab15

Please sign in to comment.