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 import voluptuous as vol
from homeassistant.core import callback
from homeassistant.components.lock import DOMAIN, LockDevice from homeassistant.components.lock import DOMAIN, LockDevice
from homeassistant.components import zwave from homeassistant.components import zwave
from homeassistant.helpers.dispatcher import async_dispatcher_connect
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -133,9 +135,18 @@ CLEAR_USERCODE_SCHEMA = vol.Schema({
async def async_setup_platform(hass, config, async_add_entities, async def async_setup_platform(hass, config, async_add_entities,
discovery_info=None): discovery_info=None):
"""Set up the Z-Wave Lock platform.""" """Old method of setting up Z-Wave locks."""
await zwave.async_setup_platform( pass
hass, config, async_add_entities, discovery_info)
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] network = hass.data[zwave.const.DATA_NETWORK]

View File

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

View File

@ -3,6 +3,7 @@ import asyncio
from unittest.mock import patch, MagicMock from unittest.mock import patch, MagicMock
from homeassistant import config_entries
from homeassistant.components.lock import zwave from homeassistant.components.lock import zwave
from homeassistant.components.zwave import const from homeassistant.components.zwave import const
@ -184,15 +185,27 @@ def test_lock_alarm_level(mock_openzwave):
'Tamper Alarm: Too many keypresses' '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 @asyncio.coroutine
def test_lock_set_usercode_service(hass, mock_openzwave): def test_lock_set_usercode_service(hass, mock_openzwave):
"""Test the zwave lock set_usercode service.""" """Test the zwave lock set_usercode service."""
mock_network = hass.data[zwave.zwave.DATA_NETWORK] = MagicMock() mock_network = hass.data[zwave.zwave.DATA_NETWORK] = MagicMock()
node = MockNode(node_id=12) node = MockNode(node_id=12)
value0 = MockValue(data=' ', node=node, index=0) value0 = MockValue(data=' ', node=node, index=0)
value1 = MockValue(data=' ', node=node, index=1) value1 = MockValue(data=' ', node=node, index=1)
yield from zwave.async_setup_platform(
hass, {}, MagicMock())
node.get_values.return_value = { node.get_values.return_value = {
value0.value_id: value0, value0.value_id: value0,
@ -202,6 +215,10 @@ def test_lock_set_usercode_service(hass, mock_openzwave):
mock_network.nodes = { mock_network.nodes = {
node.node_id: node node.node_id: node
} }
yield from setup_ozw(hass, mock_openzwave)
yield from hass.async_block_till_done()
yield from hass.services.async_call( yield from hass.services.async_call(
zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, { zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, {
const.ATTR_NODE_ID: node.node_id, 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) node = MockNode(node_id=12)
value0 = MockValue(data=None, node=node, index=0) value0 = MockValue(data=None, node=node, index=0)
value1 = MockValue(data='1234', node=node, index=1) value1 = MockValue(data='1234', node=node, index=1)
yield from zwave.async_setup_platform(
hass, {}, MagicMock())
node.get_values.return_value = { node.get_values.return_value = {
value0.value_id: value0, value0.value_id: value0,
value1.value_id: value1, 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: with patch.object(zwave, '_LOGGER') as mock_logger:
mock_network.nodes = {node.node_id: node} mock_network.nodes = {node.node_id: node}
yield from hass.services.async_call( yield from hass.services.async_call(
@ -262,8 +280,6 @@ def test_lock_clear_usercode_service(hass, mock_openzwave):
node = MockNode(node_id=12) node = MockNode(node_id=12)
value0 = MockValue(data=None, node=node, index=0) value0 = MockValue(data=None, node=node, index=0)
value1 = MockValue(data='123', node=node, index=1) value1 = MockValue(data='123', node=node, index=1)
yield from zwave.async_setup_platform(
hass, {}, MagicMock())
node.get_values.return_value = { node.get_values.return_value = {
value0.value_id: value0, value0.value_id: value0,
@ -273,6 +289,10 @@ def test_lock_clear_usercode_service(hass, mock_openzwave):
mock_network.nodes = { mock_network.nodes = {
node.node_id: node node.node_id: node
} }
yield from setup_ozw(hass, mock_openzwave)
yield from hass.async_block_till_done()
yield from hass.services.async_call( yield from hass.services.async_call(
zwave.DOMAIN, zwave.SERVICE_CLEAR_USERCODE, { zwave.DOMAIN, zwave.SERVICE_CLEAR_USERCODE, {
const.ATTR_NODE_ID: node.node_id, const.ATTR_NODE_ID: node.node_id,