Correct state restoring for Utility Meter sensors (#66851)

* fix merge

* backward compatability

* add status

* increase coverage

* increase further the coverage

* adds support for Decimal in SensorExtraStoredData

* more precise

* review

* don't restore broken last_reset

* increase coverage

* address review comments

* stale

* coverage increase

* Update homeassistant/components/utility_meter/sensor.py

Co-authored-by: Erik Montnemery <erik@montnemery.com>

* catch corrupt files and respective tests

Co-authored-by: Erik Montnemery <erik@montnemery.com>
This commit is contained in:
Diogo Gomes 2022-04-19 08:01:52 +01:00 committed by GitHub
parent 9dfd37c60b
commit 03874d1b65
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 201 additions and 31 deletions

View file

@ -1,5 +1,6 @@
"""The test for sensor entity."""
from datetime import date, datetime, timezone
from decimal import Decimal
import pytest
from pytest import approx
@ -227,10 +228,24 @@ RESTORE_DATA = {
"isoformat": datetime(2020, 2, 8, 15, tzinfo=timezone.utc).isoformat(),
},
},
"Decimal": {
"native_unit_of_measurement": "°F",
"native_value": {
"__type": "<class 'decimal.Decimal'>",
"decimal_str": "123.4",
},
},
"BadDecimal": {
"native_unit_of_measurement": "°F",
"native_value": {
"__type": "<class 'decimal.Decimal'>",
"decimal_str": "123f",
},
},
}
# None | str | int | float | date | datetime:
# None | str | int | float | date | datetime | Decimal:
@pytest.mark.parametrize(
"native_value, native_value_type, expected_extra_data, device_class",
[
@ -244,6 +259,7 @@ RESTORE_DATA = {
RESTORE_DATA["datetime"],
SensorDeviceClass.TIMESTAMP,
),
(Decimal("123.4"), dict, RESTORE_DATA["Decimal"], SensorDeviceClass.ENERGY),
],
)
async def test_restore_sensor_save_state(
@ -294,6 +310,13 @@ async def test_restore_sensor_save_state(
SensorDeviceClass.TIMESTAMP,
"°F",
),
(
Decimal("123.4"),
Decimal,
RESTORE_DATA["Decimal"],
SensorDeviceClass.ENERGY,
"°F",
),
(None, type(None), None, None, None),
(None, type(None), {}, None, None),
(None, type(None), {"beer": 123}, None, None),
@ -304,6 +327,7 @@ async def test_restore_sensor_save_state(
None,
None,
),
(None, type(None), RESTORE_DATA["BadDecimal"], SensorDeviceClass.ENERGY, None),
],
)
async def test_restore_sensor_restore_state(