core/tests/components/lovelace/test_init.py

186 lines
4.9 KiB
Python

"""Test the Lovelace initialization."""
from unittest.mock import patch
from homeassistant.setup import async_setup_component
from homeassistant.components import frontend, lovelace
from tests.common import get_system_health_info
async def test_lovelace_from_storage(hass, hass_ws_client, hass_storage):
"""Test we load lovelace config from storage."""
assert await async_setup_component(hass, 'lovelace', {})
assert hass.data[frontend.DATA_PANELS]['lovelace'].config == {
'mode': 'storage'
}
client = await hass_ws_client(hass)
# Fetch data
await client.send_json({
'id': 5,
'type': 'lovelace/config'
})
response = await client.receive_json()
assert not response['success']
assert response['error']['code'] == 'config_not_found'
# Store new config
await client.send_json({
'id': 6,
'type': 'lovelace/config/save',
'config': {
'yo': 'hello'
}
})
response = await client.receive_json()
assert response['success']
assert hass_storage[lovelace.STORAGE_KEY]['data'] == {
'config': {'yo': 'hello'}
}
# Load new config
await client.send_json({
'id': 7,
'type': 'lovelace/config'
})
response = await client.receive_json()
assert response['success']
assert response['result'] == {
'yo': 'hello'
}
async def test_lovelace_from_storage_save_before_load(hass, hass_ws_client,
hass_storage):
"""Test we can load lovelace config from storage."""
assert await async_setup_component(hass, 'lovelace', {})
client = await hass_ws_client(hass)
# Store new config
await client.send_json({
'id': 6,
'type': 'lovelace/config/save',
'config': {
'yo': 'hello'
}
})
response = await client.receive_json()
assert response['success']
assert hass_storage[lovelace.STORAGE_KEY]['data'] == {
'config': {'yo': 'hello'}
}
async def test_lovelace_from_yaml(hass, hass_ws_client):
"""Test we load lovelace config from yaml."""
assert await async_setup_component(hass, 'lovelace', {
'lovelace': {
'mode': 'YAML'
}
})
assert hass.data[frontend.DATA_PANELS]['lovelace'].config == {
'mode': 'yaml'
}
client = await hass_ws_client(hass)
# Fetch data
await client.send_json({
'id': 5,
'type': 'lovelace/config'
})
response = await client.receive_json()
assert not response['success']
assert response['error']['code'] == 'config_not_found'
# Store new config not allowed
await client.send_json({
'id': 6,
'type': 'lovelace/config/save',
'config': {
'yo': 'hello'
}
})
response = await client.receive_json()
assert not response['success']
# Patch data
with patch('homeassistant.components.lovelace.load_yaml', return_value={
'hello': 'yo'
}):
await client.send_json({
'id': 7,
'type': 'lovelace/config'
})
response = await client.receive_json()
assert response['success']
assert response['result'] == {'hello': 'yo'}
async def test_system_health_info_autogen(hass):
"""Test system health info endpoint."""
assert await async_setup_component(hass, 'lovelace', {})
info = await get_system_health_info(hass, 'lovelace')
assert info == {'mode': 'auto-gen'}
async def test_system_health_info_storage(hass, hass_storage):
"""Test system health info endpoint."""
hass_storage[lovelace.STORAGE_KEY] = {
'key': 'lovelace',
'version': 1,
'data': {
'config': {
'resources': [],
'views': []
}
}
}
assert await async_setup_component(hass, 'lovelace', {})
info = await get_system_health_info(hass, 'lovelace')
assert info == {
'mode': 'storage',
'resources': 0,
'views': 0,
}
async def test_system_health_info_yaml(hass):
"""Test system health info endpoint."""
assert await async_setup_component(hass, 'lovelace', {
'lovelace': {
'mode': 'YAML'
}
})
with patch('homeassistant.components.lovelace.load_yaml', return_value={
'views': [
{
'cards': []
}
]
}):
info = await get_system_health_info(hass, 'lovelace')
assert info == {
'mode': 'yaml',
'resources': 0,
'views': 1,
}
async def test_system_health_info_yaml_not_found(hass):
"""Test system health info endpoint."""
assert await async_setup_component(hass, 'lovelace', {
'lovelace': {
'mode': 'YAML'
}
})
info = await get_system_health_info(hass, 'lovelace')
assert info == {
'mode': 'yaml',
'error': "{} not found".format(hass.config.path('ui-lovelace.yaml'))
}