"""Tests for the system health component init.""" import asyncio from unittest.mock import Mock import pytest from homeassistant.setup import async_setup_component from tests.common import mock_coro @pytest.fixture def mock_system_info(hass): """Mock system info.""" hass.helpers.system_info.async_get_system_info = Mock( return_value=mock_coro({'hello': True}) ) async def test_info_endpoint_return_info(hass, hass_ws_client, mock_system_info): """Test that the info endpoint works.""" assert await async_setup_component(hass, 'system_health', {}) client = await hass_ws_client(hass) resp = await client.send_json({ 'id': 6, 'type': 'system_health/info', }) resp = await client.receive_json() assert resp['success'] data = resp['result'] assert len(data) == 1 data = data['homeassistant'] assert data == {'hello': True} async def test_info_endpoint_register_callback(hass, hass_ws_client, mock_system_info): """Test that the info endpoint allows registering callbacks.""" async def mock_info(hass): return {'storage': 'YAML'} hass.components.system_health.async_register_info('lovelace', mock_info) assert await async_setup_component(hass, 'system_health', {}) client = await hass_ws_client(hass) resp = await client.send_json({ 'id': 6, 'type': 'system_health/info', }) resp = await client.receive_json() assert resp['success'] data = resp['result'] assert len(data) == 2 data = data['lovelace'] assert data == {'storage': 'YAML'} async def test_info_endpoint_register_callback_timeout(hass, hass_ws_client, mock_system_info): """Test that the info endpoint timing out.""" async def mock_info(hass): raise asyncio.TimeoutError hass.components.system_health.async_register_info('lovelace', mock_info) assert await async_setup_component(hass, 'system_health', {}) client = await hass_ws_client(hass) resp = await client.send_json({ 'id': 6, 'type': 'system_health/info', }) resp = await client.receive_json() assert resp['success'] data = resp['result'] assert len(data) == 2 data = data['lovelace'] assert data == {'error': 'Fetching info timed out'} async def test_info_endpoint_register_callback_exc(hass, hass_ws_client, mock_system_info): """Test that the info endpoint requires auth.""" async def mock_info(hass): raise Exception("TEST ERROR") hass.components.system_health.async_register_info('lovelace', mock_info) assert await async_setup_component(hass, 'system_health', {}) client = await hass_ws_client(hass) resp = await client.send_json({ 'id': 6, 'type': 'system_health/info', }) resp = await client.receive_json() assert resp['success'] data = resp['result'] assert len(data) == 2 data = data['lovelace'] assert data == {'error': 'TEST ERROR'}