mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
input_datetime guard for unexpected state on restore (#32652)
* input_datetime guard for unexpected state If state is a time and has_date = true, or the other way around, restore state would error * Update __init__.py * Add test
This commit is contained in:
parent
765882fc4d
commit
bbe0f75336
@ -237,12 +237,22 @@ class InputDatetime(RestoreEntity):
|
||||
return
|
||||
|
||||
if self.has_date and self.has_time:
|
||||
self._current_datetime = dt_util.parse_datetime(old_state.state)
|
||||
date_time = dt_util.parse_datetime(old_state.state)
|
||||
if date_time is None:
|
||||
self._current_datetime = dt_util.parse_datetime(DEFAULT_VALUE)
|
||||
return
|
||||
self._current_datetime = date_time
|
||||
elif self.has_date:
|
||||
date = dt_util.parse_date(old_state.state)
|
||||
if date is None:
|
||||
self._current_datetime = dt_util.parse_datetime(DEFAULT_VALUE)
|
||||
return
|
||||
self._current_datetime = datetime.datetime.combine(date, DEFAULT_TIME)
|
||||
else:
|
||||
time = dt_util.parse_time(old_state.state)
|
||||
if time is None:
|
||||
self._current_datetime = dt_util.parse_datetime(DEFAULT_VALUE)
|
||||
return
|
||||
self._current_datetime = datetime.datetime.combine(DEFAULT_DATE, time)
|
||||
|
||||
@property
|
||||
|
@ -268,12 +268,15 @@ async def test_restore_state(hass):
|
||||
State("input_datetime.test_date", "2017-09-07"),
|
||||
State("input_datetime.test_datetime", "2017-09-07 19:46:00"),
|
||||
State("input_datetime.test_bogus_data", "this is not a date"),
|
||||
State("input_datetime.test_was_time", "19:46:00"),
|
||||
State("input_datetime.test_was_date", "2017-09-07"),
|
||||
),
|
||||
)
|
||||
|
||||
hass.state = CoreState.starting
|
||||
|
||||
initial = datetime.datetime(2017, 1, 1, 23, 42)
|
||||
default = datetime.datetime(1970, 1, 1, 0, 0)
|
||||
|
||||
await async_setup_component(
|
||||
hass,
|
||||
@ -288,6 +291,8 @@ async def test_restore_state(hass):
|
||||
"has_date": True,
|
||||
"initial": str(initial),
|
||||
},
|
||||
"test_was_time": {"has_time": False, "has_date": True},
|
||||
"test_was_date": {"has_time": True, "has_date": False},
|
||||
}
|
||||
},
|
||||
)
|
||||
@ -305,6 +310,12 @@ async def test_restore_state(hass):
|
||||
state_bogus = hass.states.get("input_datetime.test_bogus_data")
|
||||
assert state_bogus.state == str(initial)
|
||||
|
||||
state_was_time = hass.states.get("input_datetime.test_was_time")
|
||||
assert state_was_time.state == str(default.date())
|
||||
|
||||
state_was_date = hass.states.get("input_datetime.test_was_date")
|
||||
assert state_was_date.state == str(default.time())
|
||||
|
||||
|
||||
async def test_default_value(hass):
|
||||
"""Test default value if none has been set via initial or restore state."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user