Z-Wave Lock Config Entry Support (#18209)

* Config Entry setup for zwave lock

* fix merge conflict

* lint

* Update other tests

* Fix tests

* Remove debug line and unused import
This commit is contained in:
Charles Garwood 2018-11-20 08:59:34 -05:00 committed by Paulus Schoutsen
parent 3838be4cb8
commit e87ecbd500
3 changed files with 41 additions and 10 deletions

View File

@ -8,8 +8,10 @@ import logging
import voluptuous as vol
from homeassistant.core import callback
from homeassistant.components.lock import DOMAIN, LockDevice
from homeassistant.components import zwave
from homeassistant.helpers.dispatcher import async_dispatcher_connect
import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__)
@ -133,9 +135,18 @@ CLEAR_USERCODE_SCHEMA = vol.Schema({
async def async_setup_platform(hass, config, async_add_entities,
discovery_info=None):
"""Set up the Z-Wave Lock platform."""
await zwave.async_setup_platform(
hass, config, async_add_entities, discovery_info)
"""Old method of setting up Z-Wave locks."""
pass
async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up Z-Wave Lock from Config Entry."""
@callback
def async_add_lock(lock):
"""Add Z-Wave Lock."""
async_add_entities([lock])
async_dispatcher_connect(hass, 'zwave_new_lock', async_add_lock)
network = hass.data[zwave.const.DATA_NETWORK]

View File

@ -67,7 +67,7 @@ DEFAULT_CONF_REFRESH_VALUE = False
DEFAULT_CONF_REFRESH_DELAY = 5
SUPPORTED_PLATFORMS = ['binary_sensor', 'climate', 'cover', 'fan',
'light', 'sensor', 'switch']
'lock', 'light', 'sensor', 'switch']
RENAME_NODE_SCHEMA = vol.Schema({
vol.Required(const.ATTR_NODE_ID): vol.Coerce(int),

View File

@ -3,6 +3,7 @@ import asyncio
from unittest.mock import patch, MagicMock
from homeassistant import config_entries
from homeassistant.components.lock import zwave
from homeassistant.components.zwave import const
@ -184,15 +185,27 @@ def test_lock_alarm_level(mock_openzwave):
'Tamper Alarm: Too many keypresses'
@asyncio.coroutine
def setup_ozw(hass, mock_openzwave):
"""Set up the mock ZWave config entry."""
hass.config.components.add('zwave')
config_entry = config_entries.ConfigEntry(1, 'zwave', 'Mock Title', {
'usb_path': 'mock-path',
'network_key': 'mock-key'
}, 'test', config_entries.CONN_CLASS_LOCAL_PUSH)
yield from hass.config_entries.async_forward_entry_setup(config_entry,
'lock')
yield from hass.async_block_till_done()
@asyncio.coroutine
def test_lock_set_usercode_service(hass, mock_openzwave):
"""Test the zwave lock set_usercode service."""
mock_network = hass.data[zwave.zwave.DATA_NETWORK] = MagicMock()
node = MockNode(node_id=12)
value0 = MockValue(data=' ', node=node, index=0)
value1 = MockValue(data=' ', node=node, index=1)
yield from zwave.async_setup_platform(
hass, {}, MagicMock())
node.get_values.return_value = {
value0.value_id: value0,
@ -202,6 +215,10 @@ def test_lock_set_usercode_service(hass, mock_openzwave):
mock_network.nodes = {
node.node_id: node
}
yield from setup_ozw(hass, mock_openzwave)
yield from hass.async_block_till_done()
yield from hass.services.async_call(
zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, {
const.ATTR_NODE_ID: node.node_id,
@ -233,14 +250,15 @@ def test_lock_get_usercode_service(hass, mock_openzwave):
node = MockNode(node_id=12)
value0 = MockValue(data=None, node=node, index=0)
value1 = MockValue(data='1234', node=node, index=1)
yield from zwave.async_setup_platform(
hass, {}, MagicMock())
node.get_values.return_value = {
value0.value_id: value0,
value1.value_id: value1,
}
yield from setup_ozw(hass, mock_openzwave)
yield from hass.async_block_till_done()
with patch.object(zwave, '_LOGGER') as mock_logger:
mock_network.nodes = {node.node_id: node}
yield from hass.services.async_call(
@ -262,8 +280,6 @@ def test_lock_clear_usercode_service(hass, mock_openzwave):
node = MockNode(node_id=12)
value0 = MockValue(data=None, node=node, index=0)
value1 = MockValue(data='123', node=node, index=1)
yield from zwave.async_setup_platform(
hass, {}, MagicMock())
node.get_values.return_value = {
value0.value_id: value0,
@ -273,6 +289,10 @@ def test_lock_clear_usercode_service(hass, mock_openzwave):
mock_network.nodes = {
node.node_id: node
}
yield from setup_ozw(hass, mock_openzwave)
yield from hass.async_block_till_done()
yield from hass.services.async_call(
zwave.DOMAIN, zwave.SERVICE_CLEAR_USERCODE, {
const.ATTR_NODE_ID: node.node_id,