From 14e48bac3a4b658f8b81f348428e0ed4b886ca9d Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Wed, 16 Feb 2022 21:13:11 +0100 Subject: [PATCH] Fix SamsungTVWS mocking in samsungtv tests (#66650) Co-authored-by: epenet --- tests/components/samsungtv/conftest.py | 24 +++++++++---------- .../components/samsungtv/test_config_flow.py | 17 +++++++------ .../components/samsungtv/test_media_player.py | 17 +++++++------ 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/tests/components/samsungtv/conftest.py b/tests/components/samsungtv/conftest.py index f14a0f71bf1..14f33524f52 100644 --- a/tests/components/samsungtv/conftest.py +++ b/tests/components/samsungtv/conftest.py @@ -2,6 +2,8 @@ from unittest.mock import Mock, patch import pytest +from samsungctl import Remote +from samsungtvws import SamsungTVWS import homeassistant.util.dt as dt_util @@ -20,10 +22,9 @@ def fake_host_fixture() -> None: def remote_fixture(): """Patch the samsungctl Remote.""" with patch("homeassistant.components.samsungtv.bridge.Remote") as remote_class: - remote = Mock() + remote = Mock(Remote) remote.__enter__ = Mock() remote.__exit__ = Mock() - remote.port.return_value = 55000 remote_class.return_value = remote yield remote @@ -34,10 +35,9 @@ def remotews_fixture(): with patch( "homeassistant.components.samsungtv.bridge.SamsungTVWS" ) as remotews_class: - remotews = Mock() - remotews.__enter__ = Mock() + remotews = Mock(SamsungTVWS) + remotews.__enter__ = Mock(return_value=remotews) remotews.__exit__ = Mock() - remotews.port.return_value = 8002 remotews.rest_device_info.return_value = { "id": "uuid:be9554b9-c9fb-41f4-8920-22da015376a4", "device": { @@ -48,8 +48,8 @@ def remotews_fixture(): "networkType": "wireless", }, } + remotews.token = "FAKE_TOKEN" remotews_class.return_value = remotews - remotews_class().__enter__().token = "FAKE_TOKEN" yield remotews @@ -59,12 +59,12 @@ def remotews_no_device_info_fixture(): with patch( "homeassistant.components.samsungtv.bridge.SamsungTVWS" ) as remotews_class: - remotews = Mock() - remotews.__enter__ = Mock() + remotews = Mock(SamsungTVWS) + remotews.__enter__ = Mock(return_value=remotews) remotews.__exit__ = Mock() remotews.rest_device_info.return_value = None + remotews.token = "FAKE_TOKEN" remotews_class.return_value = remotews - remotews_class().__enter__().token = "FAKE_TOKEN" yield remotews @@ -74,8 +74,8 @@ def remotews_soundbar_fixture(): with patch( "homeassistant.components.samsungtv.bridge.SamsungTVWS" ) as remotews_class: - remotews = Mock() - remotews.__enter__ = Mock() + remotews = Mock(SamsungTVWS) + remotews.__enter__ = Mock(return_value=remotews) remotews.__exit__ = Mock() remotews.rest_device_info.return_value = { "id": "uuid:be9554b9-c9fb-41f4-8920-22da015376a4", @@ -87,8 +87,8 @@ def remotews_soundbar_fixture(): "type": "Samsung SoundBar", }, } + remotews.token = "FAKE_TOKEN" remotews_class.return_value = remotews - remotews_class().__enter__().token = "FAKE_TOKEN" yield remotews diff --git a/tests/components/samsungtv/test_config_flow.py b/tests/components/samsungtv/test_config_flow.py index 57bb99354dc..a3e16ba81c3 100644 --- a/tests/components/samsungtv/test_config_flow.py +++ b/tests/components/samsungtv/test_config_flow.py @@ -1,8 +1,9 @@ """Tests for Samsung TV config flow.""" import socket -from unittest.mock import Mock, PropertyMock, call, patch +from unittest.mock import Mock, call, patch from samsungctl.exceptions import AccessDenied, UnhandledResponse +from samsungtvws import SamsungTVWS from samsungtvws.exceptions import ConnectionFailure, HttpApiError from websocket import WebSocketException, WebSocketProtocolException @@ -799,10 +800,8 @@ async def test_autodetect_websocket(hass: HomeAssistant): "homeassistant.components.samsungtv.bridge.Remote", side_effect=OSError("Boom"), ), patch("homeassistant.components.samsungtv.bridge.SamsungTVWS") as remotews: - enter = Mock() - type(enter).token = PropertyMock(return_value="123456789") - remote = Mock() - remote.__enter__ = Mock(return_value=enter) + remote = Mock(SamsungTVWS) + remote.__enter__ = Mock(return_value=remote) remote.__exit__ = Mock(return_value=False) remote.rest_device_info.return_value = { "id": "uuid:be9554b9-c9fb-41f4-8920-22da015376a4", @@ -816,6 +815,7 @@ async def test_autodetect_websocket(hass: HomeAssistant): "type": "Samsung SmartTV", }, } + remote.token = "123456789" remotews.return_value = remote result = await hass.config_entries.flow.async_init( @@ -846,10 +846,8 @@ async def test_websocket_no_mac(hass: HomeAssistant): ) as remotews, patch( "getmac.get_mac_address", return_value="gg:hh:ii:ll:mm:nn" ): - enter = Mock() - type(enter).token = PropertyMock(return_value="123456789") - remote = Mock() - remote.__enter__ = Mock(return_value=enter) + remote = Mock(SamsungTVWS) + remote.__enter__ = Mock(return_value=remote) remote.__exit__ = Mock(return_value=False) remote.rest_device_info.return_value = { "id": "uuid:be9554b9-c9fb-41f4-8920-22da015376a4", @@ -861,6 +859,7 @@ async def test_websocket_no_mac(hass: HomeAssistant): "type": "Samsung SmartTV", }, } + remote.token = "123456789" remotews.return_value = remote result = await hass.config_entries.flow.async_init( diff --git a/tests/components/samsungtv/test_media_player.py b/tests/components/samsungtv/test_media_player.py index 2d8c07c22cf..aab137a9a2c 100644 --- a/tests/components/samsungtv/test_media_player.py +++ b/tests/components/samsungtv/test_media_player.py @@ -2,10 +2,11 @@ import asyncio from datetime import timedelta import logging -from unittest.mock import DEFAULT as DEFAULT_MOCK, Mock, PropertyMock, call, patch +from unittest.mock import DEFAULT as DEFAULT_MOCK, Mock, call, patch import pytest from samsungctl import exceptions +from samsungtvws import SamsungTVWS from samsungtvws.exceptions import ConnectionFailure from websocket import WebSocketException @@ -151,10 +152,8 @@ async def test_setup_without_turnon(hass, remote): async def test_setup_websocket(hass, remotews): """Test setup of platform.""" with patch("homeassistant.components.samsungtv.bridge.SamsungTVWS") as remote_class: - enter = Mock() - type(enter).token = PropertyMock(return_value="987654321") - remote = Mock() - remote.__enter__ = Mock(return_value=enter) + remote = Mock(SamsungTVWS) + remote.__enter__ = Mock(return_value=remote) remote.__exit__ = Mock() remote.rest_device_info.return_value = { "id": "uuid:be9554b9-c9fb-41f4-8920-22da015376a4", @@ -166,6 +165,7 @@ async def test_setup_websocket(hass, remotews): "networkType": "wireless", }, } + remote.token = "987654321" remote_class.return_value = remote await setup_samsungtv(hass, MOCK_CONFIGWS) @@ -200,10 +200,8 @@ async def test_setup_websocket_2(hass, mock_now): assert entry is config_entries[0] with patch("homeassistant.components.samsungtv.bridge.SamsungTVWS") as remote_class: - enter = Mock() - type(enter).token = PropertyMock(return_value="987654321") - remote = Mock() - remote.__enter__ = Mock(return_value=enter) + remote = Mock(SamsungTVWS) + remote.__enter__ = Mock(return_value=remote) remote.__exit__ = Mock() remote.rest_device_info.return_value = { "id": "uuid:be9554b9-c9fb-41f4-8920-22da015376a4", @@ -215,6 +213,7 @@ async def test_setup_websocket_2(hass, mock_now): "networkType": "wireless", }, } + remote.token = "987654321" remote_class.return_value = remote assert await async_setup_component(hass, SAMSUNGTV_DOMAIN, {}) await hass.async_block_till_done()