Add datetime
platform (#81943)
Co-authored-by: Franck Nijhof <frenck@frenck.nl> Co-authored-by: Franck Nijhof <git@frenck.dev>
This commit is contained in:
parent
940942a74a
commit
24290e5d08
17 changed files with 468 additions and 30 deletions
|
@ -19,12 +19,16 @@ from homeassistant.components.input_datetime import (
|
|||
CONFIG_SCHEMA,
|
||||
DEFAULT_TIME,
|
||||
DOMAIN,
|
||||
FMT_DATE,
|
||||
FMT_DATETIME,
|
||||
FMT_TIME,
|
||||
SERVICE_RELOAD,
|
||||
)
|
||||
from homeassistant.const import ATTR_ENTITY_ID, ATTR_FRIENDLY_NAME, ATTR_NAME
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID,
|
||||
ATTR_FRIENDLY_NAME,
|
||||
ATTR_NAME,
|
||||
FORMAT_DATE,
|
||||
FORMAT_DATETIME,
|
||||
FORMAT_TIME,
|
||||
)
|
||||
from homeassistant.core import Context, CoreState, HomeAssistant, State
|
||||
from homeassistant.exceptions import Unauthorized
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
@ -136,7 +140,7 @@ async def test_set_datetime(hass: HomeAssistant) -> None:
|
|||
await async_set_date_and_time(hass, entity_id, dt_obj)
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == dt_obj.strftime(FMT_DATETIME)
|
||||
assert state.state == dt_obj.strftime(FORMAT_DATETIME)
|
||||
assert state.attributes["has_time"]
|
||||
assert state.attributes["has_date"]
|
||||
|
||||
|
@ -164,7 +168,7 @@ async def test_set_datetime_2(hass: HomeAssistant) -> None:
|
|||
await async_set_datetime(hass, entity_id, dt_obj)
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == dt_obj.strftime(FMT_DATETIME)
|
||||
assert state.state == dt_obj.strftime(FORMAT_DATETIME)
|
||||
assert state.attributes["has_time"]
|
||||
assert state.attributes["has_date"]
|
||||
|
||||
|
@ -192,7 +196,7 @@ async def test_set_datetime_3(hass: HomeAssistant) -> None:
|
|||
await async_set_timestamp(hass, entity_id, dt_util.as_utc(dt_obj).timestamp())
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == dt_obj.strftime(FMT_DATETIME)
|
||||
assert state.state == dt_obj.strftime(FORMAT_DATETIME)
|
||||
assert state.attributes["has_time"]
|
||||
assert state.attributes["has_date"]
|
||||
|
||||
|
@ -218,7 +222,7 @@ async def test_set_datetime_time(hass: HomeAssistant) -> None:
|
|||
await async_set_date_and_time(hass, entity_id, dt_obj)
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == dt_obj.strftime(FMT_TIME)
|
||||
assert state.state == dt_obj.strftime(FORMAT_TIME)
|
||||
assert state.attributes["has_time"]
|
||||
assert not state.attributes["has_date"]
|
||||
|
||||
|
@ -337,7 +341,7 @@ async def test_restore_state(hass: HomeAssistant) -> None:
|
|||
"test_bogus_data": {
|
||||
"has_time": True,
|
||||
"has_date": True,
|
||||
"initial": initial.strftime(FMT_DATETIME),
|
||||
"initial": initial.strftime(FORMAT_DATETIME),
|
||||
},
|
||||
"test_was_time": {"has_time": False, "has_date": True},
|
||||
"test_was_date": {"has_time": True, "has_date": False},
|
||||
|
@ -347,22 +351,22 @@ async def test_restore_state(hass: HomeAssistant) -> None:
|
|||
|
||||
dt_obj = datetime.datetime(2017, 9, 7, 19, 46)
|
||||
state_time = hass.states.get("input_datetime.test_time")
|
||||
assert state_time.state == dt_obj.strftime(FMT_TIME)
|
||||
assert state_time.state == dt_obj.strftime(FORMAT_TIME)
|
||||
|
||||
state_date = hass.states.get("input_datetime.test_date")
|
||||
assert state_date.state == dt_obj.strftime(FMT_DATE)
|
||||
assert state_date.state == dt_obj.strftime(FORMAT_DATE)
|
||||
|
||||
state_datetime = hass.states.get("input_datetime.test_datetime")
|
||||
assert state_datetime.state == dt_obj.strftime(FMT_DATETIME)
|
||||
assert state_datetime.state == dt_obj.strftime(FORMAT_DATETIME)
|
||||
|
||||
state_bogus = hass.states.get("input_datetime.test_bogus_data")
|
||||
assert state_bogus.state == initial.strftime(FMT_DATETIME)
|
||||
assert state_bogus.state == initial.strftime(FORMAT_DATETIME)
|
||||
|
||||
state_was_time = hass.states.get("input_datetime.test_was_time")
|
||||
assert state_was_time.state == default.strftime(FMT_DATE)
|
||||
assert state_was_time.state == default.strftime(FORMAT_DATE)
|
||||
|
||||
state_was_date = hass.states.get("input_datetime.test_was_date")
|
||||
assert state_was_date.state == default.strftime(FMT_TIME)
|
||||
assert state_was_date.state == default.strftime(FORMAT_TIME)
|
||||
|
||||
|
||||
async def test_default_value(hass: HomeAssistant) -> None:
|
||||
|
@ -381,15 +385,15 @@ async def test_default_value(hass: HomeAssistant) -> None:
|
|||
|
||||
dt_obj = datetime.datetime.combine(datetime.date.today(), DEFAULT_TIME)
|
||||
state_time = hass.states.get("input_datetime.test_time")
|
||||
assert state_time.state == dt_obj.strftime(FMT_TIME)
|
||||
assert state_time.state == dt_obj.strftime(FORMAT_TIME)
|
||||
assert state_time.attributes.get("timestamp") is not None
|
||||
|
||||
state_date = hass.states.get("input_datetime.test_date")
|
||||
assert state_date.state == dt_obj.strftime(FMT_DATE)
|
||||
assert state_date.state == dt_obj.strftime(FORMAT_DATE)
|
||||
assert state_date.attributes.get("timestamp") is not None
|
||||
|
||||
state_datetime = hass.states.get("input_datetime.test_datetime")
|
||||
assert state_datetime.state == dt_obj.strftime(FMT_DATETIME)
|
||||
assert state_datetime.state == dt_obj.strftime(FORMAT_DATETIME)
|
||||
assert state_datetime.attributes.get("timestamp") is not None
|
||||
|
||||
|
||||
|
@ -446,7 +450,7 @@ async def test_reload(
|
|||
assert state_1 is not None
|
||||
assert state_2 is None
|
||||
assert state_3 is not None
|
||||
assert dt_obj.strftime(FMT_DATE) == state_1.state
|
||||
assert dt_obj.strftime(FORMAT_DATE) == state_1.state
|
||||
assert ent_reg.async_get_entity_id(DOMAIN, DOMAIN, "dt1") == f"{DOMAIN}.dt1"
|
||||
assert ent_reg.async_get_entity_id(DOMAIN, DOMAIN, "dt2") is None
|
||||
assert ent_reg.async_get_entity_id(DOMAIN, DOMAIN, "dt3") == f"{DOMAIN}.dt3"
|
||||
|
@ -484,10 +488,10 @@ async def test_reload(
|
|||
assert state_1 is not None
|
||||
assert state_2 is not None
|
||||
assert state_3 is None
|
||||
assert state_1.state == DEFAULT_TIME.strftime(FMT_TIME)
|
||||
assert state_1.state == DEFAULT_TIME.strftime(FORMAT_TIME)
|
||||
assert state_2.state == datetime.datetime.combine(
|
||||
datetime.date.today(), DEFAULT_TIME
|
||||
).strftime(FMT_DATETIME)
|
||||
).strftime(FORMAT_DATETIME)
|
||||
|
||||
assert ent_reg.async_get_entity_id(DOMAIN, DOMAIN, "dt1") == f"{DOMAIN}.dt1"
|
||||
assert ent_reg.async_get_entity_id(DOMAIN, DOMAIN, "dt2") == f"{DOMAIN}.dt2"
|
||||
|
@ -705,7 +709,7 @@ async def test_timestamp(hass: HomeAssistant) -> None:
|
|||
assert (
|
||||
dt_util.as_local(
|
||||
dt_util.utc_from_timestamp(state_with_tz.attributes[ATTR_TIMESTAMP])
|
||||
).strftime(FMT_DATETIME)
|
||||
).strftime(FORMAT_DATETIME)
|
||||
== "2020-12-13 01:00:00"
|
||||
)
|
||||
|
||||
|
@ -719,13 +723,13 @@ async def test_timestamp(hass: HomeAssistant) -> None:
|
|||
assert (
|
||||
dt_util.utc_from_timestamp(
|
||||
state_without_tz.attributes[ATTR_TIMESTAMP]
|
||||
).strftime(FMT_DATETIME)
|
||||
).strftime(FORMAT_DATETIME)
|
||||
== "2020-12-13 18:00:00"
|
||||
)
|
||||
assert (
|
||||
dt_util.as_local(
|
||||
dt_util.utc_from_timestamp(state_without_tz.attributes[ATTR_TIMESTAMP])
|
||||
).strftime(FMT_DATETIME)
|
||||
).strftime(FORMAT_DATETIME)
|
||||
== "2020-12-13 10:00:00"
|
||||
)
|
||||
# Use datetime.datetime.fromtimestamp
|
||||
|
@ -734,7 +738,7 @@ async def test_timestamp(hass: HomeAssistant) -> None:
|
|||
datetime.datetime.fromtimestamp(
|
||||
state_without_tz.attributes[ATTR_TIMESTAMP], datetime.timezone.utc
|
||||
)
|
||||
).strftime(FMT_DATETIME)
|
||||
).strftime(FORMAT_DATETIME)
|
||||
== "2020-12-13 10:00:00"
|
||||
)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue