Skip to content

Commit 9a49595

Browse files
epenetabmantis
authored andcommitted
Fix missing port in samsungtv (home-assistant#147962)
Co-authored-by: Abílio Costa <[email protected]>
1 parent 41ab7b3 commit 9a49595

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

homeassistant/components/samsungtv/config_flow.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ def __init__(self) -> None:
124124
self._model: str | None = None
125125
self._connect_result: str | None = None
126126
self._method: str | None = None
127+
self._port: int | None = None
127128
self._name: str | None = None
128129
self._title: str = ""
129130
self._id: int | None = None
@@ -199,33 +200,37 @@ def _async_update_and_abort_for_matching_unique_id(self) -> None:
199200

200201
async def _async_create_bridge(self) -> None:
201202
"""Create the bridge."""
202-
result, method, _info = await self._async_get_device_info_and_method()
203+
result = await self._async_load_device_info()
203204
if result not in SUCCESSFUL_RESULTS:
204205
LOGGER.debug("No working config found for %s", self._host)
205206
raise AbortFlow(result)
206-
assert method is not None
207-
self._bridge = SamsungTVBridge.get_bridge(self.hass, method, self._host)
207+
assert self._method is not None
208+
self._bridge = SamsungTVBridge.get_bridge(
209+
self.hass, self._method, self._host, self._port
210+
)
208211

209-
async def _async_get_device_info_and_method(
212+
async def _async_load_device_info(
210213
self,
211-
) -> tuple[str, str | None, dict[str, Any] | None]:
214+
) -> str:
212215
"""Get device info and method only once."""
213216
if self._connect_result is None:
214-
result, _, method, info = await async_get_device_info(self.hass, self._host)
217+
result, port, method, info = await async_get_device_info(
218+
self.hass, self._host
219+
)
215220
self._connect_result = result
216221
self._method = method
222+
self._port = port
217223
self._device_info = info
218224
if not method:
219225
LOGGER.debug("Host:%s did not return device info", self._host)
220-
return result, None, None
221-
return self._connect_result, self._method, self._device_info
226+
return self._connect_result
222227

223228
async def _async_get_and_check_device_info(self) -> bool:
224229
"""Try to get the device info."""
225-
result, _method, info = await self._async_get_device_info_and_method()
230+
result = await self._async_load_device_info()
226231
if result not in SUCCESSFUL_RESULTS:
227232
raise AbortFlow(result)
228-
if not info:
233+
if not (info := self._device_info):
229234
return False
230235
dev_info = info.get("device", {})
231236
assert dev_info is not None

tests/components/samsungtv/test_config_flow.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ async def test_user_legacy(hass: HomeAssistant) -> None:
161161
assert result["data"][CONF_METHOD] == METHOD_LEGACY
162162
assert result["data"][CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
163163
assert result["data"][CONF_MODEL] is None
164+
assert result["data"][CONF_PORT] == 55000
164165
assert result["result"].unique_id is None
165166

166167

@@ -195,6 +196,7 @@ async def test_user_legacy_does_not_ok_first_time(hass: HomeAssistant) -> None:
195196
assert result3["data"][CONF_METHOD] == METHOD_LEGACY
196197
assert result3["data"][CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
197198
assert result3["data"][CONF_MODEL] is None
199+
assert result3["data"][CONF_PORT] == 55000
198200
assert result3["result"].unique_id is None
199201

200202

@@ -224,6 +226,7 @@ async def test_user_websocket(hass: HomeAssistant) -> None:
224226
assert result["data"][CONF_METHOD] == "websocket"
225227
assert result["data"][CONF_MANUFACTURER] == "Samsung"
226228
assert result["data"][CONF_MODEL] == "82GXARRS"
229+
assert result["data"][CONF_PORT] == 8002
227230
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
228231

229232

@@ -272,6 +275,7 @@ async def test_user_encrypted_websocket(
272275
assert result4["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
273276
assert result4["data"][CONF_MANUFACTURER] == "Samsung"
274277
assert result4["data"][CONF_MODEL] == "UE48JU6400"
278+
assert result4["data"][CONF_PORT] == 8000
275279
assert result4["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION] is None
276280
assert result4["data"][CONF_TOKEN] == "037739871315caef138547b03e348b72"
277281
assert result4["data"][CONF_SESSION_ID] == "1"
@@ -402,6 +406,7 @@ async def test_user_websocket_auth_retry(hass: HomeAssistant) -> None:
402406
assert result["data"][CONF_HOST] == "10.20.43.21"
403407
assert result["data"][CONF_MANUFACTURER] == "Samsung"
404408
assert result["data"][CONF_MODEL] == "82GXARRS"
409+
assert result["data"][CONF_PORT] == 8002
405410
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
406411

407412

@@ -464,6 +469,7 @@ async def test_ssdp(hass: HomeAssistant) -> None:
464469
assert result["data"][CONF_HOST] == "10.10.12.34"
465470
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
466471
assert result["data"][CONF_MODEL] == "UE55H6400"
472+
assert result["data"][CONF_PORT] == 55000
467473
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
468474

469475

@@ -522,6 +528,7 @@ async def test_ssdp_noprefix(hass: HomeAssistant) -> None:
522528
assert result["data"][CONF_HOST] == "10.10.12.34"
523529
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
524530
assert result["data"][CONF_MODEL] == "UE55H6400"
531+
assert result["data"][CONF_PORT] == 55000
525532
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
526533

527534

@@ -557,6 +564,7 @@ async def test_ssdp_legacy_missing_auth(hass: HomeAssistant) -> None:
557564
assert result["data"][CONF_HOST] == "10.10.12.34"
558565
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
559566
assert result["data"][CONF_MODEL] == "UE55H6400"
567+
assert result["data"][CONF_PORT] == 55000
560568
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
561569

562570

@@ -599,6 +607,7 @@ async def test_ssdp_websocket_success_populates_mac_address_and_ssdp_location(
599607
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
600608
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
601609
assert result["data"][CONF_MODEL] == "82GXARRS"
610+
assert result["data"][CONF_PORT] == 8002
602611
assert (
603612
result["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION]
604613
== "http://10.10.12.34:7676/smp_15_"
@@ -630,6 +639,7 @@ async def test_ssdp_websocket_success_populates_mac_address_and_main_tv_ssdp_loc
630639
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
631640
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
632641
assert result["data"][CONF_MODEL] == "82GXARRS"
642+
assert result["data"][CONF_PORT] == 8002
633643
assert (
634644
result["data"][CONF_SSDP_MAIN_TV_AGENT_LOCATION]
635645
== "http://10.10.12.34:7676/smp_2_"
@@ -681,6 +691,7 @@ async def test_ssdp_encrypted_websocket_success_populates_mac_address_and_ssdp_l
681691
assert result4["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
682692
assert result4["data"][CONF_MANUFACTURER] == "Samsung Electronics"
683693
assert result4["data"][CONF_MODEL] == "UE48JU6400"
694+
assert result4["data"][CONF_PORT] == 8000
684695
assert (
685696
result4["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION]
686697
== "http://10.10.12.34:7676/smp_15_"
@@ -887,6 +898,7 @@ async def test_dhcp_wireless(hass: HomeAssistant) -> None:
887898
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
888899
assert result["data"][CONF_MANUFACTURER] == "Samsung"
889900
assert result["data"][CONF_MODEL] == "UE48JU6400"
901+
assert result["data"][CONF_PORT] == 8002
890902
assert result["result"].unique_id == "223da676-497a-4e06-9507-5e27ec4f0fb3"
891903

892904

@@ -919,6 +931,7 @@ async def test_dhcp_wired(hass: HomeAssistant, rest_api: Mock) -> None:
919931
assert result["data"][CONF_MAC] == "aa:ee:tt:hh:ee:rr"
920932
assert result["data"][CONF_MANUFACTURER] == "Samsung"
921933
assert result["data"][CONF_MODEL] == "UE43LS003"
934+
assert result["data"][CONF_PORT] == 8002
922935
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
923936

924937

@@ -1020,6 +1033,7 @@ async def test_zeroconf(hass: HomeAssistant) -> None:
10201033
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
10211034
assert result["data"][CONF_MANUFACTURER] == "Samsung"
10221035
assert result["data"][CONF_MODEL] == "82GXARRS"
1036+
assert result["data"][CONF_PORT] == 8002
10231037
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
10241038

10251039

@@ -1129,6 +1143,7 @@ async def test_autodetect_websocket(hass: HomeAssistant) -> None:
11291143
assert result["type"] is FlowResultType.CREATE_ENTRY
11301144
assert result["data"][CONF_METHOD] == "websocket"
11311145
assert result["data"][CONF_TOKEN] == "123456789"
1146+
assert result["data"][CONF_PORT] == 8002
11321147
remote_websocket.assert_called_once_with(**AUTODETECT_WEBSOCKET_SSL)
11331148
rest_api_class.assert_called_once_with(**DEVICEINFO_WEBSOCKET_SSL)
11341149
await hass.async_block_till_done()
@@ -1180,6 +1195,7 @@ async def test_websocket_no_mac(hass: HomeAssistant, mac_address: Mock) -> None:
11801195
assert result["data"][CONF_METHOD] == "websocket"
11811196
assert result["data"][CONF_TOKEN] == "123456789"
11821197
assert result["data"][CONF_MAC] == "gg:ee:tt:mm:aa:cc"
1198+
assert result["data"][CONF_PORT] == 8002
11831199
remote_websocket.assert_called_once_with(**AUTODETECT_WEBSOCKET_SSL)
11841200
rest_api_class.assert_called_once_with(**DEVICEINFO_WEBSOCKET_SSL)
11851201
await hass.async_block_till_done()
@@ -2091,6 +2107,7 @@ async def test_ssdp_update_mac(hass: HomeAssistant) -> None:
20912107
assert entry.data[CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
20922108
assert entry.data[CONF_MODEL] == "fake_model"
20932109
assert entry.data[CONF_MAC] is None
2110+
assert entry.data[CONF_PORT] == 8002
20942111
assert entry.unique_id == "123"
20952112

20962113
device_info = deepcopy(MOCK_DEVICE_INFO)

0 commit comments

Comments
 (0)