"""The tests for the panel_custom component.""" import asyncio from unittest.mock import Mock, patch import pytest from homeassistant import setup from tests.common import mock_coro, mock_component @pytest.fixture def mock_register(hass): """Mock the frontend component being loaded and yield register method.""" mock_component(hass, 'frontend') with patch('homeassistant.components.frontend.async_register_panel', return_value=mock_coro()) as mock_register: yield mock_register @asyncio.coroutine def test_webcomponent_custom_path_not_found(hass, mock_register): """Test if a web component is found in config panels dir.""" filename = 'mock.file' config = { 'panel_custom': { 'name': 'todomvc', 'webcomponent_path': filename, 'sidebar_title': 'Sidebar Title', 'sidebar_icon': 'mdi:iconicon', 'url_path': 'nice_url', 'config': 5, } } with patch('os.path.isfile', Mock(return_value=False)): result = yield from setup.async_setup_component( hass, 'panel_custom', config ) assert not result assert not mock_register.called @asyncio.coroutine def test_webcomponent_custom_path(hass, mock_register): """Test if a web component is found in config panels dir.""" filename = 'mock.file' config = { 'panel_custom': { 'name': 'todomvc', 'webcomponent_path': filename, 'sidebar_title': 'Sidebar Title', 'sidebar_icon': 'mdi:iconicon', 'url_path': 'nice_url', 'config': 5, } } with patch('os.path.isfile', Mock(return_value=True)): with patch('os.access', Mock(return_value=True)): result = yield from setup.async_setup_component( hass, 'panel_custom', config ) assert result assert mock_register.called args = mock_register.mock_calls[0][1] assert args == (hass, 'todomvc', filename) kwargs = mock_register.mock_calls[0][2] assert kwargs == { 'config': 5, 'url_path': 'nice_url', 'sidebar_icon': 'mdi:iconicon', 'sidebar_title': 'Sidebar Title' }