Improve type hints in hue tests (#121298)

This commit is contained in:
epenet 2024-07-05 14:40:23 +02:00 committed by GitHub
parent 7332bc5faf
commit b9cfd4e8ce
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 163 additions and 120 deletions

View File

@ -2,7 +2,7 @@
import asyncio import asyncio
from collections import deque from collections import deque
import json from collections.abc import Generator
import logging import logging
from typing import Any from typing import Any
from unittest.mock import AsyncMock, Mock, patch from unittest.mock import AsyncMock, Mock, patch
@ -16,21 +16,24 @@ from homeassistant.components import hue
from homeassistant.components.hue.v1 import sensor_base as hue_sensor_base from homeassistant.components.hue.v1 import sensor_base as hue_sensor_base
from homeassistant.components.hue.v2.device import async_setup_devices from homeassistant.components.hue.v2.device import async_setup_devices
from homeassistant.config_entries import ConfigEntryState from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util.json import JsonArrayType
from .const import FAKE_BRIDGE, FAKE_BRIDGE_DEVICE from .const import FAKE_BRIDGE, FAKE_BRIDGE_DEVICE
from tests.common import MockConfigEntry, load_fixture from tests.common import MockConfigEntry, load_json_array_fixture
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def no_request_delay(): def no_request_delay() -> Generator[None]:
"""Make the request refresh delay 0 for instant tests.""" """Make the request refresh delay 0 for instant tests."""
with patch("homeassistant.components.hue.const.REQUEST_REFRESH_DELAY", 0): with patch("homeassistant.components.hue.const.REQUEST_REFRESH_DELAY", 0):
yield yield
def create_mock_bridge(hass, api_version=1): def create_mock_bridge(hass: HomeAssistant, api_version: int = 1) -> Mock:
"""Create a mocked HueBridge instance.""" """Create a mocked HueBridge instance."""
bridge = Mock( bridge = Mock(
hass=hass, hass=hass,
@ -44,10 +47,10 @@ def create_mock_bridge(hass, api_version=1):
bridge.logger = logging.getLogger(__name__) bridge.logger = logging.getLogger(__name__)
if bridge.api_version == 2: if bridge.api_version == 2:
bridge.api = create_mock_api_v2(hass) bridge.api = create_mock_api_v2()
bridge.mock_requests = bridge.api.mock_requests bridge.mock_requests = bridge.api.mock_requests
else: else:
bridge.api = create_mock_api_v1(hass) bridge.api = create_mock_api_v1()
bridge.sensor_manager = hue_sensor_base.SensorManager(bridge) bridge.sensor_manager = hue_sensor_base.SensorManager(bridge)
bridge.mock_requests = bridge.api.mock_requests bridge.mock_requests = bridge.api.mock_requests
bridge.mock_light_responses = bridge.api.mock_light_responses bridge.mock_light_responses = bridge.api.mock_light_responses
@ -79,18 +82,18 @@ def create_mock_bridge(hass, api_version=1):
@pytest.fixture @pytest.fixture
def mock_api_v1(hass): def mock_api_v1() -> Mock:
"""Mock the Hue V1 api.""" """Mock the Hue V1 api."""
return create_mock_api_v1(hass) return create_mock_api_v1()
@pytest.fixture @pytest.fixture
def mock_api_v2(hass): def mock_api_v2() -> Mock:
"""Mock the Hue V2 api.""" """Mock the Hue V2 api."""
return create_mock_api_v2(hass) return create_mock_api_v2()
def create_mock_api_v1(hass): def create_mock_api_v1() -> Mock:
"""Create a mock V1 API.""" """Create a mock V1 API."""
api = Mock(spec=aiohue_v1.HueBridgeV1) api = Mock(spec=aiohue_v1.HueBridgeV1)
api.initialize = AsyncMock() api.initialize = AsyncMock()
@ -134,12 +137,12 @@ def create_mock_api_v1(hass):
@pytest.fixture(scope="package") @pytest.fixture(scope="package")
def v2_resources_test_data(): def v2_resources_test_data() -> JsonArrayType:
"""Load V2 resources mock data.""" """Load V2 resources mock data."""
return json.loads(load_fixture("hue/v2_resources.json")) return load_json_array_fixture("hue/v2_resources.json")
def create_mock_api_v2(hass): def create_mock_api_v2() -> Mock:
"""Create a mock V2 API.""" """Create a mock V2 API."""
api = Mock(spec=aiohue_v2.HueBridgeV2) api = Mock(spec=aiohue_v2.HueBridgeV2)
api.initialize = AsyncMock() api.initialize = AsyncMock()
@ -192,30 +195,32 @@ def create_mock_api_v2(hass):
@pytest.fixture @pytest.fixture
def mock_bridge_v1(hass): def mock_bridge_v1(hass: HomeAssistant) -> Mock:
"""Mock a Hue bridge with V1 api.""" """Mock a Hue bridge with V1 api."""
return create_mock_bridge(hass, api_version=1) return create_mock_bridge(hass, api_version=1)
@pytest.fixture @pytest.fixture
def mock_bridge_v2(hass): def mock_bridge_v2(hass: HomeAssistant) -> Mock:
"""Mock a Hue bridge with V2 api.""" """Mock a Hue bridge with V2 api."""
return create_mock_bridge(hass, api_version=2) return create_mock_bridge(hass, api_version=2)
@pytest.fixture @pytest.fixture
def mock_config_entry_v1(hass): def mock_config_entry_v1() -> MockConfigEntry:
"""Mock a config entry for a Hue V1 bridge.""" """Mock a config entry for a Hue V1 bridge."""
return create_config_entry(api_version=1) return create_config_entry(api_version=1)
@pytest.fixture @pytest.fixture
def mock_config_entry_v2(hass): def mock_config_entry_v2() -> MockConfigEntry:
"""Mock a config entry.""" """Mock a config entry."""
return create_config_entry(api_version=2) return create_config_entry(api_version=2)
def create_config_entry(api_version=1, host="mock-host"): def create_config_entry(
api_version: int = 1, host: str = "mock-host"
) -> MockConfigEntry:
"""Mock a config entry for a Hue bridge.""" """Mock a config entry for a Hue bridge."""
return MockConfigEntry( return MockConfigEntry(
domain=hue.DOMAIN, domain=hue.DOMAIN,
@ -224,7 +229,7 @@ def create_config_entry(api_version=1, host="mock-host"):
) )
async def setup_component(hass): async def setup_component(hass: HomeAssistant) -> None:
"""Mock setup Hue component.""" """Mock setup Hue component."""
with patch.object(hue, "async_setup_entry", return_value=True): with patch.object(hue, "async_setup_entry", return_value=True):
assert ( assert (
@ -237,7 +242,9 @@ async def setup_component(hass):
) )
async def setup_bridge(hass, mock_bridge, config_entry): async def setup_bridge(
hass: HomeAssistant, mock_bridge: Mock, config_entry: MockConfigEntry
) -> None:
"""Load the Hue integration with the provided bridge.""" """Load the Hue integration with the provided bridge."""
mock_bridge.config_entry = config_entry mock_bridge.config_entry = config_entry
with patch.object( with patch.object(
@ -249,11 +256,11 @@ async def setup_bridge(hass, mock_bridge, config_entry):
async def setup_platform( async def setup_platform(
hass, hass: HomeAssistant,
mock_bridge, mock_bridge: Mock,
platforms, platforms: list[Platform] | tuple[Platform] | Platform,
hostname=None, hostname: str | None = None,
): ) -> None:
"""Load the Hue integration with the provided bridge for given platform(s).""" """Load the Hue integration with the provided bridge for given platform(s)."""
if not isinstance(platforms, (list, tuple)): if not isinstance(platforms, (list, tuple)):
platforms = [platforms] platforms = [platforms]

View File

@ -1,13 +1,16 @@
"""Philips Hue binary_sensor platform tests for V2 bridge/api.""" """Philips Hue binary_sensor platform tests for V2 bridge/api."""
from unittest.mock import Mock
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.util.json import JsonArrayType
from .conftest import setup_platform from .conftest import setup_platform
from .const import FAKE_BINARY_SENSOR, FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY from .const import FAKE_BINARY_SENSOR, FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY
async def test_binary_sensors( async def test_binary_sensors(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test if all v2 binary_sensors get created with correct features.""" """Test if all v2 binary_sensors get created with correct features."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -78,7 +81,9 @@ async def test_binary_sensors(
assert sensor.attributes["device_class"] == "motion" assert sensor.attributes["device_class"] == "motion"
async def test_binary_sensor_add_update(hass: HomeAssistant, mock_bridge_v2) -> None: async def test_binary_sensor_add_update(
hass: HomeAssistant, mock_bridge_v2: Mock
) -> None:
"""Test if binary_sensor get added/updated from events.""" """Test if binary_sensor get added/updated from events."""
await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY]) await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY])
await setup_platform(hass, mock_bridge_v2, "binary_sensor") await setup_platform(hass, mock_bridge_v2, "binary_sensor")

View File

@ -1,7 +1,7 @@
"""Test Hue bridge.""" """Test Hue bridge."""
import asyncio import asyncio
from unittest.mock import patch from unittest.mock import Mock, patch
from aiohttp import client_exceptions from aiohttp import client_exceptions
from aiohue.errors import Unauthorized from aiohue.errors import Unauthorized
@ -21,7 +21,7 @@ from homeassistant.exceptions import ConfigEntryNotReady
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_bridge_setup_v1(hass: HomeAssistant, mock_api_v1) -> None: async def test_bridge_setup_v1(hass: HomeAssistant, mock_api_v1: Mock) -> None:
"""Test a successful setup for V1 bridge.""" """Test a successful setup for V1 bridge."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -45,7 +45,7 @@ async def test_bridge_setup_v1(hass: HomeAssistant, mock_api_v1) -> None:
assert forward_entries == {"light", "binary_sensor", "sensor"} assert forward_entries == {"light", "binary_sensor", "sensor"}
async def test_bridge_setup_v2(hass: HomeAssistant, mock_api_v2) -> None: async def test_bridge_setup_v2(hass: HomeAssistant, mock_api_v2: Mock) -> None:
"""Test a successful setup for V2 bridge.""" """Test a successful setup for V2 bridge."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -113,7 +113,9 @@ async def test_bridge_setup_timeout(hass: HomeAssistant) -> None:
await hue_bridge.async_initialize_bridge() await hue_bridge.async_initialize_bridge()
async def test_reset_unloads_entry_if_setup(hass: HomeAssistant, mock_api_v1) -> None: async def test_reset_unloads_entry_if_setup(
hass: HomeAssistant, mock_api_v1: Mock
) -> None:
"""Test calling reset while the entry has been setup.""" """Test calling reset while the entry has been setup."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -143,7 +145,7 @@ async def test_reset_unloads_entry_if_setup(hass: HomeAssistant, mock_api_v1) ->
assert len(hass.services.async_services()) == 0 assert len(hass.services.async_services()) == 0
async def test_handle_unauthorized(hass: HomeAssistant, mock_api_v1) -> None: async def test_handle_unauthorized(hass: HomeAssistant, mock_api_v1: Mock) -> None:
"""Test handling an unauthorized error on update.""" """Test handling an unauthorized error on update."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -1,5 +1,7 @@
"""The tests for Philips Hue device triggers for V1 bridge.""" """The tests for Philips Hue device triggers for V1 bridge."""
from unittest.mock import Mock
from pytest_unordered import unordered from pytest_unordered import unordered
from homeassistant.components import automation, hue from homeassistant.components import automation, hue
@ -20,7 +22,7 @@ REMOTES_RESPONSE = {"7": HUE_TAP_REMOTE_1, "8": HUE_DIMMER_REMOTE_1}
async def test_get_triggers( async def test_get_triggers(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
mock_bridge_v1, mock_bridge_v1: Mock,
device_registry: dr.DeviceRegistry, device_registry: dr.DeviceRegistry,
) -> None: ) -> None:
"""Test we get the expected triggers from a hue remote.""" """Test we get the expected triggers from a hue remote."""
@ -90,7 +92,7 @@ async def test_get_triggers(
async def test_if_fires_on_state_change( async def test_if_fires_on_state_change(
hass: HomeAssistant, hass: HomeAssistant,
mock_bridge_v1, mock_bridge_v1: Mock,
device_registry: dr.DeviceRegistry, device_registry: dr.DeviceRegistry,
service_calls: list[ServiceCall], service_calls: list[ServiceCall],
) -> None: ) -> None:

View File

@ -1,5 +1,7 @@
"""The tests for Philips Hue device triggers for V2 bridge.""" """The tests for Philips Hue device triggers for V2 bridge."""
from unittest.mock import Mock
from aiohue.v2.models.button import ButtonEvent from aiohue.v2.models.button import ButtonEvent
from pytest_unordered import unordered from pytest_unordered import unordered
@ -9,6 +11,7 @@ from homeassistant.components.hue.v2.device import async_setup_devices
from homeassistant.components.hue.v2.hue_event import async_setup_hue_events from homeassistant.components.hue.v2.hue_event import async_setup_hue_events
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.util.json import JsonArrayType
from .conftest import setup_platform from .conftest import setup_platform
@ -16,7 +19,7 @@ from tests.common import async_capture_events, async_get_device_automations
async def test_hue_event( async def test_hue_event(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test hue button events.""" """Test hue button events."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -48,8 +51,8 @@ async def test_hue_event(
async def test_get_triggers( async def test_get_triggers(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
device_registry: dr.DeviceRegistry, device_registry: dr.DeviceRegistry,
) -> None: ) -> None:
"""Test we get the expected triggers from a hue remote.""" """Test we get the expected triggers from a hue remote."""

View File

@ -1,5 +1,7 @@
"""Test Hue diagnostics.""" """Test Hue diagnostics."""
from unittest.mock import Mock
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from .conftest import setup_platform from .conftest import setup_platform
@ -9,7 +11,7 @@ from tests.typing import ClientSessionGenerator
async def test_diagnostics_v1( async def test_diagnostics_v1(
hass: HomeAssistant, hass_client: ClientSessionGenerator, mock_bridge_v1 hass: HomeAssistant, hass_client: ClientSessionGenerator, mock_bridge_v1: Mock
) -> None: ) -> None:
"""Test diagnostics v1.""" """Test diagnostics v1."""
await setup_platform(hass, mock_bridge_v1, []) await setup_platform(hass, mock_bridge_v1, [])
@ -19,7 +21,7 @@ async def test_diagnostics_v1(
async def test_diagnostics_v2( async def test_diagnostics_v2(
hass: HomeAssistant, hass_client: ClientSessionGenerator, mock_bridge_v2 hass: HomeAssistant, hass_client: ClientSessionGenerator, mock_bridge_v2: Mock
) -> None: ) -> None:
"""Test diagnostics v2.""" """Test diagnostics v2."""
mock_bridge_v2.api.get_diagnostics.return_value = {"hello": "world"} mock_bridge_v2.api.get_diagnostics.return_value = {"hello": "world"}

View File

@ -1,14 +1,17 @@
"""Philips Hue Event platform tests for V2 bridge/api.""" """Philips Hue Event platform tests for V2 bridge/api."""
from unittest.mock import Mock
from homeassistant.components.event import ATTR_EVENT_TYPE, ATTR_EVENT_TYPES from homeassistant.components.event import ATTR_EVENT_TYPE, ATTR_EVENT_TYPES
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.util.json import JsonArrayType
from .conftest import setup_platform from .conftest import setup_platform
from .const import FAKE_DEVICE, FAKE_ROTARY, FAKE_ZIGBEE_CONNECTIVITY from .const import FAKE_DEVICE, FAKE_ROTARY, FAKE_ZIGBEE_CONNECTIVITY
async def test_event( async def test_event(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test event entity for Hue integration.""" """Test event entity for Hue integration."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -63,7 +66,7 @@ async def test_event(
assert state.attributes[ATTR_EVENT_TYPE] == "long_release" assert state.attributes[ATTR_EVENT_TYPE] == "long_release"
async def test_sensor_add_update(hass: HomeAssistant, mock_bridge_v2) -> None: async def test_sensor_add_update(hass: HomeAssistant, mock_bridge_v2: Mock) -> None:
"""Test Event entity for newly added Relative Rotary resource.""" """Test Event entity for newly added Relative Rotary resource."""
await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY]) await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY])
await setup_platform(hass, mock_bridge_v2, "event") await setup_platform(hass, mock_bridge_v2, "event")

View File

@ -175,7 +175,7 @@ LIGHT_GAMUT = color.GamutType(
LIGHT_GAMUT_TYPE = "A" LIGHT_GAMUT_TYPE = "A"
async def setup_bridge(hass: HomeAssistant, mock_bridge_v1): async def setup_bridge(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Load the Hue light platform with the provided bridge.""" """Load the Hue light platform with the provided bridge."""
hass.config.components.add(hue.DOMAIN) hass.config.components.add(hue.DOMAIN)
config_entry = create_config_entry() config_entry = create_config_entry()
@ -192,7 +192,7 @@ async def setup_bridge(hass: HomeAssistant, mock_bridge_v1):
async def test_not_load_groups_if_old_bridge( async def test_not_load_groups_if_old_bridge(
hass: HomeAssistant, mock_bridge_v1 hass: HomeAssistant, mock_bridge_v1: Mock
) -> None: ) -> None:
"""Test that we don't try to load groups if bridge runs old software.""" """Test that we don't try to load groups if bridge runs old software."""
mock_bridge_v1.api.config.apiversion = "1.12.0" mock_bridge_v1.api.config.apiversion = "1.12.0"
@ -203,7 +203,7 @@ async def test_not_load_groups_if_old_bridge(
assert len(hass.states.async_all()) == 0 assert len(hass.states.async_all()) == 0
async def test_no_lights_or_groups(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_no_lights_or_groups(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test the update_lights function when no lights are found.""" """Test the update_lights function when no lights are found."""
mock_bridge_v1.mock_light_responses.append({}) mock_bridge_v1.mock_light_responses.append({})
mock_bridge_v1.mock_group_responses.append({}) mock_bridge_v1.mock_group_responses.append({})
@ -212,7 +212,7 @@ async def test_no_lights_or_groups(hass: HomeAssistant, mock_bridge_v1) -> None:
assert len(hass.states.async_all()) == 0 assert len(hass.states.async_all()) == 0
async def test_lights(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_lights(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test the update_lights function with some lights.""" """Test the update_lights function with some lights."""
mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE) mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE)
@ -232,7 +232,7 @@ async def test_lights(hass: HomeAssistant, mock_bridge_v1) -> None:
assert lamp_2.state == "off" assert lamp_2.state == "off"
async def test_lights_color_mode(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_lights_color_mode(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test that lights only report appropriate color mode.""" """Test that lights only report appropriate color mode."""
mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE) mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE)
mock_bridge_v1.mock_group_responses.append(GROUP_RESPONSE) mock_bridge_v1.mock_group_responses.append(GROUP_RESPONSE)
@ -278,7 +278,7 @@ async def test_lights_color_mode(hass: HomeAssistant, mock_bridge_v1) -> None:
async def test_groups( async def test_groups(
hass: HomeAssistant, entity_registry: er.EntityRegistry, mock_bridge_v1 hass: HomeAssistant, entity_registry: er.EntityRegistry, mock_bridge_v1: Mock
) -> None: ) -> None:
"""Test the update_lights function with some lights.""" """Test the update_lights function with some lights."""
mock_bridge_v1.mock_light_responses.append({}) mock_bridge_v1.mock_light_responses.append({})
@ -303,7 +303,7 @@ async def test_groups(
assert entity_registry.async_get("light.group_2").unique_id == "2" assert entity_registry.async_get("light.group_2").unique_id == "2"
async def test_new_group_discovered(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_new_group_discovered(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test if 2nd update has a new group.""" """Test if 2nd update has a new group."""
mock_bridge_v1.allow_groups = True mock_bridge_v1.allow_groups = True
mock_bridge_v1.mock_light_responses.append({}) mock_bridge_v1.mock_light_responses.append({})
@ -350,7 +350,7 @@ async def test_new_group_discovered(hass: HomeAssistant, mock_bridge_v1) -> None
assert new_group.attributes["color_temp"] == 250 assert new_group.attributes["color_temp"] == 250
async def test_new_light_discovered(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_new_light_discovered(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test if 2nd update has a new light.""" """Test if 2nd update has a new light."""
mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE) mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE)
@ -396,7 +396,7 @@ async def test_new_light_discovered(hass: HomeAssistant, mock_bridge_v1) -> None
assert light.state == "off" assert light.state == "off"
async def test_group_removed(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_group_removed(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test if 2nd update has removed group.""" """Test if 2nd update has removed group."""
mock_bridge_v1.allow_groups = True mock_bridge_v1.allow_groups = True
mock_bridge_v1.mock_light_responses.append({}) mock_bridge_v1.mock_light_responses.append({})
@ -427,7 +427,7 @@ async def test_group_removed(hass: HomeAssistant, mock_bridge_v1) -> None:
assert removed_group is None assert removed_group is None
async def test_light_removed(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_light_removed(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test if 2nd update has removed light.""" """Test if 2nd update has removed light."""
mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE) mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE)
@ -456,7 +456,7 @@ async def test_light_removed(hass: HomeAssistant, mock_bridge_v1) -> None:
assert removed_light is None assert removed_light is None
async def test_other_group_update(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_other_group_update(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test changing one group that will impact the state of other light.""" """Test changing one group that will impact the state of other light."""
mock_bridge_v1.allow_groups = True mock_bridge_v1.allow_groups = True
mock_bridge_v1.mock_light_responses.append({}) mock_bridge_v1.mock_light_responses.append({})
@ -509,7 +509,7 @@ async def test_other_group_update(hass: HomeAssistant, mock_bridge_v1) -> None:
assert group_2.state == "off" assert group_2.state == "off"
async def test_other_light_update(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_other_light_update(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test changing one light that will impact state of other light.""" """Test changing one light that will impact state of other light."""
mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE) mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE)
@ -562,7 +562,7 @@ async def test_other_light_update(hass: HomeAssistant, mock_bridge_v1) -> None:
assert lamp_2.attributes["brightness"] == 100 assert lamp_2.attributes["brightness"] == 100
async def test_update_timeout(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_update_timeout(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test bridge marked as not available if timeout error during update.""" """Test bridge marked as not available if timeout error during update."""
mock_bridge_v1.api.lights.update = Mock(side_effect=TimeoutError) mock_bridge_v1.api.lights.update = Mock(side_effect=TimeoutError)
mock_bridge_v1.api.groups.update = Mock(side_effect=TimeoutError) mock_bridge_v1.api.groups.update = Mock(side_effect=TimeoutError)
@ -571,7 +571,7 @@ async def test_update_timeout(hass: HomeAssistant, mock_bridge_v1) -> None:
assert len(hass.states.async_all()) == 0 assert len(hass.states.async_all()) == 0
async def test_update_unauthorized(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_update_unauthorized(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test bridge marked as not authorized if unauthorized during update.""" """Test bridge marked as not authorized if unauthorized during update."""
mock_bridge_v1.api.lights.update = Mock(side_effect=aiohue.Unauthorized) mock_bridge_v1.api.lights.update = Mock(side_effect=aiohue.Unauthorized)
await setup_bridge(hass, mock_bridge_v1) await setup_bridge(hass, mock_bridge_v1)
@ -580,7 +580,7 @@ async def test_update_unauthorized(hass: HomeAssistant, mock_bridge_v1) -> None:
assert len(mock_bridge_v1.handle_unauthorized_error.mock_calls) == 1 assert len(mock_bridge_v1.handle_unauthorized_error.mock_calls) == 1
async def test_light_turn_on_service(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_light_turn_on_service(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test calling the turn on service on a light.""" """Test calling the turn on service on a light."""
mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE) mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE)
@ -633,7 +633,9 @@ async def test_light_turn_on_service(hass: HomeAssistant, mock_bridge_v1) -> Non
} }
async def test_light_turn_off_service(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_light_turn_off_service(
hass: HomeAssistant, mock_bridge_v1: Mock
) -> None:
"""Test calling the turn on service on a light.""" """Test calling the turn on service on a light."""
mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE) mock_bridge_v1.mock_light_responses.append(LIGHT_RESPONSE)
@ -775,7 +777,7 @@ async def test_group_features(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
device_registry: dr.DeviceRegistry, device_registry: dr.DeviceRegistry,
mock_bridge_v1, mock_bridge_v1: Mock,
) -> None: ) -> None:
"""Test group features.""" """Test group features."""
color_temp_type = "Color temperature light" color_temp_type = "Color temperature light"

View File

@ -1,15 +1,18 @@
"""Philips Hue lights platform tests for V2 bridge/api.""" """Philips Hue lights platform tests for V2 bridge/api."""
from unittest.mock import Mock
from homeassistant.components.light import ColorMode from homeassistant.components.light import ColorMode
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
from homeassistant.util.json import JsonArrayType
from .conftest import setup_platform from .conftest import setup_platform
from .const import FAKE_DEVICE, FAKE_LIGHT, FAKE_ZIGBEE_CONNECTIVITY from .const import FAKE_DEVICE, FAKE_LIGHT, FAKE_ZIGBEE_CONNECTIVITY
async def test_lights( async def test_lights(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test if all v2 lights get created with correct features.""" """Test if all v2 lights get created with correct features."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -77,7 +80,7 @@ async def test_lights(
async def test_light_turn_on_service( async def test_light_turn_on_service(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test calling the turn on service on a light.""" """Test calling the turn on service on a light."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -229,7 +232,7 @@ async def test_light_turn_on_service(
async def test_light_turn_off_service( async def test_light_turn_off_service(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test calling the turn off service on a light.""" """Test calling the turn off service on a light."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -318,7 +321,7 @@ async def test_light_turn_off_service(
assert mock_bridge_v2.mock_requests[4]["json"]["identify"]["action"] == "identify" assert mock_bridge_v2.mock_requests[4]["json"]["identify"]["action"] == "identify"
async def test_light_added(hass: HomeAssistant, mock_bridge_v2) -> None: async def test_light_added(hass: HomeAssistant, mock_bridge_v2: Mock) -> None:
"""Test new light added to bridge.""" """Test new light added to bridge."""
await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY]) await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY])
@ -341,7 +344,7 @@ async def test_light_added(hass: HomeAssistant, mock_bridge_v2) -> None:
async def test_light_availability( async def test_light_availability(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test light availability property.""" """Test light availability property."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -375,8 +378,8 @@ async def test_light_availability(
async def test_grouped_lights( async def test_grouped_lights(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
) -> None: ) -> None:
"""Test if all v2 grouped lights get created with correct features.""" """Test if all v2 grouped lights get created with correct features."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)

View File

@ -1,10 +1,11 @@
"""Test Hue migration logic.""" """Test Hue migration logic."""
from unittest.mock import patch from unittest.mock import Mock, patch
from homeassistant.components import hue from homeassistant.components import hue
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.util.json import JsonArrayType
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -51,9 +52,9 @@ async def test_light_entity_migration(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
device_registry: dr.DeviceRegistry, device_registry: dr.DeviceRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
mock_config_entry_v2, mock_config_entry_v2: MockConfigEntry,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
) -> None: ) -> None:
"""Test if entity schema for lights migrates from v1 to v2.""" """Test if entity schema for lights migrates from v1 to v2."""
config_entry = mock_bridge_v2.config_entry = mock_config_entry_v2 config_entry = mock_bridge_v2.config_entry = mock_config_entry_v2
@ -98,9 +99,9 @@ async def test_sensor_entity_migration(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
device_registry: dr.DeviceRegistry, device_registry: dr.DeviceRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
mock_config_entry_v2, mock_config_entry_v2: MockConfigEntry,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
) -> None: ) -> None:
"""Test if entity schema for sensors migrates from v1 to v2.""" """Test if entity schema for sensors migrates from v1 to v2."""
config_entry = mock_bridge_v2.config_entry = mock_config_entry_v2 config_entry = mock_bridge_v2.config_entry = mock_config_entry_v2
@ -159,9 +160,9 @@ async def test_sensor_entity_migration(
async def test_group_entity_migration_with_v1_id( async def test_group_entity_migration_with_v1_id(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
mock_config_entry_v2, mock_config_entry_v2: MockConfigEntry,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
) -> None: ) -> None:
"""Test if entity schema for grouped_lights migrates from v1 to v2.""" """Test if entity schema for grouped_lights migrates from v1 to v2."""
config_entry = mock_bridge_v2.config_entry = mock_config_entry_v2 config_entry = mock_bridge_v2.config_entry = mock_config_entry_v2
@ -194,9 +195,9 @@ async def test_group_entity_migration_with_v1_id(
async def test_group_entity_migration_with_v2_group_id( async def test_group_entity_migration_with_v2_group_id(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
mock_config_entry_v2, mock_config_entry_v2: MockConfigEntry,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
) -> None: ) -> None:
"""Test if entity schema for grouped_lights migrates from v1 to v2.""" """Test if entity schema for grouped_lights migrates from v1 to v2."""
config_entry = mock_bridge_v2.config_entry = mock_config_entry_v2 config_entry = mock_bridge_v2.config_entry = mock_config_entry_v2

View File

@ -1,8 +1,11 @@
"""Philips Hue scene platform tests for V2 bridge/api.""" """Philips Hue scene platform tests for V2 bridge/api."""
from unittest.mock import Mock
from homeassistant.const import STATE_UNKNOWN from homeassistant.const import STATE_UNKNOWN
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
from homeassistant.util.json import JsonArrayType
from .conftest import setup_platform from .conftest import setup_platform
from .const import FAKE_SCENE from .const import FAKE_SCENE
@ -11,8 +14,8 @@ from .const import FAKE_SCENE
async def test_scene( async def test_scene(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
) -> None: ) -> None:
"""Test if (config) scenes get created.""" """Test if (config) scenes get created."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -72,7 +75,7 @@ async def test_scene(
async def test_scene_turn_on_service( async def test_scene_turn_on_service(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test calling the turn on service on a scene.""" """Test calling the turn on service on a scene."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -109,7 +112,7 @@ async def test_scene_turn_on_service(
async def test_scene_advanced_turn_on_service( async def test_scene_advanced_turn_on_service(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test calling the advanced turn on service on a scene.""" """Test calling the advanced turn on service on a scene."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -146,7 +149,7 @@ async def test_scene_advanced_turn_on_service(
async def test_scene_updates( async def test_scene_updates(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test scene events from bridge.""" """Test scene events from bridge."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)

View File

@ -282,7 +282,7 @@ SENSOR_RESPONSE = {
} }
async def test_no_sensors(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_no_sensors(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test the update_items function when no sensors are found.""" """Test the update_items function when no sensors are found."""
mock_bridge_v1.mock_sensor_responses.append({}) mock_bridge_v1.mock_sensor_responses.append({})
await setup_platform(hass, mock_bridge_v1, ["binary_sensor", "sensor"]) await setup_platform(hass, mock_bridge_v1, ["binary_sensor", "sensor"])
@ -291,7 +291,7 @@ async def test_no_sensors(hass: HomeAssistant, mock_bridge_v1) -> None:
async def test_sensors_with_multiple_bridges( async def test_sensors_with_multiple_bridges(
hass: HomeAssistant, mock_bridge_v1 hass: HomeAssistant, mock_bridge_v1: Mock
) -> None: ) -> None:
"""Test the update_items function with some sensors.""" """Test the update_items function with some sensors."""
mock_bridge_2 = create_mock_bridge(hass, api_version=1) mock_bridge_2 = create_mock_bridge(hass, api_version=1)
@ -315,7 +315,7 @@ async def test_sensors_with_multiple_bridges(
async def test_sensors( async def test_sensors(
hass: HomeAssistant, entity_registry: er.EntityRegistry, mock_bridge_v1 hass: HomeAssistant, entity_registry: er.EntityRegistry, mock_bridge_v1: Mock
) -> None: ) -> None:
"""Test the update_items function with some sensors.""" """Test the update_items function with some sensors."""
mock_bridge_v1.mock_sensor_responses.append(SENSOR_RESPONSE) mock_bridge_v1.mock_sensor_responses.append(SENSOR_RESPONSE)
@ -361,7 +361,7 @@ async def test_sensors(
) )
async def test_unsupported_sensors(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_unsupported_sensors(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test that unsupported sensors don't get added and don't fail.""" """Test that unsupported sensors don't get added and don't fail."""
response_with_unsupported = dict(SENSOR_RESPONSE) response_with_unsupported = dict(SENSOR_RESPONSE)
response_with_unsupported["7"] = UNSUPPORTED_SENSOR response_with_unsupported["7"] = UNSUPPORTED_SENSOR
@ -372,7 +372,7 @@ async def test_unsupported_sensors(hass: HomeAssistant, mock_bridge_v1) -> None:
assert len(hass.states.async_all()) == 7 assert len(hass.states.async_all()) == 7
async def test_new_sensor_discovered(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_new_sensor_discovered(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test if 2nd update has a new sensor.""" """Test if 2nd update has a new sensor."""
mock_bridge_v1.mock_sensor_responses.append(SENSOR_RESPONSE) mock_bridge_v1.mock_sensor_responses.append(SENSOR_RESPONSE)
@ -406,7 +406,7 @@ async def test_new_sensor_discovered(hass: HomeAssistant, mock_bridge_v1) -> Non
assert temperature.state == "17.75" assert temperature.state == "17.75"
async def test_sensor_removed(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_sensor_removed(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test if 2nd update has removed sensor.""" """Test if 2nd update has removed sensor."""
mock_bridge_v1.mock_sensor_responses.append(SENSOR_RESPONSE) mock_bridge_v1.mock_sensor_responses.append(SENSOR_RESPONSE)
@ -434,7 +434,7 @@ async def test_sensor_removed(hass: HomeAssistant, mock_bridge_v1) -> None:
assert removed_sensor is None assert removed_sensor is None
async def test_update_timeout(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_update_timeout(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test bridge marked as not available if timeout error during update.""" """Test bridge marked as not available if timeout error during update."""
mock_bridge_v1.api.sensors.update = Mock(side_effect=TimeoutError) mock_bridge_v1.api.sensors.update = Mock(side_effect=TimeoutError)
await setup_platform(hass, mock_bridge_v1, ["binary_sensor", "sensor"]) await setup_platform(hass, mock_bridge_v1, ["binary_sensor", "sensor"])
@ -442,7 +442,7 @@ async def test_update_timeout(hass: HomeAssistant, mock_bridge_v1) -> None:
assert len(hass.states.async_all()) == 0 assert len(hass.states.async_all()) == 0
async def test_update_unauthorized(hass: HomeAssistant, mock_bridge_v1) -> None: async def test_update_unauthorized(hass: HomeAssistant, mock_bridge_v1: Mock) -> None:
"""Test bridge marked as not authorized if unauthorized during update.""" """Test bridge marked as not authorized if unauthorized during update."""
mock_bridge_v1.api.sensors.update = Mock(side_effect=aiohue.Unauthorized) mock_bridge_v1.api.sensors.update = Mock(side_effect=aiohue.Unauthorized)
await setup_platform(hass, mock_bridge_v1, ["binary_sensor", "sensor"]) await setup_platform(hass, mock_bridge_v1, ["binary_sensor", "sensor"])
@ -454,7 +454,7 @@ async def test_update_unauthorized(hass: HomeAssistant, mock_bridge_v1) -> None:
async def test_hue_events( async def test_hue_events(
hass: HomeAssistant, hass: HomeAssistant,
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
mock_bridge_v1, mock_bridge_v1: Mock,
device_registry: dr.DeviceRegistry, device_registry: dr.DeviceRegistry,
) -> None: ) -> None:
"""Test that hue remotes fire events when pressed.""" """Test that hue remotes fire events when pressed."""

View File

@ -1,19 +1,24 @@
"""Philips Hue sensor platform tests for V2 bridge/api.""" """Philips Hue sensor platform tests for V2 bridge/api."""
from unittest.mock import Mock
from homeassistant.components import hue from homeassistant.components import hue
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util.json import JsonArrayType
from .conftest import setup_bridge, setup_platform from .conftest import setup_bridge, setup_platform
from .const import FAKE_DEVICE, FAKE_SENSOR, FAKE_ZIGBEE_CONNECTIVITY from .const import FAKE_DEVICE, FAKE_SENSOR, FAKE_ZIGBEE_CONNECTIVITY
from tests.common import MockConfigEntry
async def test_sensors( async def test_sensors(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
) -> None: ) -> None:
"""Test if all v2 sensors get created with correct features.""" """Test if all v2 sensors get created with correct features."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -65,9 +70,9 @@ async def test_sensors(
async def test_enable_sensor( async def test_enable_sensor(
hass: HomeAssistant, hass: HomeAssistant,
entity_registry: er.EntityRegistry, entity_registry: er.EntityRegistry,
mock_bridge_v2, mock_bridge_v2: Mock,
v2_resources_test_data, v2_resources_test_data: JsonArrayType,
mock_config_entry_v2, mock_config_entry_v2: MockConfigEntry,
) -> None: ) -> None:
"""Test enabling of the by default disabled zigbee_connectivity sensor.""" """Test enabling of the by default disabled zigbee_connectivity sensor."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -105,7 +110,7 @@ async def test_enable_sensor(
assert state.attributes["mac_address"] == "00:17:88:01:0b:aa:bb:99" assert state.attributes["mac_address"] == "00:17:88:01:0b:aa:bb:99"
async def test_sensor_add_update(hass: HomeAssistant, mock_bridge_v2) -> None: async def test_sensor_add_update(hass: HomeAssistant, mock_bridge_v2: Mock) -> None:
"""Test if sensors get added/updated from events.""" """Test if sensors get added/updated from events."""
await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY]) await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY])
await setup_platform(hass, mock_bridge_v2, "sensor") await setup_platform(hass, mock_bridge_v2, "sensor")

View File

@ -1,6 +1,6 @@
"""Test Hue services.""" """Test Hue services."""
from unittest.mock import patch from unittest.mock import Mock, patch
from homeassistant.components import hue from homeassistant.components import hue
from homeassistant.components.hue import bridge from homeassistant.components.hue import bridge
@ -48,7 +48,7 @@ SCENE_RESPONSE = {
} }
async def test_hue_activate_scene(hass: HomeAssistant, mock_api_v1) -> None: async def test_hue_activate_scene(hass: HomeAssistant, mock_api_v1: Mock) -> None:
"""Test successful hue_activate_scene.""" """Test successful hue_activate_scene."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=hue.DOMAIN, domain=hue.DOMAIN,
@ -83,7 +83,9 @@ async def test_hue_activate_scene(hass: HomeAssistant, mock_api_v1) -> None:
assert mock_api_v1.mock_requests[2]["path"] == "groups/group_1/action" assert mock_api_v1.mock_requests[2]["path"] == "groups/group_1/action"
async def test_hue_activate_scene_transition(hass: HomeAssistant, mock_api_v1) -> None: async def test_hue_activate_scene_transition(
hass: HomeAssistant, mock_api_v1: Mock
) -> None:
"""Test successful hue_activate_scene with transition.""" """Test successful hue_activate_scene with transition."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=hue.DOMAIN, domain=hue.DOMAIN,
@ -119,7 +121,7 @@ async def test_hue_activate_scene_transition(hass: HomeAssistant, mock_api_v1) -
async def test_hue_activate_scene_group_not_found( async def test_hue_activate_scene_group_not_found(
hass: HomeAssistant, mock_api_v1 hass: HomeAssistant, mock_api_v1: Mock
) -> None: ) -> None:
"""Test failed hue_activate_scene due to missing group.""" """Test failed hue_activate_scene due to missing group."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
@ -151,7 +153,7 @@ async def test_hue_activate_scene_group_not_found(
async def test_hue_activate_scene_scene_not_found( async def test_hue_activate_scene_scene_not_found(
hass: HomeAssistant, mock_api_v1 hass: HomeAssistant, mock_api_v1: Mock
) -> None: ) -> None:
"""Test failed hue_activate_scene due to missing scene.""" """Test failed hue_activate_scene due to missing scene."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
@ -184,10 +186,10 @@ async def test_hue_activate_scene_scene_not_found(
async def test_hue_multi_bridge_activate_scene_all_respond( async def test_hue_multi_bridge_activate_scene_all_respond(
hass: HomeAssistant, hass: HomeAssistant,
mock_bridge_v1, mock_bridge_v1: Mock,
mock_bridge_v2, mock_bridge_v2: Mock,
mock_config_entry_v1, mock_config_entry_v1: MockConfigEntry,
mock_config_entry_v2, mock_config_entry_v2: MockConfigEntry,
) -> None: ) -> None:
"""Test that makes multiple bridges successfully activate a scene.""" """Test that makes multiple bridges successfully activate a scene."""
await setup_component(hass) await setup_component(hass)
@ -218,10 +220,10 @@ async def test_hue_multi_bridge_activate_scene_all_respond(
async def test_hue_multi_bridge_activate_scene_one_responds( async def test_hue_multi_bridge_activate_scene_one_responds(
hass: HomeAssistant, hass: HomeAssistant,
mock_bridge_v1, mock_bridge_v1: Mock,
mock_bridge_v2, mock_bridge_v2: Mock,
mock_config_entry_v1, mock_config_entry_v1: MockConfigEntry,
mock_config_entry_v2, mock_config_entry_v2: MockConfigEntry,
) -> None: ) -> None:
"""Test that makes only one bridge successfully activate a scene.""" """Test that makes only one bridge successfully activate a scene."""
await setup_component(hass) await setup_component(hass)
@ -251,10 +253,10 @@ async def test_hue_multi_bridge_activate_scene_one_responds(
async def test_hue_multi_bridge_activate_scene_zero_responds( async def test_hue_multi_bridge_activate_scene_zero_responds(
hass: HomeAssistant, hass: HomeAssistant,
mock_bridge_v1, mock_bridge_v1: Mock,
mock_bridge_v2, mock_bridge_v2: Mock,
mock_config_entry_v1, mock_config_entry_v1: MockConfigEntry,
mock_config_entry_v2, mock_config_entry_v2: MockConfigEntry,
) -> None: ) -> None:
"""Test that makes no bridge successfully activate a scene.""" """Test that makes no bridge successfully activate a scene."""
await setup_component(hass) await setup_component(hass)

View File

@ -1,13 +1,16 @@
"""Philips Hue switch platform tests for V2 bridge/api.""" """Philips Hue switch platform tests for V2 bridge/api."""
from unittest.mock import Mock
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.util.json import JsonArrayType
from .conftest import setup_platform from .conftest import setup_platform
from .const import FAKE_BINARY_SENSOR, FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY from .const import FAKE_BINARY_SENSOR, FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY
async def test_switch( async def test_switch(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test if (config) switches get created.""" """Test if (config) switches get created."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -34,7 +37,7 @@ async def test_switch(
async def test_switch_turn_on_service( async def test_switch_turn_on_service(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test calling the turn on service on a switch.""" """Test calling the turn on service on a switch."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -58,7 +61,7 @@ async def test_switch_turn_on_service(
async def test_switch_turn_off_service( async def test_switch_turn_off_service(
hass: HomeAssistant, mock_bridge_v2, v2_resources_test_data hass: HomeAssistant, mock_bridge_v2: Mock, v2_resources_test_data: JsonArrayType
) -> None: ) -> None:
"""Test calling the turn off service on a switch.""" """Test calling the turn off service on a switch."""
await mock_bridge_v2.api.load_test_data(v2_resources_test_data) await mock_bridge_v2.api.load_test_data(v2_resources_test_data)
@ -98,7 +101,7 @@ async def test_switch_turn_off_service(
assert test_entity.state == "off" assert test_entity.state == "off"
async def test_switch_added(hass: HomeAssistant, mock_bridge_v2) -> None: async def test_switch_added(hass: HomeAssistant, mock_bridge_v2: Mock) -> None:
"""Test new switch added to bridge.""" """Test new switch added to bridge."""
await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY]) await mock_bridge_v2.api.load_test_data([FAKE_DEVICE, FAKE_ZIGBEE_CONNECTIVITY])