Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve utility meter restore state tests #114356

Merged
merged 1 commit into from Mar 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
91 changes: 53 additions & 38 deletions tests/components/utility_meter/test_sensor.py
Expand Up @@ -610,7 +610,7 @@ async def test_device_class(
"utility_meter": {
"energy_bill": {
"source": "sensor.energy",
"tariffs": ["onpeak", "midpeak", "offpeak", "superpeak"],
"tariffs": ["tariff1", "tariff2", "tariff3", "tariff4"],
}
}
},
Expand All @@ -626,7 +626,7 @@ async def test_device_class(
"offset": 0,
"periodically_resetting": True,
"source": "sensor.energy",
"tariffs": ["onpeak", "midpeak", "offpeak", "superpeak"],
"tariffs": ["tariff1", "tariff2", "tariff3", "tariff4"],
},
),
],
Expand All @@ -638,82 +638,89 @@ async def test_restore_state(
# Home assistant is not runnit yet
hass.set_state(CoreState.not_running)

last_reset = "2020-12-21T00:00:00.013073+00:00"
last_reset_1 = "2020-12-21T00:00:00.013073+00:00"
last_reset_2 = "2020-12-22T00:00:00.013073+00:00"
Comment on lines +641 to +642
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use different timestamps so we know if the timestamp is restored from the UtilitySensorExtraStoredData


mock_restore_cache_with_extra_data(
hass,
[
# sensor.energy_bill_tariff1 is restored as expected
(
State(
"sensor.energy_bill_onpeak",
"3",
"sensor.energy_bill_tariff1",
"1.1",
attributes={
ATTR_STATUS: PAUSED,
ATTR_LAST_RESET: last_reset,
ATTR_UNIT_OF_MEASUREMENT: UnitOfEnergy.KILO_WATT_HOUR,
ATTR_LAST_RESET: last_reset_1,
ATTR_UNIT_OF_MEASUREMENT: UnitOfEnergy.MEGA_WATT_HOUR,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use different unit so we know if the unit is restored from the UtilitySensorExtraStoredData

},
),
{
"native_value": {
"__type": "<class 'decimal.Decimal'>",
"decimal_str": "3",
"decimal_str": "1.2",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use different value so we know if the value is restored from the UtilitySensorExtraStoredData

},
"native_unit_of_measurement": "kWh",
"last_reset": last_reset,
"last_period": "7",
"last_valid_state": "None",
"last_reset": last_reset_2,
"last_period": "1.3",
"last_valid_state": None,
"status": "paused",
},
),
# sensor.energy_bill_tariff2 has missing keys and falls back to
# saved state
(
State(
"sensor.energy_bill_midpeak",
"5",
"sensor.energy_bill_tariff2",
"2.1",
attributes={
ATTR_STATUS: PAUSED,
ATTR_LAST_RESET: last_reset,
ATTR_LAST_RESET: last_reset_1,
ATTR_LAST_VALID_STATE: None,
ATTR_UNIT_OF_MEASUREMENT: UnitOfEnergy.KILO_WATT_HOUR,
ATTR_UNIT_OF_MEASUREMENT: UnitOfEnergy.MEGA_WATT_HOUR,
},
),
{
"native_value": {
"__type": "<class 'decimal.Decimal'>",
"decimal_str": "3",
"decimal_str": "2.2",
},
"native_unit_of_measurement": "kWh",
"last_valid_state": "None",
},
),
# sensor.energy_bill_tariff3 has invalid data and falls back to
# saved state
(
State(
"sensor.energy_bill_offpeak",
"6",
"sensor.energy_bill_tariff3",
"3.1",
attributes={
ATTR_STATUS: COLLECTING,
ATTR_LAST_RESET: last_reset,
ATTR_LAST_RESET: last_reset_1,
ATTR_LAST_VALID_STATE: None,
ATTR_UNIT_OF_MEASUREMENT: UnitOfEnergy.KILO_WATT_HOUR,
ATTR_UNIT_OF_MEASUREMENT: UnitOfEnergy.MEGA_WATT_HOUR,
},
),
{
"native_value": {
"__type": "<class 'decimal.Decimal'>",
"decimal_str": "3f",
"decimal_str": "3f", # Invalid
},
"native_unit_of_measurement": "kWh",
"last_valid_state": "None",
},
),
# No extra saved data, fall back to saved state
(
State(
"sensor.energy_bill_superpeak",
"sensor.energy_bill_tariff4",
"error",
attributes={
ATTR_STATUS: COLLECTING,
ATTR_LAST_RESET: last_reset,
ATTR_LAST_RESET: last_reset_1,
ATTR_LAST_VALID_STATE: None,
ATTR_UNIT_OF_MEASUREMENT: UnitOfEnergy.KILO_WATT_HOUR,
ATTR_UNIT_OF_MEASUREMENT: UnitOfEnergy.MEGA_WATT_HOUR,
},
),
{},
Expand All @@ -736,25 +743,28 @@ async def test_restore_state(
await hass.async_block_till_done()

# restore from cache
state = hass.states.get("sensor.energy_bill_onpeak")
assert state.state == "3"
state = hass.states.get("sensor.energy_bill_tariff1")
assert state.state == "1.2"
assert state.attributes.get("status") == PAUSED
assert state.attributes.get("last_reset") == last_reset
assert state.attributes.get("last_reset") == last_reset_2
assert state.attributes.get("last_valid_state") == "None"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfEnergy.KILO_WATT_HOUR

state = hass.states.get("sensor.energy_bill_midpeak")
assert state.state == "5"
state = hass.states.get("sensor.energy_bill_tariff2")
assert state.state == "2.1"
assert state.attributes.get("status") == PAUSED
assert state.attributes.get("last_reset") == last_reset_1
assert state.attributes.get("last_valid_state") == "None"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfEnergy.MEGA_WATT_HOUR

state = hass.states.get("sensor.energy_bill_offpeak")
assert state.state == "6"
state = hass.states.get("sensor.energy_bill_tariff3")
assert state.state == "3.1"
assert state.attributes.get("status") == COLLECTING
assert state.attributes.get("last_reset") == last_reset
assert state.attributes.get("last_reset") == last_reset_1
assert state.attributes.get("last_valid_state") == "None"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfEnergy.KILO_WATT_HOUR
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfEnergy.MEGA_WATT_HOUR

state = hass.states.get("sensor.energy_bill_superpeak")
state = hass.states.get("sensor.energy_bill_tariff4")
assert state.state == STATE_UNKNOWN

# utility_meter is loaded, now set sensors according to utility_meter:
Expand All @@ -764,13 +774,18 @@ async def test_restore_state(
await hass.async_block_till_done()

state = hass.states.get("select.energy_bill")
assert state.state == "onpeak"
assert state.state == "tariff1"

state = hass.states.get("sensor.energy_bill_onpeak")
state = hass.states.get("sensor.energy_bill_tariff1")
assert state.attributes.get("status") == COLLECTING

state = hass.states.get("sensor.energy_bill_offpeak")
assert state.attributes.get("status") == PAUSED
for entity_id in (
"sensor.energy_bill_tariff2",
"sensor.energy_bill_tariff3",
"sensor.energy_bill_tariff4",
):
state = hass.states.get(entity_id)
assert state.attributes.get("status") == PAUSED


@pytest.mark.parametrize(
Expand Down