Add test for full device snapshot for Shelly Wall Display XL (#153305)

This commit is contained in:
Maciej Bieniek
2025-10-01 15:00:15 +02:00
committed by GitHub
parent 653b73c601
commit 7ae3340336
4 changed files with 1274 additions and 4 deletions
+16 -3
View File
@@ -1,6 +1,6 @@
"""Tests for the Shelly integration."""
from collections.abc import Mapping
from collections.abc import Mapping, Sequence
from copy import deepcopy
from datetime import timedelta
from typing import Any
@@ -10,6 +10,7 @@ from aioshelly.const import MODEL_25
from freezegun.api import FrozenDateTimeFactory
import pytest
from syrupy.assertion import SnapshotAssertion
from syrupy.filters import props
from homeassistant.components.shelly.const import (
CONF_GEN,
@@ -173,15 +174,27 @@ async def snapshot_device_entities(
config_entry_id: str,
) -> None:
"""Snapshot all device entities."""
def sort_event_types(data: Any, path: Sequence[tuple[str, Any]]) -> Any:
"""Sort the event_types list for event entity."""
if path and path[-1][0] == "event_types" and isinstance(data, list):
return sorted(data)
return data
entity_entries = er.async_entries_for_config_entry(entity_registry, config_entry_id)
assert entity_entries
for entity_entry in entity_entries:
assert entity_entry == snapshot(name=f"{entity_entry.entity_id}-entry")
assert entity_entry == snapshot(
name=f"{entity_entry.entity_id}-entry", exclude=props("event_types")
)
assert entity_entry.disabled_by is None, "Please enable all entities."
state = hass.states.get(entity_entry.entity_id)
assert state, f"State not found for {entity_entry.entity_id}"
assert state == snapshot(name=f"{entity_entry.entity_id}-state")
assert state == snapshot(
name=f"{entity_entry.entity_id}-state", matcher=sort_event_types
)
async def force_uptime_value(
@@ -0,0 +1,307 @@
{
"config": {
"ble": {
"enable": false,
"keep_running": true,
"rpc": {
"enable": true
},
"observer": {
"enable": false
}
},
"wifi": {
"sta": {
"enable": true,
"ssid": "Wifi-Network-Name",
"roam_interval": 900,
"is_open": false,
"ipv4mode": "dhcp",
"ip": "192.168.2.81",
"netmask": "255.255.255.0",
"gw": "192.168.2.1",
"nameserver": "192.168.2.1"
}
},
"switch:0": {
"in_mode": "detached",
"id": 0,
"auto_off": false,
"auto_on_delay": 0,
"initial_state": "off",
"name": null
},
"input:0": {
"type": "button",
"id": 0,
"invert": false,
"factory_reset": true,
"name": null
},
"input:1": {
"id": 1,
"type": "switch",
"invert": false,
"factory_reset": true,
"name": null
},
"input:2": {
"id": 2,
"type": "switch",
"invert": false,
"factory_reset": true,
"name": null
},
"input:3": {
"id": 3,
"type": "button",
"invert": false,
"factory_reset": true,
"name": null
},
"input:4": {
"id": 4,
"type": "button",
"invert": false,
"factory_reset": true,
"name": null
},
"temperature:0": {
"id": 0,
"report_thr_C": 1,
"offset_C": 0,
"name": null
},
"humidity:0": {
"id": 0,
"report_thr": 1,
"offset": 0,
"name": null
},
"illuminance:0": {
"id": 0,
"bright_thr": 200,
"dark_thr": 30,
"name": null
},
"ui": {
"lock_type": "none",
"disable_gestures_when_locked": false,
"use_F": false,
"screen_saver": {
"enable": false,
"timeout": 20,
"priority_element": "CLOCK"
},
"screen_off_when_idle": false,
"brightness": {
"auto": true,
"level": 70,
"auto_off": {
"enable": false,
"by_lux": false
}
},
"relay_state_overlay": {
"enable": true,
"always_visible": false
}
},
"sys": {
"cfg_rev": 50,
"device": {
"fw_id": "20250923-131544/2.4.4-5c68f1d6",
"mac": "AABBCCDDEEFF",
"discoverable": false,
"name": null
},
"location": {
"tz": "Europe/Brussels",
"lat": 99.8888,
"lon": 22.3333
},
"sntp": {
"server": "time.google.com"
},
"debug": {
"websocket": {
"enable": false
},
"mqtt": {
"enable": false
},
"logs": {
"Generic": true,
"Bluetooth": true,
"Cloud": true,
"Interface": true,
"Media": true,
"MQTT": true,
"Network": true,
"RPC": true,
"Thermostat": true,
"Screen": true,
"ShellySmartControl": true,
"Webhooks": true,
"WebSocket": true
}
},
"media_player_enabled": true
},
"cloud": {
"server": "shelly-105-eu.shelly.cloud:6022/jrpc",
"enable": true
},
"mqtt": {
"enable": false,
"client_id": "ShellyWallDisplay-AABBCCDDEEFF",
"topic_prefix": "ShellyWallDisplay-AABBCCDDEEFF"
},
"ws": {
"enable": false,
"ssl_ca": "ca.pem"
},
"media": {
"rev": 0
}
},
"shelly": {
"id": "ShellyWallDisplay-AABBCCDDEEFF",
"mac": "AABBCCDDEEFF",
"model": "SAWD-3A1XE10EU2",
"gen": 2,
"fw_id": "20250923-131544/2.4.4-5c68f1d6",
"ver": "2.4.4",
"app": "WallDisplayV2",
"auth_en": false,
"uptime": 930619,
"app_uptime": 61029,
"ram_size": 268435456,
"ram_free": 50023040,
"fs_size": 24480665600,
"fs_free": 24071430144,
"discoverable": false,
"cfg_rev": 50,
"schedule_rev": 0,
"webhook_rev": 22,
"platform": "vBlake.a21b392",
"serial": "ABCDFE5674",
"batch_id": "3d35b",
"batch_date": 250715,
"available_updates": {},
"restart_required": false,
"unixtime": 1759216204,
"relay_in_thermostat": false,
"sensor_in_thermostat": false,
"awaiting_auth_code": false,
"ch": ["switch:0"]
},
"status": {
"ble": {},
"cloud": {
"connected": true
},
"mqtt": {
"connected": false
},
"temperature:0": {
"id": 0,
"tC": -275.1499938964844,
"tF": -463.2,
"errors": ["Sensor driver missing from firmware"]
},
"humidity:0": {
"id": 0,
"rh": -2,
"errors": ["Sensor driver missing from firmware"]
},
"illuminance:0": {
"id": 0,
"lux": 120,
"illumination": "twilight"
},
"switch:0": {
"id": 0,
"output": true,
"source": "RPC Set"
},
"input:0": {
"id": 0,
"state": false
},
"input:1": {
"id": 1
},
"input:2": {
"id": 2,
"state": true
},
"input:3": {
"id": 3
},
"input:4": {
"id": 4
},
"sys": {
"id": "ShellyWallDisplay-AABBCCDDEEFF",
"mac": "AABBCCDDEEFF",
"model": "SAWD-3A1XE10EU2",
"gen": 2,
"fw_id": "20250923-131544/2.4.4-5c68f1d6",
"ver": "2.4.4",
"app": "WallDisplayV2",
"auth_en": false,
"uptime": 930619,
"app_uptime": 61029,
"ram_size": 268435456,
"ram_free": 50023040,
"fs_size": 24480665600,
"fs_free": 24071430144,
"discoverable": false,
"cfg_rev": 50,
"schedule_rev": 0,
"webhook_rev": 22,
"platform": "vBlake.a21b392",
"serial": "SAWD9570149AV",
"batch_id": "3d35b",
"batch_date": 250715,
"available_updates": {},
"restart_required": false,
"unixtime": 1759216205,
"relay_in_thermostat": false,
"sensor_in_thermostat": false,
"awaiting_auth_code": false,
"ch": ["switch:0"]
},
"wifi": {
"sta_ip": "192.168.2.81",
"status": "got ip",
"mac": "00:A9:0B:70:14:9A",
"ssid": "Wifi-Network-Name",
"rssi": -48,
"netmask": "255.255.255.0",
"gw": "192.168.2.1",
"nameserver": "192.168.2.1"
},
"media": {
"playback": {
"enable": false,
"buffering": false,
"volume": 7
},
"total_size": 3885854,
"total_size_h": "3.706 MB",
"item_counts": {
"audio": 0,
"photo": 0,
"video": 0
}
},
"devicepower:0": {
"id": 0,
"external": {
"present": true
}
}
}
}
@@ -5043,3 +5043,922 @@
'state': 'off',
})
# ---
# name: test_wall_display_xl[binary_sensor.test_name_cloud-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'binary_sensor.test_name_cloud',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.CONNECTIVITY: 'connectivity'>,
'original_icon': None,
'original_name': 'Cloud',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-cloud-cloud',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[binary_sensor.test_name_cloud-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'Test name Cloud',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.test_name_cloud',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_wall_display_xl[binary_sensor.test_name_external_power-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'binary_sensor.test_name_external_power',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.POWER: 'power'>,
'original_icon': None,
'original_name': 'External power',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-devicepower:0-external_power',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[binary_sensor.test_name_external_power-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'power',
'friendly_name': 'Test name External power',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.test_name_external_power',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_wall_display_xl[binary_sensor.test_name_input_2-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.test_name_input_2',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.POWER: 'power'>,
'original_icon': None,
'original_name': 'Input 2',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-input:2-input',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[binary_sensor.test_name_input_2-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'power',
'friendly_name': 'Test name Input 2',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.test_name_input_2',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_wall_display_xl[binary_sensor.test_name_restart_required-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'binary_sensor.test_name_restart_required',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.PROBLEM: 'problem'>,
'original_icon': None,
'original_name': 'Restart required',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-sys-restart',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[binary_sensor.test_name_restart_required-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'problem',
'friendly_name': 'Test name Restart required',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.test_name_restart_required',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_wall_display_xl[button.test_name_reboot-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'button.test_name_reboot',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <ButtonDeviceClass.RESTART: 'restart'>,
'original_icon': None,
'original_name': 'Reboot',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-reboot',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[button.test_name_reboot-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'restart',
'friendly_name': 'Test name Reboot',
}),
'context': <ANY>,
'entity_id': 'button.test_name_reboot',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_wall_display_xl[event.test_name_input_0-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'event',
'entity_category': None,
'entity_id': 'event.test_name_input_0',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <EventDeviceClass.BUTTON: 'button'>,
'original_icon': None,
'original_name': 'Input 0',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'input',
'unique_id': '123456789ABC-input:0',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[event.test_name_input_0-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'button',
'event_type': None,
'event_types': list([
'btn_down',
'btn_up',
'double_push',
'long_push',
'single_push',
'triple_push',
]),
'friendly_name': 'Test name Input 0',
}),
'context': <ANY>,
'entity_id': 'event.test_name_input_0',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_wall_display_xl[event.test_name_input_3-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'event',
'entity_category': None,
'entity_id': 'event.test_name_input_3',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <EventDeviceClass.BUTTON: 'button'>,
'original_icon': None,
'original_name': 'Input 3',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'input',
'unique_id': '123456789ABC-input:3',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[event.test_name_input_3-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'button',
'event_type': None,
'event_types': list([
'btn_down',
'btn_up',
'double_push',
'long_push',
'single_push',
'triple_push',
]),
'friendly_name': 'Test name Input 3',
}),
'context': <ANY>,
'entity_id': 'event.test_name_input_3',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_wall_display_xl[event.test_name_input_4-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'event',
'entity_category': None,
'entity_id': 'event.test_name_input_4',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <EventDeviceClass.BUTTON: 'button'>,
'original_icon': None,
'original_name': 'Input 4',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'input',
'unique_id': '123456789ABC-input:4',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[event.test_name_input_4-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'button',
'event_type': None,
'event_types': list([
'btn_down',
'btn_up',
'double_push',
'long_push',
'single_push',
'triple_push',
]),
'friendly_name': 'Test name Input 4',
}),
'context': <ANY>,
'entity_id': 'event.test_name_input_4',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_wall_display_xl[sensor.test_name_humidity-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.test_name_humidity',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
}),
'original_device_class': <SensorDeviceClass.HUMIDITY: 'humidity'>,
'original_icon': None,
'original_name': 'Humidity',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-humidity:0-humidity_0',
'unit_of_measurement': '%',
})
# ---
# name: test_wall_display_xl[sensor.test_name_humidity-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'humidity',
'friendly_name': 'Test name Humidity',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.test_name_humidity',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '-2',
})
# ---
# name: test_wall_display_xl[sensor.test_name_illuminance-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.test_name_illuminance',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ILLUMINANCE: 'illuminance'>,
'original_icon': None,
'original_name': 'Illuminance',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-illuminance:0-illuminance',
'unit_of_measurement': 'lx',
})
# ---
# name: test_wall_display_xl[sensor.test_name_illuminance-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'illuminance',
'friendly_name': 'Test name Illuminance',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': 'lx',
}),
'context': <ANY>,
'entity_id': 'sensor.test_name_illuminance',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '120',
})
# ---
# name: test_wall_display_xl[sensor.test_name_illuminance_level-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'dark',
'twilight',
'bright',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.test_name_illuminance_level',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Illuminance level',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'illuminance_level',
'unique_id': '123456789ABC-illuminance:0-illuminance_illumination',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[sensor.test_name_illuminance_level-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Test name Illuminance level',
'options': list([
'dark',
'twilight',
'bright',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.test_name_illuminance_level',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'twilight',
})
# ---
# name: test_wall_display_xl[sensor.test_name_rssi-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.test_name_rssi',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.SIGNAL_STRENGTH: 'signal_strength'>,
'original_icon': None,
'original_name': 'RSSI',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-wifi-rssi',
'unit_of_measurement': 'dBm',
})
# ---
# name: test_wall_display_xl[sensor.test_name_rssi-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'signal_strength',
'friendly_name': 'Test name RSSI',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': 'dBm',
}),
'context': <ANY>,
'entity_id': 'sensor.test_name_rssi',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '-48',
})
# ---
# name: test_wall_display_xl[sensor.test_name_temperature-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.test_name_temperature',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'original_icon': None,
'original_name': 'Temperature',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-temperature:0-temperature_0',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# name: test_wall_display_xl[sensor.test_name_temperature-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'temperature',
'friendly_name': 'Test name Temperature',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_name_temperature',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '-275.149993896484',
})
# ---
# name: test_wall_display_xl[sensor.test_name_uptime-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.test_name_uptime',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'original_icon': None,
'original_name': 'Uptime',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-sys-uptime',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[sensor.test_name_uptime-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'timestamp',
'friendly_name': 'Test name Uptime',
}),
'context': <ANY>,
'entity_id': 'sensor.test_name_uptime',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2025-05-15T21:33:41+00:00',
})
# ---
# name: test_wall_display_xl[switch.test_name-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'switch',
'entity_category': None,
'entity_id': 'switch.test_name',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': None,
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '123456789ABC-switch:0',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[switch.test_name-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'Test name',
}),
'context': <ANY>,
'entity_id': 'switch.test_name',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_wall_display_xl[update.test_name_beta_firmware-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'update',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'update.test_name_beta_firmware',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <UpdateDeviceClass.FIRMWARE: 'firmware'>,
'original_icon': None,
'original_name': 'Beta firmware',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': <UpdateEntityFeature: 5>,
'translation_key': None,
'unique_id': '123456789ABC-sys-fwupdate_beta',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[update.test_name_beta_firmware-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'auto_update': False,
'device_class': 'firmware',
'display_precision': 0,
'entity_picture': 'https://brands.home-assistant.io/_/shelly/icon.png',
'friendly_name': 'Test name Beta firmware',
'in_progress': False,
'installed_version': '2.4.4',
'latest_version': '2.4.4',
'release_summary': None,
'release_url': 'https://shelly-api-docs.shelly.cloud/gen2/changelog/#unreleased',
'skipped_version': None,
'supported_features': <UpdateEntityFeature: 5>,
'title': None,
'update_percentage': None,
}),
'context': <ANY>,
'entity_id': 'update.test_name_beta_firmware',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_wall_display_xl[update.test_name_firmware-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'update',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'update.test_name_firmware',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <UpdateDeviceClass.FIRMWARE: 'firmware'>,
'original_icon': None,
'original_name': 'Firmware',
'platform': 'shelly',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': <UpdateEntityFeature: 5>,
'translation_key': None,
'unique_id': '123456789ABC-sys-fwupdate',
'unit_of_measurement': None,
})
# ---
# name: test_wall_display_xl[update.test_name_firmware-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'auto_update': False,
'device_class': 'firmware',
'display_precision': 0,
'entity_picture': 'https://brands.home-assistant.io/_/shelly/icon.png',
'friendly_name': 'Test name Firmware',
'in_progress': False,
'installed_version': '2.4.4',
'latest_version': '2.4.4',
'release_summary': None,
'release_url': 'https://shelly-api-docs.shelly.cloud/gen2/changelog/',
'skipped_version': None,
'supported_features': <UpdateEntityFeature: 5>,
'title': None,
'update_percentage': None,
}),
'context': <ANY>,
'entity_id': 'update.test_name_firmware',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
+32 -1
View File
@@ -2,7 +2,12 @@
from unittest.mock import Mock
from aioshelly.const import MODEL_2PM_G3, MODEL_BLU_GATEWAY_G3, MODEL_PRO_EM3
from aioshelly.const import (
MODEL_2PM_G3,
MODEL_BLU_GATEWAY_G3,
MODEL_PRO_EM3,
MODEL_WALL_DISPLAY_XL,
)
from freezegun.api import FrozenDateTimeFactory
import pytest
from syrupy.assertion import SnapshotAssertion
@@ -529,3 +534,29 @@ async def test_blu_trv_device_info(
assert device_entry.name == "TRV-Name"
assert device_entry.model_id == "SBTR-001AEU"
assert device_entry.sw_version == "v1.2.10"
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_wall_display_xl(
hass: HomeAssistant,
mock_rpc_device: Mock,
entity_registry: EntityRegistry,
snapshot: SnapshotAssertion,
monkeypatch: pytest.MonkeyPatch,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test Wall Display XL."""
device_fixture = await async_load_json_object_fixture(
hass, "wall_display_xl.json", DOMAIN
)
monkeypatch.setattr(mock_rpc_device, "shelly", device_fixture["shelly"])
monkeypatch.setattr(mock_rpc_device, "status", device_fixture["status"])
monkeypatch.setattr(mock_rpc_device, "config", device_fixture["config"])
await force_uptime_value(hass, freezer)
config_entry = await init_integration(hass, gen=2, model=MODEL_WALL_DISPLAY_XL)
await snapshot_device_entities(
hass, entity_registry, snapshot, config_entry.entry_id
)