Use snapshot in deCONZ select tests (#122541)

This commit is contained in:
Robert Svensson 2024-07-24 18:07:40 +02:00 committed by GitHub
parent 277883e756
commit 3c4f2c2dcf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 522 additions and 54 deletions

View File

@ -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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_device_mode',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_device_mode',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_sensitivity',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_sensitivity',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_trigger_distance',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_trigger_distance',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_device_mode',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_device_mode',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_sensitivity',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_sensitivity',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_trigger_distance',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_trigger_distance',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_device_mode',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_device_mode',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_sensitivity',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_sensitivity',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'select.aqara_fp1_trigger_distance',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'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': <ANY>,
'entity_id': 'select.aqara_fp1_trigger_distance',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'medium',
})
# ---

View File

@ -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