1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-24 21:06:19 +00:00

Use snapshot_platform helper in SFR Box tests (#157481)

This commit is contained in:
epenet
2025-11-28 10:44:39 +01:00
committed by GitHub
parent 7f4b56104d
commit 3b52c5df79
9 changed files with 1096 additions and 1194 deletions

View File

@@ -38,9 +38,6 @@ rules:
status: todo
comment: |
- 93% on diagnostics / 92% on sensors, need to improve overall coverage
- It would be nice to use the snapshot helper as currently it would just throw everything in a list
- We also test the devices in each platform, kinda overkill
- We should use entity_registry_enabled_by_default instead to enable entities
integration-owner: done
docs-installation-parameters:
status: todo

View File

@@ -1,263 +1,197 @@
# serializer version: 1
# name: test_binary_sensors[adsl]
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': 'http://192.168.0.1',
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'sfr_box',
'e4:5d:51:00:11:22',
),
}),
'labels': set({
}),
'manufacturer': None,
'model': 'NB6VAC-FXC-r0',
'model_id': 'NB6VAC-FXC-r0',
'name': 'SFR Box',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
'via_device_id': None,
# name: test_binary_sensors[adsl][binary_sensor.sfr_box_dsl_status-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.sfr_box_dsl_status',
'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': 'DSL status',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'dsl_status',
'unique_id': 'e4:5d:51:00:11:22_dsl_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[adsl].1
list([
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.sfr_box_wan_status',
'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': 'WAN status',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'wan_status',
'unique_id': 'e4:5d:51:00:11:22_wan_status',
'unit_of_measurement': None,
# name: test_binary_sensors[adsl][binary_sensor.sfr_box_dsl_status-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'SFR Box DSL status',
}),
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.sfr_box_dsl_status',
'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': 'DSL status',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'dsl_status',
'unique_id': 'e4:5d:51:00:11:22_dsl_status',
'unit_of_measurement': None,
}),
])
'context': <ANY>,
'entity_id': 'binary_sensor.sfr_box_dsl_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_binary_sensors[adsl].2
list([
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'SFR Box WAN status',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.sfr_box_wan_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
# name: test_binary_sensors[adsl][binary_sensor.sfr_box_wan_status-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'SFR Box DSL status',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.sfr_box_dsl_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
'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.sfr_box_wan_status',
'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': 'WAN status',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'wan_status',
'unique_id': 'e4:5d:51:00:11:22_wan_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[ftth]
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': 'http://192.168.0.1',
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'sfr_box',
'e4:5d:51:00:11:22',
),
}),
'labels': set({
}),
'manufacturer': None,
'model': 'NB6VAC-FXC-r0',
'model_id': 'NB6VAC-FXC-r0',
'name': 'SFR Box',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
'via_device_id': None,
# name: test_binary_sensors[adsl][binary_sensor.sfr_box_wan_status-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'SFR Box WAN status',
}),
])
'context': <ANY>,
'entity_id': 'binary_sensor.sfr_box_wan_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_binary_sensors[ftth].1
list([
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.sfr_box_wan_status',
'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': 'WAN status',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'wan_status',
'unique_id': 'e4:5d:51:00:11:22_wan_status',
'unit_of_measurement': None,
# name: test_binary_sensors[ftth][binary_sensor.sfr_box_ftth_status-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
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.sfr_box_ftth_status',
'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': 'FTTH status',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'ftth_status',
'unique_id': 'e4:5d:51:00:11:22_ftth_status',
'unit_of_measurement': None,
'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.sfr_box_ftth_status',
'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': 'FTTH status',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'ftth_status',
'unique_id': 'e4:5d:51:00:11:22_ftth_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[ftth].2
list([
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'SFR Box WAN status',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.sfr_box_wan_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
# name: test_binary_sensors[ftth][binary_sensor.sfr_box_ftth_status-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'SFR Box FTTH status',
}),
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'SFR Box FTTH status',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.sfr_box_ftth_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
}),
])
'context': <ANY>,
'entity_id': 'binary_sensor.sfr_box_ftth_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_binary_sensors[ftth][binary_sensor.sfr_box_wan_status-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.sfr_box_wan_status',
'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': 'WAN status',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'wan_status',
'unique_id': 'e4:5d:51:00:11:22_wan_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[ftth][binary_sensor.sfr_box_wan_status-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'SFR Box WAN status',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.sfr_box_wan_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---

View File

@@ -1,87 +1,50 @@
# serializer version: 1
# name: test_buttons
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': 'http://192.168.0.1',
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'sfr_box',
'e4:5d:51:00:11:22',
),
}),
'labels': set({
}),
'manufacturer': None,
'model': 'NB6VAC-FXC-r0',
'model_id': 'NB6VAC-FXC-r0',
'name': 'SFR Box',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
'via_device_id': None,
# name: test_buttons[button.sfr_box_restart-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
])
# ---
# name: test_buttons.1
list([
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.sfr_box_restart',
'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': 'Restart',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'e4:5d:51:00:11:22_system_reboot',
'unit_of_measurement': None,
'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.sfr_box_restart',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
])
# ---
# name: test_buttons.2
list([
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'restart',
'friendly_name': 'SFR Box Restart',
}),
'context': <ANY>,
'entity_id': 'button.sfr_box_restart',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
'name': None,
'options': dict({
}),
])
'original_device_class': <ButtonDeviceClass.RESTART: 'restart'>,
'original_icon': None,
'original_name': 'Restart',
'platform': 'sfr_box',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'e4:5d:51:00:11:22_system_reboot',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[button.sfr_box_restart-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'restart',
'friendly_name': 'SFR Box Restart',
}),
'context': <ANY>,
'entity_id': 'button.sfr_box_restart',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---

