Test sum AND mean in recorder tests (#78998)

This commit is contained in:
epenet 2022-09-23 15:55:17 +02:00 committed by GitHub
parent 55d90c0abc
commit 08ebb9f31a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -30,16 +30,46 @@ from .common import (
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
ENERGY_SENSOR_KWH_ATTRIBUTES = {
"device_class": "energy",
"state_class": "total",
"unit_of_measurement": "kWh",
}
ENERGY_SENSOR_WH_ATTRIBUTES = {
"device_class": "energy",
"state_class": "total",
"unit_of_measurement": "Wh",
}
GAS_SENSOR_FT3_ATTRIBUTES = {
"device_class": "gas",
"state_class": "total",
"unit_of_measurement": "ft³",
}
GAS_SENSOR_M3_ATTRIBUTES = {
"device_class": "gas",
"state_class": "total",
"unit_of_measurement": "",
}
POWER_SENSOR_KW_ATTRIBUTES = { POWER_SENSOR_KW_ATTRIBUTES = {
"device_class": "power", "device_class": "power",
"state_class": "measurement", "state_class": "measurement",
"unit_of_measurement": "kW", "unit_of_measurement": "kW",
} }
POWER_SENSOR_W_ATTRIBUTES = {
"device_class": "power",
"state_class": "measurement",
"unit_of_measurement": "W",
}
PRESSURE_SENSOR_HPA_ATTRIBUTES = { PRESSURE_SENSOR_HPA_ATTRIBUTES = {
"device_class": "pressure", "device_class": "pressure",
"state_class": "measurement", "state_class": "measurement",
"unit_of_measurement": "hPa", "unit_of_measurement": "hPa",
} }
PRESSURE_SENSOR_PA_ATTRIBUTES = {
"device_class": "pressure",
"state_class": "measurement",
"unit_of_measurement": "Pa",
}
TEMPERATURE_SENSOR_C_ATTRIBUTES = { TEMPERATURE_SENSOR_C_ATTRIBUTES = {
"device_class": "temperature", "device_class": "temperature",
"state_class": "measurement", "state_class": "measurement",
@ -50,16 +80,6 @@ TEMPERATURE_SENSOR_F_ATTRIBUTES = {
"state_class": "measurement", "state_class": "measurement",
"unit_of_measurement": "°F", "unit_of_measurement": "°F",
} }
ENERGY_SENSOR_KWH_ATTRIBUTES = {
"device_class": "energy",
"state_class": "total",
"unit_of_measurement": "kWh",
}
GAS_SENSOR_M3_ATTRIBUTES = {
"device_class": "gas",
"state_class": "total",
"unit_of_measurement": "",
}
@pytest.mark.parametrize( @pytest.mark.parametrize(
@ -544,14 +564,18 @@ async def test_statistics_during_period_bad_end_time(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"units, attributes, display_unit, statistics_unit, unit_class", "units, attributes, display_unit, statistics_unit, unit_class",
[ [
(IMPERIAL_SYSTEM, ENERGY_SENSOR_WH_ATTRIBUTES, "Wh", "kWh", "energy"),
(METRIC_SYSTEM, ENERGY_SENSOR_WH_ATTRIBUTES, "Wh", "kWh", "energy"),
(IMPERIAL_SYSTEM, GAS_SENSOR_FT3_ATTRIBUTES, "ft³", "", "volume"),
(METRIC_SYSTEM, GAS_SENSOR_FT3_ATTRIBUTES, "ft³", "", "volume"),
(IMPERIAL_SYSTEM, POWER_SENSOR_KW_ATTRIBUTES, "kW", "W", "power"), (IMPERIAL_SYSTEM, POWER_SENSOR_KW_ATTRIBUTES, "kW", "W", "power"),
(METRIC_SYSTEM, POWER_SENSOR_KW_ATTRIBUTES, "kW", "W", "power"), (METRIC_SYSTEM, POWER_SENSOR_KW_ATTRIBUTES, "kW", "W", "power"),
(IMPERIAL_SYSTEM, PRESSURE_SENSOR_HPA_ATTRIBUTES, "hPa", "Pa", "pressure"),
(METRIC_SYSTEM, PRESSURE_SENSOR_HPA_ATTRIBUTES, "hPa", "Pa", "pressure"),
(IMPERIAL_SYSTEM, TEMPERATURE_SENSOR_C_ATTRIBUTES, "°C", "°C", "temperature"), (IMPERIAL_SYSTEM, TEMPERATURE_SENSOR_C_ATTRIBUTES, "°C", "°C", "temperature"),
(METRIC_SYSTEM, TEMPERATURE_SENSOR_C_ATTRIBUTES, "°C", "°C", "temperature"), (METRIC_SYSTEM, TEMPERATURE_SENSOR_C_ATTRIBUTES, "°C", "°C", "temperature"),
(IMPERIAL_SYSTEM, TEMPERATURE_SENSOR_F_ATTRIBUTES, "°F", "°C", "temperature"), (IMPERIAL_SYSTEM, TEMPERATURE_SENSOR_F_ATTRIBUTES, "°F", "°C", "temperature"),
(METRIC_SYSTEM, TEMPERATURE_SENSOR_F_ATTRIBUTES, "°F", "°C", "temperature"), (METRIC_SYSTEM, TEMPERATURE_SENSOR_F_ATTRIBUTES, "°F", "°C", "temperature"),
(IMPERIAL_SYSTEM, PRESSURE_SENSOR_HPA_ATTRIBUTES, "hPa", "Pa", "pressure"),
(METRIC_SYSTEM, PRESSURE_SENSOR_HPA_ATTRIBUTES, "hPa", "Pa", "pressure"),
], ],
) )
async def test_list_statistic_ids( async def test_list_statistic_ids(
@ -566,6 +590,8 @@ async def test_list_statistic_ids(
): ):
"""Test list_statistic_ids.""" """Test list_statistic_ids."""
now = dt_util.utcnow() now = dt_util.utcnow()
has_mean = attributes["state_class"] == "measurement"
has_sum = not has_mean
hass.config.units = units hass.config.units = units
await async_setup_component(hass, "sensor", {}) await async_setup_component(hass, "sensor", {})
@ -586,8 +612,8 @@ async def test_list_statistic_ids(
assert response["result"] == [ assert response["result"] == [
{ {
"statistic_id": "sensor.test", "statistic_id": "sensor.test",
"has_mean": True, "has_mean": has_mean,
"has_sum": False, "has_sum": has_sum,
"name": None, "name": None,
"source": "recorder", "source": "recorder",
"display_unit_of_measurement": display_unit, "display_unit_of_measurement": display_unit,
@ -608,8 +634,8 @@ async def test_list_statistic_ids(
assert response["result"] == [ assert response["result"] == [
{ {
"statistic_id": "sensor.test", "statistic_id": "sensor.test",
"has_mean": True, "has_mean": has_mean,
"has_sum": False, "has_sum": has_sum,
"name": None, "name": None,
"source": "recorder", "source": "recorder",
"display_unit_of_measurement": display_unit, "display_unit_of_measurement": display_unit,
@ -629,25 +655,42 @@ async def test_list_statistic_ids(
) )
response = await client.receive_json() response = await client.receive_json()
assert response["success"] assert response["success"]
assert response["result"] == [ if has_mean:
{ assert response["result"] == [
"statistic_id": "sensor.test", {
"has_mean": True, "statistic_id": "sensor.test",
"has_sum": False, "has_mean": has_mean,
"name": None, "has_sum": has_sum,
"source": "recorder", "name": None,
"display_unit_of_measurement": display_unit, "source": "recorder",
"statistics_unit_of_measurement": statistics_unit, "display_unit_of_measurement": display_unit,
"unit_class": unit_class, "statistics_unit_of_measurement": statistics_unit,
} "unit_class": unit_class,
] }
]
else:
assert response["result"] == []
await client.send_json( await client.send_json(
{"id": 6, "type": "recorder/list_statistic_ids", "statistic_type": "sum"} {"id": 6, "type": "recorder/list_statistic_ids", "statistic_type": "sum"}
) )
response = await client.receive_json() response = await client.receive_json()
assert response["success"] assert response["success"]
assert response["result"] == [] if has_sum:
assert response["result"] == [
{
"statistic_id": "sensor.test",
"has_mean": has_mean,
"has_sum": has_sum,
"name": None,
"source": "recorder",
"display_unit_of_measurement": display_unit,
"statistics_unit_of_measurement": statistics_unit,
"unit_class": unit_class,
}
]
else:
assert response["result"] == []
async def test_validate_statistics(hass, hass_ws_client, recorder_mock): async def test_validate_statistics(hass, hass_ws_client, recorder_mock):
@ -1045,8 +1088,16 @@ async def test_backup_end_without_start(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"units, attributes, unit, unit_class", "units, attributes, unit, unit_class",
[ [
(METRIC_SYSTEM, GAS_SENSOR_M3_ATTRIBUTES, "", "volume"),
(METRIC_SYSTEM, ENERGY_SENSOR_KWH_ATTRIBUTES, "kWh", "energy"), (METRIC_SYSTEM, ENERGY_SENSOR_KWH_ATTRIBUTES, "kWh", "energy"),
(METRIC_SYSTEM, ENERGY_SENSOR_WH_ATTRIBUTES, "kWh", "energy"),
(METRIC_SYSTEM, GAS_SENSOR_FT3_ATTRIBUTES, "", "volume"),
(METRIC_SYSTEM, GAS_SENSOR_M3_ATTRIBUTES, "", "volume"),
(METRIC_SYSTEM, POWER_SENSOR_W_ATTRIBUTES, "W", "power"),
(METRIC_SYSTEM, POWER_SENSOR_KW_ATTRIBUTES, "W", "power"),
(METRIC_SYSTEM, PRESSURE_SENSOR_PA_ATTRIBUTES, "Pa", "pressure"),
(METRIC_SYSTEM, PRESSURE_SENSOR_HPA_ATTRIBUTES, "Pa", "pressure"),
(METRIC_SYSTEM, TEMPERATURE_SENSOR_C_ATTRIBUTES, "°C", "temperature"),
(METRIC_SYSTEM, TEMPERATURE_SENSOR_F_ATTRIBUTES, "°C", "temperature"),
], ],
) )
async def test_get_statistics_metadata( async def test_get_statistics_metadata(
@ -1054,6 +1105,8 @@ async def test_get_statistics_metadata(
): ):
"""Test get_statistics_metadata.""" """Test get_statistics_metadata."""
now = dt_util.utcnow() now = dt_util.utcnow()
has_mean = attributes["state_class"] == "measurement"
has_sum = not has_mean
hass.config.units = units hass.config.units = units
await async_setup_component(hass, "sensor", {}) await async_setup_component(hass, "sensor", {})
@ -1096,8 +1149,8 @@ async def test_get_statistics_metadata(
}, },
) )
external_energy_metadata_1 = { external_energy_metadata_1 = {
"has_mean": False, "has_mean": has_mean,
"has_sum": True, "has_sum": has_sum,
"name": "Total imported energy", "name": "Total imported energy",
"source": "test", "source": "test",
"state_unit_of_measurement": unit, "state_unit_of_measurement": unit,
@ -1123,8 +1176,8 @@ async def test_get_statistics_metadata(
{ {
"statistic_id": "test:total_gas", "statistic_id": "test:total_gas",
"display_unit_of_measurement": unit, "display_unit_of_measurement": unit,
"has_mean": False, "has_mean": has_mean,
"has_sum": True, "has_sum": has_sum,
"name": "Total imported energy", "name": "Total imported energy",
"source": "test", "source": "test",
"statistics_unit_of_measurement": unit, "statistics_unit_of_measurement": unit,
@ -1150,9 +1203,9 @@ async def test_get_statistics_metadata(
assert response["result"] == [ assert response["result"] == [
{ {
"statistic_id": "sensor.test", "statistic_id": "sensor.test",
"display_unit_of_measurement": unit, "display_unit_of_measurement": attributes["unit_of_measurement"],
"has_mean": False, "has_mean": has_mean,
"has_sum": True, "has_sum": has_sum,
"name": None, "name": None,
"source": "recorder", "source": "recorder",
"statistics_unit_of_measurement": unit, "statistics_unit_of_measurement": unit,
@ -1178,9 +1231,9 @@ async def test_get_statistics_metadata(
assert response["result"] == [ assert response["result"] == [
{ {
"statistic_id": "sensor.test", "statistic_id": "sensor.test",
"display_unit_of_measurement": unit, "display_unit_of_measurement": attributes["unit_of_measurement"],
"has_mean": False, "has_mean": has_mean,
"has_sum": True, "has_sum": has_sum,
"name": None, "name": None,
"source": "recorder", "source": "recorder",
"statistics_unit_of_measurement": unit, "statistics_unit_of_measurement": unit,