"""The tests for stream.""" from unittest.mock import patch, MagicMock import pytest from homeassistant.const import CONF_FILENAME from homeassistant.components.stream.const import ( DOMAIN, SERVICE_RECORD, CONF_STREAM_SOURCE, CONF_LOOKBACK, ATTR_STREAMS) 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