mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Improved Homekit tests (#12647)
* Spelling and typos * Updated 'test_homekit_pyhap_interaction' * Patch ip_address
This commit is contained in:
parent
da832dbda2
commit
eacfbc048a
@ -1,4 +1,4 @@
|
||||
"""Support for Apple Homekit.
|
||||
"""Support for Apple HomeKit.
|
||||
|
||||
For more details about this platform, please refer to the documentation at
|
||||
https://home-assistant.io/components/homekit/
|
||||
@ -30,7 +30,7 @@ HOMEKIT_FILE = '.homekit.state'
|
||||
|
||||
|
||||
def valid_pin(value):
|
||||
"""Validate pincode value."""
|
||||
"""Validate pin code value."""
|
||||
match = _RE_VALID_PINCODE.findall(value.strip())
|
||||
if match == []:
|
||||
raise vol.Invalid("Pin must be in the format: '123-45-678'")
|
||||
@ -47,14 +47,14 @@ CONFIG_SCHEMA = vol.Schema({
|
||||
|
||||
@asyncio.coroutine
|
||||
def async_setup(hass, config):
|
||||
"""Setup the homekit component."""
|
||||
_LOGGER.debug("Begin setup homekit")
|
||||
"""Setup the HomeKit component."""
|
||||
_LOGGER.debug("Begin setup HomeKit")
|
||||
|
||||
conf = config[DOMAIN]
|
||||
port = conf.get(CONF_PORT)
|
||||
pin = str.encode(conf.get(CONF_PIN_CODE))
|
||||
|
||||
homekit = Homekit(hass, port)
|
||||
homekit = HomeKit(hass, port)
|
||||
homekit.setup_bridge(pin)
|
||||
|
||||
hass.bus.async_listen_once(
|
||||
@ -63,7 +63,7 @@ def async_setup(hass, config):
|
||||
|
||||
|
||||
def import_types():
|
||||
"""Import all types from files in the homekit dir."""
|
||||
"""Import all types from files in the HomeKit dir."""
|
||||
_LOGGER.debug("Import type files.")
|
||||
# pylint: disable=unused-variable
|
||||
from .covers import Window # noqa F401
|
||||
@ -90,11 +90,11 @@ def get_accessory(hass, state):
|
||||
return None
|
||||
|
||||
|
||||
class Homekit():
|
||||
"""Class to handle all actions between homekit and Home Assistant."""
|
||||
class HomeKit():
|
||||
"""Class to handle all actions between HomeKit and Home Assistant."""
|
||||
|
||||
def __init__(self, hass, port):
|
||||
"""Initialize a homekit object."""
|
||||
"""Initialize a HomeKit object."""
|
||||
self._hass = hass
|
||||
self._port = port
|
||||
self.bridge = None
|
||||
|
@ -1,4 +1,4 @@
|
||||
"""Constants used be the homekit component."""
|
||||
"""Constants used be the HomeKit component."""
|
||||
MANUFACTURER = 'HomeAssistant'
|
||||
|
||||
# Service: AccessoryInfomation
|
||||
|
@ -28,7 +28,7 @@ class TestHomekitSensors(unittest.TestCase):
|
||||
self.hass.bus.listen(EVENT_CALL_SERVICE, record_event)
|
||||
|
||||
def tearDown(self):
|
||||
"""Stop down everthing that was started."""
|
||||
"""Stop down everything that was started."""
|
||||
self.hass.stop()
|
||||
|
||||
def test_window_set_cover_position(self):
|
||||
|
@ -1,16 +1,14 @@
|
||||
"""Tests for the homekit component."""
|
||||
"""Tests for the HomeKit component."""
|
||||
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import call, patch
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant import setup
|
||||
from homeassistant.core import Event
|
||||
from homeassistant.components.homekit import (
|
||||
CONF_PIN_CODE, BRIDGE_NAME, Homekit, valid_pin)
|
||||
from homeassistant.components.homekit.covers import Window
|
||||
from homeassistant.components.homekit.sensors import TemperatureSensor
|
||||
CONF_PIN_CODE, BRIDGE_NAME, HOMEKIT_FILE, HomeKit, valid_pin)
|
||||
from homeassistant.const import (
|
||||
CONF_PORT, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP)
|
||||
|
||||
@ -27,20 +25,20 @@ CONFIG = {
|
||||
}
|
||||
|
||||
|
||||
class TestHomekit(unittest.TestCase):
|
||||
"""Test the Multicover component."""
|
||||
class TestHomeKit(unittest.TestCase):
|
||||
"""Test setup of HomeKit component and HomeKit class."""
|
||||
|
||||
def setUp(self):
|
||||
"""Setup things to be run when tests are started."""
|
||||
self.hass = get_test_home_assistant()
|
||||
|
||||
def tearDown(self):
|
||||
"""Stop down everthing that was started."""
|
||||
"""Stop down everything that was started."""
|
||||
self.hass.stop()
|
||||
|
||||
@patch(HOMEKIT_PATH + '.Homekit.start_driver')
|
||||
@patch(HOMEKIT_PATH + '.Homekit.setup_bridge')
|
||||
@patch(HOMEKIT_PATH + '.Homekit.__init__')
|
||||
@patch(HOMEKIT_PATH + '.HomeKit.start_driver')
|
||||
@patch(HOMEKIT_PATH + '.HomeKit.setup_bridge')
|
||||
@patch(HOMEKIT_PATH + '.HomeKit.__init__')
|
||||
def test_setup_min(self, mock_homekit, mock_setup_bridge,
|
||||
mock_start_driver):
|
||||
"""Test async_setup with minimal config option."""
|
||||
@ -57,9 +55,9 @@ class TestHomekit(unittest.TestCase):
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(mock_start_driver.call_count, 1)
|
||||
|
||||
@patch(HOMEKIT_PATH + '.Homekit.start_driver')
|
||||
@patch(HOMEKIT_PATH + '.Homekit.setup_bridge')
|
||||
@patch(HOMEKIT_PATH + '.Homekit.__init__')
|
||||
@patch(HOMEKIT_PATH + '.HomeKit.start_driver')
|
||||
@patch(HOMEKIT_PATH + '.HomeKit.setup_bridge')
|
||||
@patch(HOMEKIT_PATH + '.HomeKit.__init__')
|
||||
def test_setup_parameters(self, mock_homekit, mock_setup_bridge,
|
||||
mock_start_driver):
|
||||
"""Test async_setup with full config option."""
|
||||
@ -82,20 +80,17 @@ class TestHomekit(unittest.TestCase):
|
||||
for value in ('123-45-678', '234-56-789'):
|
||||
self.assertTrue(schema(value))
|
||||
|
||||
@patch('pyhap.accessory_driver.AccessoryDriver.persist')
|
||||
@patch('pyhap.accessory_driver.AccessoryDriver.stop')
|
||||
@patch('pyhap.accessory_driver.AccessoryDriver.start')
|
||||
@patch('pyhap.accessory_driver.AccessoryDriver')
|
||||
@patch('pyhap.accessory.Bridge.add_accessory')
|
||||
@patch(HOMEKIT_PATH + '.import_types')
|
||||
@patch(HOMEKIT_PATH + '.get_accessory')
|
||||
def test_homekit_pyhap_interaction(
|
||||
self, mock_get_accessory, mock_import_types,
|
||||
mock_driver_start, mock_driver_stop, mock_file_persist):
|
||||
"""Test the interaction between the homekit class and pyhap."""
|
||||
acc1 = TemperatureSensor(self.hass, 'sensor.temp', 'Temperature')
|
||||
acc2 = Window(self.hass, 'cover.hall_window', 'Cover')
|
||||
mock_get_accessory.side_effect = [acc1, acc2]
|
||||
mock_add_accessory, mock_acc_driver):
|
||||
"""Test interaction between the HomeKit class and pyhap."""
|
||||
mock_get_accessory.side_effect = ['TemperatureSensor', 'Window']
|
||||
|
||||
homekit = Homekit(self.hass, 51826)
|
||||
homekit = HomeKit(self.hass, 51826)
|
||||
homekit.setup_bridge(b'123-45-678')
|
||||
|
||||
self.assertEqual(homekit.bridge.display_name, BRIDGE_NAME)
|
||||
@ -106,19 +101,24 @@ class TestHomekit(unittest.TestCase):
|
||||
self.hass.start()
|
||||
self.hass.block_till_done()
|
||||
|
||||
homekit.start_driver(Event(EVENT_HOMEASSISTANT_START))
|
||||
with patch('homeassistant.util.get_local_ip',
|
||||
return_value='127.0.0.1'):
|
||||
homekit.start_driver(Event(EVENT_HOMEASSISTANT_START))
|
||||
|
||||
ip_address = '127.0.0.1'
|
||||
path = self.hass.config.path(HOMEKIT_FILE)
|
||||
|
||||
self.assertEqual(mock_get_accessory.call_count, 2)
|
||||
self.assertEqual(mock_import_types.call_count, 1)
|
||||
self.assertEqual(mock_driver_start.call_count, 1)
|
||||
self.assertEqual(mock_acc_driver.mock_calls,
|
||||
[call(homekit.bridge, 51826, ip_address, path),
|
||||
call().start()])
|
||||
|
||||
accessories = homekit.bridge.accessories
|
||||
self.assertEqual(accessories[2], acc1)
|
||||
self.assertEqual(accessories[3], acc2)
|
||||
|
||||
mock_driver_stop.assert_not_called()
|
||||
self.assertEqual(mock_add_accessory.mock_calls,
|
||||
[call('TemperatureSensor'), call('Window')])
|
||||
|
||||
self.hass.bus.fire(EVENT_HOMEASSISTANT_STOP)
|
||||
self.hass.block_till_done()
|
||||
|
||||
self.assertEqual(mock_driver_stop.call_count, 1)
|
||||
self.assertEqual(mock_acc_driver.mock_calls[2], call().stop())
|
||||
self.assertEqual(len(mock_acc_driver.mock_calls), 3)
|
||||
|
Loading…
x
Reference in New Issue
Block a user