From 26796f87cd4481f424c6afb3a4f27a6dba8bb6e6 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 13 May 2025 18:20:43 +0200 Subject: [PATCH] Add device registry snapshots to samsungtv tests (#144804) * Add device registry snapshots to samsungtv tests * Simplify * Adjust * Reduce --- tests/components/samsungtv/__init__.py | 9 +- .../samsungtv/snapshots/test_init.ambr | 113 ++++++++++++++++++ tests/components/samsungtv/test_init.py | 53 ++++---- 3 files changed, 147 insertions(+), 28 deletions(-) diff --git a/tests/components/samsungtv/__init__.py b/tests/components/samsungtv/__init__.py index 182ea850b52..54b23f45efe 100644 --- a/tests/components/samsungtv/__init__.py +++ b/tests/components/samsungtv/__init__.py @@ -5,8 +5,9 @@ from __future__ import annotations from collections.abc import Mapping 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.const import CONF_METHOD from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry @@ -20,7 +21,11 @@ async def setup_samsungtv_entry( domain=DOMAIN, data=data, 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) diff --git a/tests/components/samsungtv/snapshots/test_init.ambr b/tests/components/samsungtv/snapshots/test_init.ambr index 443484e38c7..96dfed3b1ce 100644 --- a/tests/components/samsungtv/snapshots/test_init.ambr +++ b/tests/components/samsungtv/snapshots/test_init.ambr @@ -1,4 +1,117 @@ # serializer version: 1 +# name: test_setup[encrypted] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + 'aa:bb:cc:dd:ee:ff', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + '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': , + 'serial_number': None, + 'suggested_area': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_setup[legacy] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + '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': , + 'serial_number': None, + 'suggested_area': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_setup[websocket] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + 'aa:bb:cc:dd:ee:ff', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + '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': , + 'serial_number': None, + 'suggested_area': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- # name: test_setup_updates_from_ssdp StateSnapshot({ 'attributes': ReadOnlyDict({ diff --git a/tests/components/samsungtv/test_init.py b/tests/components/samsungtv/test_init.py index e2e7f2323ed..abafb1854ba 100644 --- a/tests/components/samsungtv/test_init.py +++ b/tests/components/samsungtv/test_init.py @@ -1,43 +1,40 @@ """Tests for the Samsung TV Integration.""" +from typing import Any from unittest.mock import AsyncMock, Mock, patch import pytest from samsungtvws.async_remote import SamsungTVWSAsyncRemote from syrupy.assertion import SnapshotAssertion -from homeassistant.components.media_player import ( - DOMAIN as MP_DOMAIN, - MediaPlayerEntityFeature, -) +from homeassistant.components.media_player import DOMAIN as MP_DOMAIN from homeassistant.components.samsungtv.const import ( CONF_SESSION_ID, CONF_SSDP_MAIN_TV_AGENT_LOCATION, CONF_SSDP_RENDERING_CONTROL_LOCATION, DOMAIN, + METHOD_ENCRYPTED_WEBSOCKET, + METHOD_LEGACY, METHOD_WEBSOCKET, UPNP_SVC_MAIN_TV_AGENT, UPNP_SVC_RENDERING_CONTROL, ) -from homeassistant.components.samsungtv.media_player import SUPPORT_SAMSUNGTV from homeassistant.config_entries import ConfigEntryState from homeassistant.const import ( - ATTR_ENTITY_ID, - ATTR_SUPPORTED_FEATURES, CONF_HOST, CONF_MAC, CONF_METHOD, CONF_NAME, CONF_PORT, CONF_TOKEN, - SERVICE_VOLUME_UP, ) 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 .const import ( ENTRYDATA_ENCRYPTED_WEBSOCKET, + ENTRYDATA_LEGACY, ENTRYDATA_WEBSOCKET, MOCK_SSDP_DATA_MAIN_TV_AGENT_ST, MOCK_SSDP_DATA_RENDERING_CONTROL_ST, @@ -54,26 +51,30 @@ MOCK_CONFIG = { } -@pytest.mark.usefixtures( - "remote_websocket", "remote_encrypted_websocket_failing", "rest_api" +@pytest.mark.parametrize( + "entry_data", + [ENTRYDATA_LEGACY, ENTRYDATA_ENCRYPTED_WEBSOCKET, ENTRYDATA_WEBSOCKET], + ids=[METHOD_LEGACY, METHOD_ENCRYPTED_WEBSOCKET, METHOD_WEBSOCKET], ) -async def test_setup(hass: HomeAssistant) -> None: - """Test Samsung TV integration is setup.""" - await setup_samsungtv_entry(hass, MOCK_CONFIG) - state = hass.states.get(ENTITY_ID) +@pytest.mark.usefixtures( + "remote_encrypted_websocket", + "remote_legacy", + "remote_websocket", + "rest_api_failing", +) +async def test_setup( + hass: HomeAssistant, + entry_data: dict[str, Any], + 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 state - assert state.name == "Mock Title" - assert ( - state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_SAMSUNGTV | MediaPlayerEntityFeature.TURN_ON - ) + assert entry.state is ConfigEntryState.LOADED - # Ensure service is registered - await hass.services.async_call( - MP_DOMAIN, SERVICE_VOLUME_UP, {ATTR_ENTITY_ID: ENTITY_ID}, True - ) + device_entries = dr.async_entries_for_config_entry(device_registry, entry.entry_id) + assert device_entries == snapshot @pytest.mark.usefixtures("remote_websocket", "remote_encrypted_websocket_failing")