Fix SamsungTVWS mocking in samsungtv tests (#66650)

Co-authored-by: epenet <epenet@users.noreply.github.com>
pull/66691/head
epenet 2022-02-16 21:13:11 +01:00 committed by GitHub
parent 41c43fe639
commit 14e48bac3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 30 deletions

View File

@ -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

View File

@ -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(

View File

@ -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()