core/tests/components/demo/test_init.py

75 lines
2.3 KiB
Python
Raw Normal View History

2016-03-09 09:25:50 +00:00
"""The tests for the Demo component."""
from contextlib import suppress
import json
2016-02-14 23:08:23 +00:00
import os
2014-11-29 06:49:29 +00:00
import pytest
from homeassistant.components.demo import DOMAIN
from homeassistant.components.device_tracker.legacy import YAML_DEVICES
from homeassistant.components.recorder import get_instance
from homeassistant.components.recorder.statistics import list_statistic_ids
from homeassistant.helpers.json import JSONEncoder
from homeassistant.setup import async_setup_component
from tests.components.recorder.common import async_wait_recording_done
2014-11-29 06:49:29 +00:00
@pytest.fixture(autouse=True)
def mock_history(hass):
"""Mock history component loaded."""
2019-07-31 19:25:30 +00:00
hass.config.components.add("history")
@pytest.fixture(autouse=True)
def demo_cleanup(hass):
"""Clean up device tracker demo file."""
yield
with suppress(FileNotFoundError):
os.remove(hass.config.path(YAML_DEVICES))
2014-11-29 06:49:29 +00:00
async def test_setting_up_demo(hass):
"""Test if we can set up the demo and dump it to JSON."""
assert await async_setup_component(hass, DOMAIN, {DOMAIN: {}})
await hass.async_block_till_done()
await hass.async_start()
# This is done to make sure entity components don't accidentally store
# non-JSON-serializable data in the state machine.
try:
json.dumps(hass.states.async_all(), cls=JSONEncoder)
except Exception: # pylint: disable=broad-except
2019-07-31 19:25:30 +00:00
pytest.fail(
"Unable to convert all demo entities to JSON. "
"Wrong data in state machine!"
)
async def test_demo_statistics(hass, recorder_mock):
"""Test that the demo components makes some statistics available."""
assert await async_setup_component(hass, DOMAIN, {DOMAIN: {}})
await hass.async_block_till_done()
await hass.async_start()
await async_wait_recording_done(hass)
statistic_ids = await get_instance(hass).async_add_executor_job(
list_statistic_ids, hass
)
assert {
"has_mean": True,
"has_sum": False,
"name": None,
"source": "demo",
"statistic_id": "demo:temperature_outdoor",
"unit_of_measurement": "°C",
} in statistic_ids
assert {
"has_mean": False,
"has_sum": True,
"name": None,
"source": "demo",
"statistic_id": "demo:energy_consumption",
"unit_of_measurement": "kWh",
} in statistic_ids