Fix timer with empty config (#30463)

pull/30493/head
Phil Bruckner 2020-01-04 16:01:58 -06:00 committed by Paulus Schoutsen
parent 6c89b6c5a2
commit e233dd7cbe
2 changed files with 21 additions and 11 deletions

View File

@ -17,7 +17,7 @@ _LOGGER = logging.getLogger(__name__)
DOMAIN = "timer"
ENTITY_ID_FORMAT = DOMAIN + ".{}"
DEFAULT_DURATION = 0
DEFAULT_DURATION = timedelta(0)
ATTR_DURATION = "duration"
ATTR_REMAINING = "remaining"
CONF_DURATION = "duration"
@ -37,18 +37,25 @@ SERVICE_PAUSE = "pause"
SERVICE_CANCEL = "cancel"
SERVICE_FINISH = "finish"
def _none_to_empty_dict(value):
if value is None:
return {}
return value
CONFIG_SCHEMA = vol.Schema(
{
DOMAIN: cv.schema_with_slug_keys(
vol.Any(
vol.All(
_none_to_empty_dict,
{
vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_ICON): cv.icon,
vol.Optional(
CONF_DURATION, timedelta(DEFAULT_DURATION)
CONF_DURATION, default=DEFAULT_DURATION
): cv.time_period,
},
None,
)
)
},
@ -82,11 +89,7 @@ async def async_setup(hass, config):
)
component.async_register_entity_service(
SERVICE_START,
{
vol.Optional(
ATTR_DURATION, default=timedelta(DEFAULT_DURATION)
): cv.time_period
},
{vol.Optional(ATTR_DURATION, default=DEFAULT_DURATION): cv.time_period},
"async_start",
)
component.async_register_entity_service(SERVICE_PAUSE, {}, "async_pause")
@ -108,7 +111,7 @@ async def _async_process_config(hass, config):
name = cfg.get(CONF_NAME)
icon = cfg.get(CONF_ICON)
duration = cfg.get(CONF_DURATION)
duration = cfg[CONF_DURATION]
entities.append(Timer(hass, object_id, name, icon, duration))

View File

@ -11,6 +11,7 @@ from homeassistant.components.timer import (
CONF_DURATION,
CONF_ICON,
CONF_NAME,
DEFAULT_DURATION,
DOMAIN,
EVENT_TIMER_CANCELLED,
EVENT_TIMER_FINISHED,
@ -63,20 +64,23 @@ async def test_config_options(hass):
CONF_ICON: "mdi:work",
CONF_DURATION: 10,
},
"test_3": None,
}
}
assert await async_setup_component(hass, "timer", config)
await hass.async_block_till_done()
assert count_start + 2 == len(hass.states.async_entity_ids())
assert count_start + 3 == len(hass.states.async_entity_ids())
await hass.async_block_till_done()
state_1 = hass.states.get("timer.test_1")
state_2 = hass.states.get("timer.test_2")
state_3 = hass.states.get("timer.test_3")
assert state_1 is not None
assert state_2 is not None
assert state_3 is not None
assert STATUS_IDLE == state_1.state
assert ATTR_ICON not in state_1.attributes
@ -87,6 +91,9 @@ async def test_config_options(hass):
assert "mdi:work" == state_2.attributes.get(ATTR_ICON)
assert "0:00:10" == state_2.attributes.get(ATTR_DURATION)
assert STATUS_IDLE == state_3.state
assert str(DEFAULT_DURATION) == state_3.attributes.get(CONF_DURATION)
async def test_methods_and_events(hass):
"""Test methods and events."""