Add camera media source (#65977)
This commit is contained in:
parent
b216f6f448
commit
716a1e2a64
10 changed files with 432 additions and 109 deletions
72
tests/components/camera/test_media_source.py
Normal file
72
tests/components/camera/test_media_source.py
Normal file
|
@ -0,0 +1,72 @@
|
|||
"""Test camera media source."""
|
||||
from unittest.mock import PropertyMock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant.components import media_source
|
||||
from homeassistant.components.camera.const import STREAM_TYPE_WEB_RTC
|
||||
from homeassistant.components.stream.const import FORMAT_CONTENT_TYPE
|
||||
from homeassistant.setup import async_setup_component
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
async def setup_media_source(hass):
|
||||
"""Set up media source."""
|
||||
assert await async_setup_component(hass, "media_source", {})
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
async def mock_stream(hass):
|
||||
"""Mock stream."""
|
||||
hass.config.components.add("stream")
|
||||
|
||||
|
||||
async def test_browsing(hass, mock_camera_hls):
|
||||
"""Test browsing camera media source."""
|
||||
item = await media_source.async_browse_media(hass, "media-source://camera")
|
||||
assert item is not None
|
||||
assert item.title == "Camera"
|
||||
assert len(item.children) == 2
|
||||
|
||||
|
||||
async def test_browsing_filter_non_hls(hass, mock_camera_web_rtc):
|
||||
"""Test browsing camera media source hides non-HLS cameras."""
|
||||
item = await media_source.async_browse_media(hass, "media-source://camera")
|
||||
assert item is not None
|
||||
assert item.title == "Camera"
|
||||
assert len(item.children) == 0
|
||||
|
||||
|
||||
async def test_resolving(hass, mock_camera_hls):
|
||||
"""Test resolving."""
|
||||
with patch(
|
||||
"homeassistant.components.camera.media_source._async_stream_endpoint_url",
|
||||
return_value="http://example.com/stream",
|
||||
):
|
||||
item = await media_source.async_resolve_media(
|
||||
hass, "media-source://camera/camera.demo_camera"
|
||||
)
|
||||
assert item is not None
|
||||
assert item.url == "http://example.com/stream"
|
||||
assert item.mime_type == FORMAT_CONTENT_TYPE["hls"]
|
||||
|
||||
|
||||
async def test_resolving_errors(hass, mock_camera_hls):
|
||||
"""Test resolving."""
|
||||
with pytest.raises(media_source.Unresolvable):
|
||||
await media_source.async_resolve_media(
|
||||
hass, "media-source://camera/camera.non_existing"
|
||||
)
|
||||
|
||||
with pytest.raises(media_source.Unresolvable), patch(
|
||||
"homeassistant.components.camera.Camera.frontend_stream_type",
|
||||
new_callable=PropertyMock(return_value=STREAM_TYPE_WEB_RTC),
|
||||
):
|
||||
await media_source.async_resolve_media(
|
||||
hass, "media-source://camera/camera.demo_camera"
|
||||
)
|
||||
|
||||
with pytest.raises(media_source.Unresolvable):
|
||||
await media_source.async_resolve_media(
|
||||
hass, "media-source://camera/camera.demo_camera"
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue