Add test coverage for doorbird cameras (#122660)

This commit is contained in:
J. Nick Koston 2024-07-26 13:04:23 -05:00 committed by GitHub
parent d3d522c463
commit 8e578227c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 47 additions and 0 deletions

View File

@ -65,6 +65,7 @@ def get_mock_doorbird_api(
type(doorbirdapi_mock).energize_relay = AsyncMock(return_value=True)
type(doorbirdapi_mock).turn_light_on = AsyncMock(return_value=True)
type(doorbirdapi_mock).delete_favorite = AsyncMock(return_value=True)
type(doorbirdapi_mock).get_image = AsyncMock(return_value=b"image")
type(doorbirdapi_mock).doorbell_state = AsyncMock(
side_effect=mock_unauthorized_exception()
)

View File

@ -0,0 +1,46 @@
"""Test DoorBird cameras."""
from freezegun.api import FrozenDateTimeFactory
import pytest
from homeassistant.components.camera import (
STATE_IDLE,
async_get_image,
async_get_stream_source,
)
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from . import mock_not_found_exception
from .conftest import DoorbirdMockerType
async def test_doorbird_cameras(
hass: HomeAssistant,
doorbird_mocker: DoorbirdMockerType,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test the doorbird cameras."""
doorbird_entry = await doorbird_mocker()
live_camera_entity_id = "camera.mydoorbird_live"
assert hass.states.get(live_camera_entity_id).state == STATE_IDLE
last_motion_camera_entity_id = "camera.mydoorbird_last_motion"
assert hass.states.get(last_motion_camera_entity_id).state == STATE_IDLE
last_ring_camera_entity_id = "camera.mydoorbird_last_ring"
assert hass.states.get(last_ring_camera_entity_id).state == STATE_IDLE
assert await async_get_stream_source(hass, live_camera_entity_id) is not None
api = doorbird_entry.api
api.get_image.side_effect = mock_not_found_exception()
with pytest.raises(HomeAssistantError):
await async_get_image(hass, live_camera_entity_id)
api.get_image.side_effect = TimeoutError()
with pytest.raises(HomeAssistantError):
await async_get_image(hass, live_camera_entity_id)
api.get_image.side_effect = None
assert (await async_get_image(hass, live_camera_entity_id)).content == b"image"
api.get_image.return_value = b"notyet"
# Ensure rate limit works
assert (await async_get_image(hass, live_camera_entity_id)).content == b"image"
freezer.tick(60)
assert (await async_get_image(hass, live_camera_entity_id)).content == b"notyet"