View File

@@ -0,0 +1,5 @@
# serializer version: 1
# name: test_device_registry
list([
])
# ---

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,9 @@ from syrupy.assertion import SnapshotAssertion
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import 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 tests.common import snapshot_platform
pytestmark = pytest.mark.usefixtures(
"system_get_info", "dsl_get_info", "ftth_get_info", "wan_get_info"
@@ -28,7 +30,6 @@ def override_platforms() -> Generator[None]:
async def test_binary_sensors(
hass: HomeAssistant,
config_entry: ConfigEntry,
device_registry: dr.DeviceRegistry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
system_get_info: SystemInfo,
@@ -39,18 +40,4 @@ async def test_binary_sensors(
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
# Ensure devices are correctly registered
device_entries = dr.async_entries_for_config_entry(
device_registry, config_entry.entry_id
)
assert device_entries == snapshot
# Ensure entities are correctly registered
entity_entries = er.async_entries_for_config_entry(
entity_registry, config_entry.entry_id
)
assert entity_entries == snapshot
# Ensure entity states are correct
states = [hass.states.get(ent.entity_id) for ent in entity_entries]
assert states == snapshot
await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id)

View File

@@ -12,7 +12,9 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_ENTITY_ID, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers import entity_registry as er
from tests.common import snapshot_platform
pytestmark = pytest.mark.usefixtures("system_get_info", "dsl_get_info", "wan_get_info")
@@ -32,7 +34,6 @@ def override_platforms() -> Generator[None]:
async def test_buttons(
hass: HomeAssistant,
config_entry_with_auth: ConfigEntry,
device_registry: dr.DeviceRegistry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
@@ -40,21 +41,9 @@ async def test_buttons(
await hass.config_entries.async_setup(config_entry_with_auth.entry_id)
await hass.async_block_till_done()
# Ensure devices are correctly registered
device_entries = dr.async_entries_for_config_entry(
device_registry, config_entry_with_auth.entry_id
await snapshot_platform(
hass, entity_registry, snapshot, config_entry_with_auth.entry_id
)
assert device_entries == snapshot
# Ensure entities are correctly registered
entity_entries = er.async_entries_for_config_entry(
entity_registry, config_entry_with_auth.entry_id
)
assert entity_entries == snapshot
# Ensure entity states are correct
states = [hass.states.get(ent.entity_id) for ent in entity_entries]
assert states == snapshot
async def test_reboot(hass: HomeAssistant, config_entry_with_auth: ConfigEntry) -> None:

View File

@@ -5,10 +5,12 @@ from unittest.mock import patch
import pytest
from sfrbox_api.exceptions import SFRBoxAuthenticationError, SFRBoxError
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.sfr_box.const import DOMAIN
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
@pytest.fixture(autouse=True)
@@ -78,3 +80,21 @@ async def test_setup_entry_invalid_auth(
assert len(hass.config_entries.async_entries(DOMAIN)) == 1
assert config_entry_with_auth.state is ConfigEntryState.SETUP_ERROR
@patch("homeassistant.components.sfr_box.PLATFORMS", [])
async def test_device_registry(
hass: HomeAssistant,
config_entry: ConfigEntry,
device_registry: dr.DeviceRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Ensure devices are correctly registered."""
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
# Ensure devices are correctly registered
device_entries = dr.async_entries_for_config_entry(
device_registry, config_entry.entry_id
)
assert device_entries == snapshot

View File

@@ -9,7 +9,9 @@ from syrupy.assertion import SnapshotAssertion
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import 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 tests.common import snapshot_platform
pytestmark = pytest.mark.usefixtures("system_get_info", "dsl_get_info", "wan_get_info")
@@ -21,10 +23,10 @@ def override_platforms() -> Generator[None]:
yield
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_sensors(
hass: HomeAssistant,
config_entry: ConfigEntry,
device_registry: dr.DeviceRegistry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
@@ -32,24 +34,4 @@ async def test_sensors(
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
# Ensure devices are correctly registered
device_entries = dr.async_entries_for_config_entry(
device_registry, config_entry.entry_id
)
assert device_entries == snapshot
# Ensure entities are correctly registered
entity_entries = er.async_entries_for_config_entry(
entity_registry, config_entry.entry_id
)
assert entity_entries == snapshot
# Some entities are disabled, enable them and reload before checking states
for ent in entity_entries:
entity_registry.async_update_entity(ent.entity_id, disabled_by=None)
await hass.config_entries.async_reload(config_entry.entry_id)
await hass.async_block_till_done()
# Ensure entity states are correct
states = [hass.states.get(ent.entity_id) for ent in entity_entries]
assert states == snapshot
await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id)