Fix counter with empty config (#30454)

This commit is contained in:
Phil Bruckner 2020-01-03 17:03:54 -06:00 committed by Paulus Schoutsen
parent b75aa7eb3a
commit d6e230e66b
2 changed files with 24 additions and 8 deletions

View File

@ -32,10 +32,17 @@ SERVICE_RESET = "reset"
SERVICE_CONFIGURE = "configure" SERVICE_CONFIGURE = "configure"
def _none_to_empty_dict(value):
if value is None:
return {}
return value
CONFIG_SCHEMA = vol.Schema( CONFIG_SCHEMA = vol.Schema(
{ {
DOMAIN: cv.schema_with_slug_keys( DOMAIN: cv.schema_with_slug_keys(
vol.Any( vol.All(
_none_to_empty_dict,
{ {
vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_ICON): cv.icon,
vol.Optional( vol.Optional(
@ -51,7 +58,6 @@ CONFIG_SCHEMA = vol.Schema(
vol.Optional(CONF_RESTORE, default=True): cv.boolean, vol.Optional(CONF_RESTORE, default=True): cv.boolean,
vol.Optional(CONF_STEP, default=DEFAULT_STEP): cv.positive_int, vol.Optional(CONF_STEP, default=DEFAULT_STEP): cv.positive_int,
}, },
None,
) )
) )
}, },
@ -70,12 +76,12 @@ async def async_setup(hass, config):
cfg = {} cfg = {}
name = cfg.get(CONF_NAME) name = cfg.get(CONF_NAME)
initial = cfg.get(CONF_INITIAL) initial = cfg[CONF_INITIAL]
restore = cfg.get(CONF_RESTORE) restore = cfg[CONF_RESTORE]
step = cfg.get(CONF_STEP) step = cfg[CONF_STEP]
icon = cfg.get(CONF_ICON) icon = cfg.get(CONF_ICON)
minimum = cfg.get(CONF_MINIMUM) minimum = cfg[CONF_MINIMUM]
maximum = cfg.get(CONF_MAXIMUM) maximum = cfg[CONF_MAXIMUM]
entities.append( entities.append(
Counter(object_id, name, initial, minimum, maximum, restore, step, icon) Counter(object_id, name, initial, minimum, maximum, restore, step, icon)

View File

@ -3,11 +3,15 @@
import logging import logging
from homeassistant.components.counter import ( from homeassistant.components.counter import (
ATTR_INITIAL,
ATTR_STEP,
CONF_ICON, CONF_ICON,
CONF_INITIAL, CONF_INITIAL,
CONF_NAME, CONF_NAME,
CONF_RESTORE, CONF_RESTORE,
CONF_STEP, CONF_STEP,
DEFAULT_INITIAL,
DEFAULT_STEP,
DOMAIN, DOMAIN,
) )
from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_ICON from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_ICON
@ -48,6 +52,7 @@ async def test_config_options(hass):
CONF_RESTORE: False, CONF_RESTORE: False,
CONF_STEP: 5, CONF_STEP: 5,
}, },
"test_3": None,
} }
} }
@ -56,14 +61,16 @@ async def test_config_options(hass):
_LOGGER.debug("ENTITIES: %s", hass.states.async_entity_ids()) _LOGGER.debug("ENTITIES: %s", hass.states.async_entity_ids())
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() await hass.async_block_till_done()
state_1 = hass.states.get("counter.test_1") state_1 = hass.states.get("counter.test_1")
state_2 = hass.states.get("counter.test_2") state_2 = hass.states.get("counter.test_2")
state_3 = hass.states.get("counter.test_3")
assert state_1 is not None assert state_1 is not None
assert state_2 is not None assert state_2 is not None
assert state_3 is not None
assert 0 == int(state_1.state) assert 0 == int(state_1.state)
assert ATTR_ICON not in state_1.attributes assert ATTR_ICON not in state_1.attributes
@ -73,6 +80,9 @@ async def test_config_options(hass):
assert "Hello World" == state_2.attributes.get(ATTR_FRIENDLY_NAME) assert "Hello World" == state_2.attributes.get(ATTR_FRIENDLY_NAME)
assert "mdi:work" == state_2.attributes.get(ATTR_ICON) assert "mdi:work" == state_2.attributes.get(ATTR_ICON)
assert DEFAULT_INITIAL == state_3.attributes.get(ATTR_INITIAL)
assert DEFAULT_STEP == state_3.attributes.get(ATTR_STEP)
async def test_methods(hass): async def test_methods(hass):
"""Test increment, decrement, and reset methods.""" """Test increment, decrement, and reset methods."""