"""The tests for stream.""" from unittest.mock import MagicMock, patch import pytest from homeassistant.components.stream.const import ( ATTR_STREAMS, CONF_LOOKBACK, CONF_STREAM_SOURCE, DOMAIN, SERVICE_RECORD, ) from homeassistant.const import CONF_FILENAME from homeassistant.exceptions import HomeAssistantError from homeassistant.setup import async_setup_component from tests.common import mock_coro async def test_record_service_invalid_file(hass): """Test record service call with invalid file.""" await async_setup_component(hass, "stream", {"stream": {}}) data = {CONF_STREAM_SOURCE: "rtsp://my.video", CONF_FILENAME: "/my/invalid/path"} with pytest.raises(HomeAssistantError): await hass.services.async_call(DOMAIN, SERVICE_RECORD, data, blocking=True) async def test_record_service_init_stream(hass): """Test record service call with invalid file.""" await async_setup_component(hass, "stream", {"stream": {}}) data = {CONF_STREAM_SOURCE: "rtsp://my.video", CONF_FILENAME: "/my/invalid/path"} with patch("homeassistant.components.stream.Stream") as stream_mock, patch.object( hass.config, "is_allowed_path", return_value=True ): # Setup stubs stream_mock.return_value.outputs = {} # Call Service await hass.services.async_call(DOMAIN, SERVICE_RECORD, data, blocking=True) # Assert assert stream_mock.called async def test_record_service_existing_record_session(hass): """Test record service call with invalid file.""" await async_setup_component(hass, "stream", {"stream": {}}) source = "rtsp://my.video" data = {CONF_STREAM_SOURCE: source, CONF_FILENAME: "/my/invalid/path"} # Setup stubs stream_mock = MagicMock() stream_mock.return_value.outputs = {"recorder": MagicMock()} hass.data[DOMAIN][ATTR_STREAMS][source] = stream_mock with patch.object(hass.config, "is_allowed_path", return_value=True), pytest.raises( HomeAssistantError ): # Call Service await hass.services.async_call(DOMAIN, SERVICE_RECORD, data, blocking=True) async def test_record_service_lookback(hass): """Test record service call with invalid file.""" await async_setup_component(hass, "stream", {"stream": {}}) data = { CONF_STREAM_SOURCE: "rtsp://my.video", CONF_FILENAME: "/my/invalid/path", CONF_LOOKBACK: 4, } with patch("homeassistant.components.stream.Stream") as stream_mock, patch.object( hass.config, "is_allowed_path", return_value=True ): # Setup stubs hls_mock = MagicMock() hls_mock.num_segments = 3 hls_mock.target_duration = 2 hls_mock.recv.return_value = mock_coro() stream_mock.return_value.outputs = {"hls": hls_mock} # Call Service await hass.services.async_call(DOMAIN, SERVICE_RECORD, data, blocking=True) assert stream_mock.called stream_mock.return_value.add_provider.assert_called_once_with("recorder") assert hls_mock.recv.called