diff --git a/tests/components/deconz/snapshots/test_select.ambr b/tests/components/deconz/snapshots/test_select.ambr new file mode 100644 index 00000000000..12966709947 --- /dev/null +++ b/tests/components/deconz/snapshots/test_select.ambr @@ -0,0 +1,508 @@ +# serializer version: 1 +# name: test_select[sensor_payload0-expected0][select.aqara_fp1_device_mode-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'leftright', + 'undirected', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_device_mode', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Device Mode', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-device_mode', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload0-expected0][select.aqara_fp1_device_mode-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Device Mode', + 'options': list([ + 'leftright', + 'undirected', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_device_mode', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'undirected', + }) +# --- +# name: test_select[sensor_payload0-expected0][select.aqara_fp1_sensitivity-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'High', + 'Medium', + 'Low', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_sensitivity', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Sensitivity', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-sensitivity', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload0-expected0][select.aqara_fp1_sensitivity-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Sensitivity', + 'options': list([ + 'High', + 'Medium', + 'Low', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_sensitivity', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'High', + }) +# --- +# name: test_select[sensor_payload0-expected0][select.aqara_fp1_trigger_distance-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'far', + 'medium', + 'near', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_trigger_distance', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Trigger Distance', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-trigger_distance', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload0-expected0][select.aqara_fp1_trigger_distance-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Trigger Distance', + 'options': list([ + 'far', + 'medium', + 'near', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_trigger_distance', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'medium', + }) +# --- +# name: test_select[sensor_payload1-expected1][select.aqara_fp1_device_mode-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'leftright', + 'undirected', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_device_mode', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Device Mode', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-device_mode', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload1-expected1][select.aqara_fp1_device_mode-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Device Mode', + 'options': list([ + 'leftright', + 'undirected', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_device_mode', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'undirected', + }) +# --- +# name: test_select[sensor_payload1-expected1][select.aqara_fp1_sensitivity-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'High', + 'Medium', + 'Low', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_sensitivity', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Sensitivity', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-sensitivity', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload1-expected1][select.aqara_fp1_sensitivity-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Sensitivity', + 'options': list([ + 'High', + 'Medium', + 'Low', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_sensitivity', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'High', + }) +# --- +# name: test_select[sensor_payload1-expected1][select.aqara_fp1_trigger_distance-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'far', + 'medium', + 'near', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_trigger_distance', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Trigger Distance', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-trigger_distance', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload1-expected1][select.aqara_fp1_trigger_distance-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Trigger Distance', + 'options': list([ + 'far', + 'medium', + 'near', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_trigger_distance', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'medium', + }) +# --- +# name: test_select[sensor_payload2-expected2][select.aqara_fp1_device_mode-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'leftright', + 'undirected', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_device_mode', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Device Mode', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-device_mode', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload2-expected2][select.aqara_fp1_device_mode-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Device Mode', + 'options': list([ + 'leftright', + 'undirected', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_device_mode', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'undirected', + }) +# --- +# name: test_select[sensor_payload2-expected2][select.aqara_fp1_sensitivity-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'High', + 'Medium', + 'Low', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_sensitivity', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Sensitivity', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-sensitivity', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload2-expected2][select.aqara_fp1_sensitivity-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Sensitivity', + 'options': list([ + 'High', + 'Medium', + 'Low', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_sensitivity', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'High', + }) +# --- +# name: test_select[sensor_payload2-expected2][select.aqara_fp1_trigger_distance-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'far', + 'medium', + 'near', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.aqara_fp1_trigger_distance', + 'has_entity_name': False, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Aqara FP1 Trigger Distance', + 'platform': 'deconz', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': 'xx:xx:xx:xx:xx:xx:xx:xx-01-0406-trigger_distance', + 'unit_of_measurement': None, + }) +# --- +# name: test_select[sensor_payload2-expected2][select.aqara_fp1_trigger_distance-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Aqara FP1 Trigger Distance', + 'options': list([ + 'far', + 'medium', + 'near', + ]), + }), + 'context': , + 'entity_id': 'select.aqara_fp1_trigger_distance', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'medium', + }) +# --- diff --git a/tests/components/deconz/test_select.py b/tests/components/deconz/test_select.py index 3864af65cd4..cee133f9999 100644 --- a/tests/components/deconz/test_select.py +++ b/tests/components/deconz/test_select.py @@ -2,23 +2,27 @@ from collections.abc import Callable from typing import Any +from unittest.mock import patch from pydeconz.models.sensor.presence import ( PresenceConfigDeviceMode, PresenceConfigTriggerDistance, ) import pytest +from syrupy import SnapshotAssertion from homeassistant.components.select import ( ATTR_OPTION, DOMAIN as SELECT_DOMAIN, SERVICE_SELECT_OPTION, ) -from homeassistant.config_entries import ConfigEntry -from homeassistant.const import ATTR_ENTITY_ID, STATE_UNAVAILABLE, EntityCategory +from homeassistant.const import ATTR_ENTITY_ID, STATE_UNAVAILABLE, Platform from homeassistant.core import HomeAssistant -from homeassistant.helpers import device_registry as dr, entity_registry as er +from homeassistant.helpers import entity_registry as er +from .conftest import ConfigEntryFactoryType + +from tests.common import snapshot_platform from tests.test_util.aiohttp import AiohttpClientMocker TEST_DATA = [ @@ -47,15 +51,7 @@ TEST_DATA = [ "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", }, { - "entity_count": 5, - "device_count": 3, "entity_id": "select.aqara_fp1_device_mode", - "unique_id": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406-device_mode", - "entity_category": EntityCategory.CONFIG, - "attributes": { - "friendly_name": "Aqara FP1 Device Mode", - "options": ["leftright", "undirected"], - }, "option": PresenceConfigDeviceMode.LEFT_AND_RIGHT.value, "request": "/sensors/0/config", "request_data": {"devicemode": "leftright"}, @@ -86,15 +82,7 @@ TEST_DATA = [ "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", }, { - "entity_count": 5, - "device_count": 3, "entity_id": "select.aqara_fp1_sensitivity", - "unique_id": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406-sensitivity", - "entity_category": EntityCategory.CONFIG, - "attributes": { - "friendly_name": "Aqara FP1 Sensitivity", - "options": ["High", "Medium", "Low"], - }, "option": "Medium", "request": "/sensors/0/config", "request_data": {"sensitivity": 2}, @@ -125,15 +113,7 @@ TEST_DATA = [ "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", }, { - "entity_count": 5, - "device_count": 3, "entity_id": "select.aqara_fp1_trigger_distance", - "unique_id": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406-trigger_distance", - "entity_category": EntityCategory.CONFIG, - "attributes": { - "friendly_name": "Aqara FP1 Trigger Distance", - "options": ["far", "medium", "near"], - }, "option": PresenceConfigTriggerDistance.FAR.value, "request": "/sensors/0/config", "request_data": {"triggerdistance": "far"}, @@ -145,36 +125,16 @@ TEST_DATA = [ @pytest.mark.parametrize(("sensor_payload", "expected"), TEST_DATA) async def test_select( hass: HomeAssistant, - device_registry: dr.DeviceRegistry, entity_registry: er.EntityRegistry, - config_entry_setup: ConfigEntry, + config_entry_factory: ConfigEntryFactoryType, mock_put_request: Callable[[str, str], AiohttpClientMocker], expected: dict[str, Any], + snapshot: SnapshotAssertion, ) -> None: """Test successful creation of button entities.""" - assert len(hass.states.async_all()) == expected["entity_count"] - - # Verify state data - - button = hass.states.get(expected["entity_id"]) - assert button.attributes == expected["attributes"] - - # Verify entity registry data - - ent_reg_entry = entity_registry.async_get(expected["entity_id"]) - assert ent_reg_entry.entity_category is expected["entity_category"] - assert ent_reg_entry.unique_id == expected["unique_id"] - - # Verify device registry data - - assert ( - len( - dr.async_entries_for_config_entry( - device_registry, config_entry_setup.entry_id - ) - ) - == expected["device_count"] - ) + with patch("homeassistant.components.deconz.PLATFORMS", [Platform.SELECT]): + config_entry = await config_entry_factory() + await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id) # Verify selecting option aioclient_mock = mock_put_request(expected["request"]) @@ -192,11 +152,11 @@ async def test_select( # Unload entry - await hass.config_entries.async_unload(config_entry_setup.entry_id) + await hass.config_entries.async_unload(config_entry.entry_id) assert hass.states.get(expected["entity_id"]).state == STATE_UNAVAILABLE # Remove entry - await hass.config_entries.async_remove(config_entry_setup.entry_id) + await hass.config_entries.async_remove(config_entry.entry_id) await hass.async_block_till_done() assert len(hass.states.async_all()) == 0