Fix flaky velbus test (#149743)

This commit is contained in:
Erik Montnemery 2025-08-01 07:49:51 +02:00 committed by GitHub
parent 61396d92a5
commit 4d59e8cd80
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 112 additions and 48 deletions

View File

@ -97,6 +97,7 @@ def mock_module_subdevices() -> AsyncMock:
"""Mock a velbus module.""" """Mock a velbus module."""
module = AsyncMock(spec=Module) module = AsyncMock(spec=Module)
module.get_type_name.return_value = "VMB2BLE" module.get_type_name.return_value = "VMB2BLE"
module.get_type.return_value = "123"
module.get_addresses.return_value = [88] module.get_addresses.return_value = [88]
module.get_name.return_value = "Kitchen" module.get_name.return_value = "Kitchen"
module.get_serial.return_value = "a1b2c3d4e5f6" module.get_serial.return_value = "a1b2c3d4e5f6"
@ -138,7 +139,7 @@ def mock_temperature() -> AsyncMock:
channel.get_module_sw_version.return_value = "3.0.0" channel.get_module_sw_version.return_value = "3.0.0"
channel.get_module_serial.return_value = "asdfghjk" channel.get_module_serial.return_value = "asdfghjk"
channel.get_module_type.return_value = 1 channel.get_module_type.return_value = 1
channel.is_sub_device.return_value = False channel.is_sub_device.return_value = True
channel.is_counter_channel.return_value = False channel.is_counter_channel.return_value = False
channel.get_class.return_value = "temperature" channel.get_class.return_value = "temperature"
channel.get_unit.return_value = "°C" channel.get_unit.return_value = "°C"
@ -184,7 +185,7 @@ def mock_select() -> AsyncMock:
channel.get_full_name.return_value = "Kitchen" channel.get_full_name.return_value = "Kitchen"
channel.get_module_sw_version.return_value = "1.1.1" channel.get_module_sw_version.return_value = "1.1.1"
channel.get_module_serial.return_value = "qwerty1234567" channel.get_module_serial.return_value = "qwerty1234567"
channel.is_sub_device.return_value = False channel.is_sub_device.return_value = True
channel.get_options.return_value = ["none", "summer", "winter", "holiday"] channel.get_options.return_value = ["none", "summer", "winter", "holiday"]
channel.get_selected_program.return_value = "winter" channel.get_selected_program.return_value = "winter"
return channel return channel

View File

@ -46,7 +46,38 @@
'identifiers': set({ 'identifiers': set({
tuple( tuple(
'velbus', 'velbus',
'88-9', '2',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Velleman',
'model': 'VMB7IN',
'model_id': '8',
'name': 'Input',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': 'a1b2c3d4e5f6',
'suggested_area': None,
'sw_version': '1.0.0',
'via_device_id': None,
}),
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'velbus',
'88',
), ),
}), }),
'is_new': False, 'is_new': False,
@ -54,13 +85,44 @@
}), }),
'manufacturer': 'Velleman', 'manufacturer': 'Velleman',
'model': 'VMB2BLE', 'model': 'VMB2BLE',
'model_id': '10', 'model_id': '123',
'name': 'Basement', 'name': 'Kitchen (VMB2BLE)',
'name_by_user': None, 'name_by_user': None,
'primary_config_entry': <ANY>, 'primary_config_entry': <ANY>,
'serial_number': '1234', 'serial_number': 'a1b2c3d4e5f6',
'suggested_area': None, 'suggested_area': None,
'sw_version': '1.0.1', 'sw_version': '2.0.0',
'via_device_id': None,
}),
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'velbus',
'88-10',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Velleman',
'model': 'VMBDN1',
'model_id': '9',
'name': 'Dimmer full name',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': 'a1b2c3d4e5f6g7',
'suggested_area': None,
'sw_version': '1.0.0',
'via_device_id': <ANY>, 'via_device_id': <ANY>,
}), }),
DeviceRegistryEntrySnapshot({ DeviceRegistryEntrySnapshot({
@ -94,37 +156,6 @@
'sw_version': '1.0.1', 'sw_version': '1.0.1',
'via_device_id': <ANY>, 'via_device_id': <ANY>,
}), }),
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'velbus',
'88-10',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Velleman',
'model': 'VMBDN1',
'model_id': '9',
'name': 'Dimmer full name',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': 'a1b2c3d4e5f6g7',
'suggested_area': None,
'sw_version': '1.0.0',
'via_device_id': <ANY>,
}),
DeviceRegistryEntrySnapshot({ DeviceRegistryEntrySnapshot({
'area_id': None, 'area_id': None,
'config_entries': <ANY>, 'config_entries': <ANY>,
@ -170,7 +201,7 @@
'identifiers': set({ 'identifiers': set({
tuple( tuple(
'velbus', 'velbus',
'88', '88-3',
), ),
}), }),
'is_new': False, 'is_new': False,
@ -185,7 +216,7 @@
'serial_number': 'asdfghjk', 'serial_number': 'asdfghjk',
'suggested_area': None, 'suggested_area': None,
'sw_version': '3.0.0', 'sw_version': '3.0.0',
'via_device_id': None, 'via_device_id': <ANY>,
}), }),
DeviceRegistryEntrySnapshot({ DeviceRegistryEntrySnapshot({
'area_id': None, 'area_id': None,
@ -201,22 +232,22 @@
'identifiers': set({ 'identifiers': set({
tuple( tuple(
'velbus', 'velbus',
'2', '88-33',
), ),
}), }),
'is_new': False, 'is_new': False,
'labels': set({ 'labels': set({
}), }),
'manufacturer': 'Velleman', 'manufacturer': 'Velleman',
'model': 'VMB7IN', 'model': 'VMB4RYNO',
'model_id': '8', 'model_id': '3',
'name': 'Input', 'name': 'Kitchen',
'name_by_user': None, 'name_by_user': None,
'primary_config_entry': <ANY>, 'primary_config_entry': <ANY>,
'serial_number': 'a1b2c3d4e5f6', 'serial_number': 'qwerty1234567',
'suggested_area': None, 'suggested_area': None,
'sw_version': '1.0.0', 'sw_version': '1.1.1',
'via_device_id': None, 'via_device_id': <ANY>,
}), }),
DeviceRegistryEntrySnapshot({ DeviceRegistryEntrySnapshot({
'area_id': None, 'area_id': None,
@ -249,5 +280,36 @@
'sw_version': '1.0.1', 'sw_version': '1.0.1',
'via_device_id': <ANY>, 'via_device_id': <ANY>,
}), }),
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'velbus',
'88-9',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Velleman',
'model': 'VMB2BLE',
'model_id': '10',
'name': 'Basement',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': '1234',
'suggested_area': None,
'sw_version': '1.0.1',
'via_device_id': <ANY>,
}),
]) ])
# --- # ---

View File

@ -176,7 +176,8 @@ async def test_device_registry(
device_entries = dr.async_entries_for_config_entry( device_entries = dr.async_entries_for_config_entry(
device_registry, config_entry.entry_id device_registry, config_entry.entry_id
) )
assert device_entries == snapshot # Sort by identifier to ensure consistent order in snapshot
assert sorted(device_entries, key=lambda x: list(x.identifiers)[0][1]) == snapshot
device_parent = device_registry.async_get_device(identifiers={(DOMAIN, "88")}) device_parent = device_registry.async_get_device(identifiers={(DOMAIN, "88")})
assert device_parent.via_device_id is None assert device_parent.via_device_id is None