Use non-autospec mock for Reolink's util and view tests (#148579)

This commit is contained in:
Abílio Costa 2025-07-11 15:27:06 +01:00 committed by GitHub
parent a34264f345
commit d393d5fdbb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 19 deletions

View File

@ -84,6 +84,8 @@ def _init_host_mock(host_mock: MagicMock) -> None:
host_mock.set_whiteled = AsyncMock()
host_mock.set_state_light = AsyncMock()
host_mock.renew = AsyncMock()
host_mock.get_vod_source = AsyncMock()
host_mock.expire_session = AsyncMock()
host_mock.is_nvr = True
host_mock.is_hub = False
host_mock.mac_address = TEST_MAC

View File

@ -103,12 +103,12 @@ DEV_ID_STANDALONE_CAM = f"{TEST_UID_CAM}"
async def test_try_function(
hass: HomeAssistant,
config_entry: MockConfigEntry,
reolink_connect: MagicMock,
reolink_host: MagicMock,
side_effect: ReolinkError,
expected: HomeAssistantError,
) -> None:
"""Test try_function error translations using number entity."""
reolink_connect.volume.return_value = 80
reolink_host.volume.return_value = 80
with patch("homeassistant.components.reolink.PLATFORMS", [Platform.NUMBER]):
assert await hass.config_entries.async_setup(config_entry.entry_id)
@ -117,7 +117,7 @@ async def test_try_function(
entity_id = f"{Platform.NUMBER}.{TEST_NVR_NAME}_volume"
reolink_connect.set_volume.side_effect = side_effect
reolink_host.set_volume.side_effect = side_effect
with pytest.raises(expected.__class__) as err:
await hass.services.async_call(
NUMBER_DOMAIN,
@ -128,8 +128,6 @@ async def test_try_function(
assert err.value.translation_key == expected.translation_key
reolink_connect.set_volume.reset_mock(side_effect=True)
@pytest.mark.parametrize(
("identifiers"),
@ -141,12 +139,12 @@ async def test_try_function(
async def test_get_device_uid_and_ch(
hass: HomeAssistant,
config_entry: MockConfigEntry,
reolink_connect: MagicMock,
reolink_host: MagicMock,
device_registry: dr.DeviceRegistry,
identifiers: set[tuple[str, str]],
) -> None:
"""Test get_device_uid_and_ch with multiple identifiers."""
reolink_connect.channels = [0]
reolink_host.channels = [0]
dev_entry = device_registry.async_get_or_create(
identifiers=identifiers,

View File

@ -64,14 +64,14 @@ def get_mock_session(
)
async def test_playback_proxy(
hass: HomeAssistant,
reolink_connect: MagicMock,
reolink_host: MagicMock,
config_entry: MockConfigEntry,
hass_client: ClientSessionGenerator,
caplog: pytest.LogCaptureFixture,
content_type: str,
) -> None:
"""Test successful playback proxy URL."""
reolink_connect.get_vod_source.return_value = (TEST_MIME_TYPE_MP4, TEST_URL)
reolink_host.get_vod_source.return_value = (TEST_MIME_TYPE_MP4, TEST_URL)
mock_session = get_mock_session(content_type=content_type)
@ -100,12 +100,12 @@ async def test_playback_proxy(
async def test_proxy_get_source_error(
hass: HomeAssistant,
reolink_connect: MagicMock,
reolink_host: MagicMock,
config_entry: MockConfigEntry,
hass_client: ClientSessionGenerator,
) -> None:
"""Test error while getting source for playback proxy URL."""
reolink_connect.get_vod_source.side_effect = ReolinkError(TEST_ERROR)
reolink_host.get_vod_source.side_effect = ReolinkError(TEST_ERROR)
assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
@ -123,12 +123,11 @@ async def test_proxy_get_source_error(
assert await response.content.read() == bytes(TEST_ERROR, "utf-8")
assert response.status == HTTPStatus.BAD_REQUEST
reolink_connect.get_vod_source.side_effect = None
async def test_proxy_invalid_config_entry_id(
hass: HomeAssistant,
reolink_connect: MagicMock,
reolink_host: MagicMock,
config_entry: MockConfigEntry,
hass_client: ClientSessionGenerator,
) -> None:
@ -156,12 +155,12 @@ async def test_proxy_invalid_config_entry_id(
async def test_playback_proxy_timeout(
hass: HomeAssistant,
reolink_connect: MagicMock,
reolink_host: MagicMock,
config_entry: MockConfigEntry,
hass_client: ClientSessionGenerator,
) -> None:
"""Test playback proxy URL with a timeout in the second chunk."""
reolink_connect.get_vod_source.return_value = (TEST_MIME_TYPE_MP4, TEST_URL)
reolink_host.get_vod_source.return_value = (TEST_MIME_TYPE_MP4, TEST_URL)
mock_session = get_mock_session([b"test", TimeoutError()], 4)
@ -190,13 +189,13 @@ async def test_playback_proxy_timeout(
@pytest.mark.parametrize(("content_type"), [("video/x-flv"), ("text/html")])
async def test_playback_wrong_content(
hass: HomeAssistant,
reolink_connect: MagicMock,
reolink_host: MagicMock,
config_entry: MockConfigEntry,
hass_client: ClientSessionGenerator,
content_type: str,
) -> None:
"""Test playback proxy URL with a wrong content type in the response."""
reolink_connect.get_vod_source.return_value = (TEST_MIME_TYPE_MP4, TEST_URL)
reolink_host.get_vod_source.return_value = (TEST_MIME_TYPE_MP4, TEST_URL)
mock_session = get_mock_session(content_type=content_type)
@ -223,12 +222,12 @@ async def test_playback_wrong_content(
async def test_playback_connect_error(
hass: HomeAssistant,
reolink_connect: MagicMock,
reolink_host: MagicMock,
config_entry: MockConfigEntry,
hass_client: ClientSessionGenerator,
) -> None:
"""Test playback proxy URL with a connection error."""
reolink_connect.get_vod_source.return_value = (TEST_MIME_TYPE_MP4, TEST_URL)
reolink_host.get_vod_source.return_value = (TEST_MIME_TYPE_MP4, TEST_URL)
mock_session = Mock()
mock_session.get = AsyncMock(side_effect=ClientConnectionError(TEST_ERROR))