Add device registry snapshots to samsungtv tests (#144804)

* Add device registry snapshots to samsungtv tests

* Simplify

* Adjust

* Reduce
This commit is contained in:
epenet 2025-05-13 18:20:43 +02:00 committed by GitHub
parent e2dd897ac7
commit 26796f87cd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 147 additions and 28 deletions

View File

@ -5,8 +5,9 @@ from __future__ import annotations
from collections.abc import Mapping from collections.abc import Mapping
from typing import Any from typing import Any
from homeassistant.components.samsungtv.const import DOMAIN from homeassistant.components.samsungtv.const import DOMAIN, METHOD_LEGACY
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_METHOD
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -20,7 +21,11 @@ async def setup_samsungtv_entry(
domain=DOMAIN, domain=DOMAIN,
data=data, data=data,
entry_id="123456", entry_id="123456",
unique_id="be9554b9-c9fb-41f4-8920-22da015376a4", unique_id=(
None
if data[CONF_METHOD] == METHOD_LEGACY
else "be9554b9-c9fb-41f4-8920-22da015376a4"
),
) )
entry.add_to_hass(hass) entry.add_to_hass(hass)

View File

@ -1,4 +1,117 @@
# serializer version: 1 # serializer version: 1
# name: test_setup[encrypted]
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': None,
'connections': set({
tuple(
'mac',
'aa:bb:cc:dd:ee:ff',
),
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'samsungtv',
'be9554b9-c9fb-41f4-8920-22da015376a4',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': None,
'model': None,
'model_id': None,
'name': 'Mock Title',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
}),
])
# ---
# name: test_setup[legacy]
list([
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(
'samsungtv',
'123456',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': None,
'model': None,
'model_id': None,
'name': 'Mock Title',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
}),
])
# ---
# name: test_setup[websocket]
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': None,
'connections': set({
tuple(
'mac',
'aa:bb:cc:dd:ee:ff',
),
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'samsungtv',
'be9554b9-c9fb-41f4-8920-22da015376a4',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': None,
'model': None,
'model_id': 'UE43LS003',
'name': 'Mock Title',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
}),
])
# ---
# name: test_setup_updates_from_ssdp # name: test_setup_updates_from_ssdp
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({

View File

@ -1,43 +1,40 @@
"""Tests for the Samsung TV Integration.""" """Tests for the Samsung TV Integration."""
from typing import Any
from unittest.mock import AsyncMock, Mock, patch from unittest.mock import AsyncMock, Mock, patch
import pytest import pytest
from samsungtvws.async_remote import SamsungTVWSAsyncRemote from samsungtvws.async_remote import SamsungTVWSAsyncRemote
from syrupy.assertion import SnapshotAssertion from syrupy.assertion import SnapshotAssertion
from homeassistant.components.media_player import ( from homeassistant.components.media_player import DOMAIN as MP_DOMAIN
DOMAIN as MP_DOMAIN,
MediaPlayerEntityFeature,
)
from homeassistant.components.samsungtv.const import ( from homeassistant.components.samsungtv.const import (
CONF_SESSION_ID, CONF_SESSION_ID,
CONF_SSDP_MAIN_TV_AGENT_LOCATION, CONF_SSDP_MAIN_TV_AGENT_LOCATION,
CONF_SSDP_RENDERING_CONTROL_LOCATION, CONF_SSDP_RENDERING_CONTROL_LOCATION,
DOMAIN, DOMAIN,
METHOD_ENCRYPTED_WEBSOCKET,
METHOD_LEGACY,
METHOD_WEBSOCKET, METHOD_WEBSOCKET,
UPNP_SVC_MAIN_TV_AGENT, UPNP_SVC_MAIN_TV_AGENT,
UPNP_SVC_RENDERING_CONTROL, UPNP_SVC_RENDERING_CONTROL,
) )
from homeassistant.components.samsungtv.media_player import SUPPORT_SAMSUNGTV
from homeassistant.config_entries import ConfigEntryState from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import ( from homeassistant.const import (
ATTR_ENTITY_ID,
ATTR_SUPPORTED_FEATURES,
CONF_HOST, CONF_HOST,
CONF_MAC, CONF_MAC,
CONF_METHOD, CONF_METHOD,
CONF_NAME, CONF_NAME,
CONF_PORT, CONF_PORT,
CONF_TOKEN, CONF_TOKEN,
SERVICE_VOLUME_UP,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import device_registry as dr, entity_registry as er
from . import setup_samsungtv_entry from . import setup_samsungtv_entry
from .const import ( from .const import (
ENTRYDATA_ENCRYPTED_WEBSOCKET, ENTRYDATA_ENCRYPTED_WEBSOCKET,
ENTRYDATA_LEGACY,
ENTRYDATA_WEBSOCKET, ENTRYDATA_WEBSOCKET,
MOCK_SSDP_DATA_MAIN_TV_AGENT_ST, MOCK_SSDP_DATA_MAIN_TV_AGENT_ST,
MOCK_SSDP_DATA_RENDERING_CONTROL_ST, MOCK_SSDP_DATA_RENDERING_CONTROL_ST,
@ -54,26 +51,30 @@ MOCK_CONFIG = {
} }
@pytest.mark.parametrize(
"entry_data",
[ENTRYDATA_LEGACY, ENTRYDATA_ENCRYPTED_WEBSOCKET, ENTRYDATA_WEBSOCKET],
ids=[METHOD_LEGACY, METHOD_ENCRYPTED_WEBSOCKET, METHOD_WEBSOCKET],
)
@pytest.mark.usefixtures( @pytest.mark.usefixtures(
"remote_websocket", "remote_encrypted_websocket_failing", "rest_api" "remote_encrypted_websocket",
"remote_legacy",
"remote_websocket",
"rest_api_failing",
) )
async def test_setup(hass: HomeAssistant) -> None: async def test_setup(
"""Test Samsung TV integration is setup.""" hass: HomeAssistant,
await setup_samsungtv_entry(hass, MOCK_CONFIG) entry_data: dict[str, Any],
state = hass.states.get(ENTITY_ID) device_registry: dr.DeviceRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test Samsung TV integration loads and fill device registry."""
entry = await setup_samsungtv_entry(hass, entry_data)
# test name and turn_on assert entry.state is ConfigEntryState.LOADED
assert state
assert state.name == "Mock Title"
assert (
state.attributes[ATTR_SUPPORTED_FEATURES]
== SUPPORT_SAMSUNGTV | MediaPlayerEntityFeature.TURN_ON
)
# Ensure service is registered device_entries = dr.async_entries_for_config_entry(device_registry, entry.entry_id)
await hass.services.async_call( assert device_entries == snapshot
MP_DOMAIN, SERVICE_VOLUME_UP, {ATTR_ENTITY_ID: ENTITY_ID}, True
)
@pytest.mark.usefixtures("remote_websocket", "remote_encrypted_websocket_failing") @pytest.mark.usefixtures("remote_websocket", "remote_encrypted_websocket_failing")