Retain history when renaming an entity_id (#89963)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
This commit is contained in:
parent
affb48d271
commit
c94b054d75
9 changed files with 478 additions and 130 deletions
|
@ -5,7 +5,7 @@ from collections.abc import Callable
|
|||
from datetime import datetime, timedelta
|
||||
import importlib
|
||||
import sys
|
||||
from unittest.mock import ANY, DEFAULT, MagicMock, patch, sentinel
|
||||
from unittest.mock import ANY, DEFAULT, MagicMock, patch
|
||||
|
||||
import py
|
||||
import pytest
|
||||
|
@ -43,7 +43,6 @@ from homeassistant.components.recorder.table_managers.statistics_meta import (
|
|||
)
|
||||
from homeassistant.components.recorder.util import session_scope
|
||||
from homeassistant.components.sensor import UNIT_CONVERTERS
|
||||
from homeassistant.const import UnitOfTemperature
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers import recorder as recorder_helper
|
||||
|
@ -54,6 +53,7 @@ from .common import (
|
|||
assert_dict_of_states_equal_without_context_and_last_changed,
|
||||
async_wait_recording_done,
|
||||
do_adhoc_statistics,
|
||||
record_states,
|
||||
statistics_during_period,
|
||||
wait_recording_done,
|
||||
)
|
||||
|
@ -1758,80 +1758,6 @@ async def test_validate_db_schema_fix_statistics_datetime_issue(
|
|||
modify_columns_mock.assert_called_once_with(ANY, ANY, table, modification)
|
||||
|
||||
|
||||
def record_states(hass):
|
||||
"""Record some test states.
|
||||
|
||||
We inject a bunch of state updates temperature sensors.
|
||||
"""
|
||||
mp = "media_player.test"
|
||||
sns1 = "sensor.test1"
|
||||
sns2 = "sensor.test2"
|
||||
sns3 = "sensor.test3"
|
||||
sns4 = "sensor.test4"
|
||||
sns1_attr = {
|
||||
"device_class": "temperature",
|
||||
"state_class": "measurement",
|
||||
"unit_of_measurement": UnitOfTemperature.CELSIUS,
|
||||
}
|
||||
sns2_attr = {
|
||||
"device_class": "humidity",
|
||||
"state_class": "measurement",
|
||||
"unit_of_measurement": "%",
|
||||
}
|
||||
sns3_attr = {"device_class": "temperature"}
|
||||
sns4_attr = {}
|
||||
|
||||
def set_state(entity_id, state, **kwargs):
|
||||
"""Set the state."""
|
||||
hass.states.set(entity_id, state, **kwargs)
|
||||
wait_recording_done(hass)
|
||||
return hass.states.get(entity_id)
|
||||
|
||||
zero = dt_util.utcnow()
|
||||
one = zero + timedelta(seconds=1 * 5)
|
||||
two = one + timedelta(seconds=15 * 5)
|
||||
three = two + timedelta(seconds=30 * 5)
|
||||
four = three + timedelta(seconds=15 * 5)
|
||||
|
||||
states = {mp: [], sns1: [], sns2: [], sns3: [], sns4: []}
|
||||
with patch(
|
||||
"homeassistant.components.recorder.core.dt_util.utcnow", return_value=one
|
||||
):
|
||||
states[mp].append(
|
||||
set_state(mp, "idle", attributes={"media_title": str(sentinel.mt1)})
|
||||
)
|
||||
states[sns1].append(set_state(sns1, "10", attributes=sns1_attr))
|
||||
states[sns2].append(set_state(sns2, "10", attributes=sns2_attr))
|
||||
states[sns3].append(set_state(sns3, "10", attributes=sns3_attr))
|
||||
states[sns4].append(set_state(sns4, "10", attributes=sns4_attr))
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.recorder.core.dt_util.utcnow",
|
||||
return_value=one + timedelta(microseconds=1),
|
||||
):
|
||||
states[mp].append(
|
||||
set_state(mp, "YouTube", attributes={"media_title": str(sentinel.mt2)})
|
||||
)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.recorder.core.dt_util.utcnow", return_value=two
|
||||
):
|
||||
states[sns1].append(set_state(sns1, "15", attributes=sns1_attr))
|
||||
states[sns2].append(set_state(sns2, "15", attributes=sns2_attr))
|
||||
states[sns3].append(set_state(sns3, "15", attributes=sns3_attr))
|
||||
states[sns4].append(set_state(sns4, "15", attributes=sns4_attr))
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.recorder.core.dt_util.utcnow", return_value=three
|
||||
):
|
||||
states[sns1].append(set_state(sns1, "20", attributes=sns1_attr))
|
||||
states[sns2].append(set_state(sns2, "20", attributes=sns2_attr))
|
||||
states[sns3].append(set_state(sns3, "20", attributes=sns3_attr))
|
||||
states[sns4].append(set_state(sns4, "20", attributes=sns4_attr))
|
||||
|
||||
return zero, four, states
|
||||
|
||||
|
||||
def test_cache_key_for_generate_statistics_during_period_stmt() -> None:
|
||||
"""Test cache key for _generate_statistics_during_period_stmt."""
|
||||
columns = select(StatisticsShortTerm.metadata_id, StatisticsShortTerm.start_ts)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue