8000 Improved Homekit tests by cdce8p · Pull Request #12647 · home-assistant/core · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Improved Homekit tests #12647

8000
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 25, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions homeassistant/components/homekit/__init__.py
Original file line number Diff line number Diff line change
@@ -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/
Expand Down Expand Up @@ -30,7 +30,7 @@


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'")
Expand All @@ -47,14 +47,14 @@ def valid_pin(value):

@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(
Expand All @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/homekit/const.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""Constants used be the homekit component."""
"""Constants used be the HomeKit component."""
MANUFACTURER = 'HomeAssistant'

# Service: AccessoryInfomation
Expand Down
2 changes: 1 addition & 1 deletion tests/components/homekit/test_covers.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def record_event(event):
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):
Expand Down
62 changes: 31 additions & 31 deletions tests/components/homekit/test_homekit.py
BEDD
Original file line number Diff line number Diff line change
@@ -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)

Expand All @@ -27,20 +25,20 @@
}


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."""
Expand All @@ -57,9 +55,9 @@ def test_setup_min(self, mock_homekit, mock_setup_bridge,
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."""
Expand All @@ -82,20 +80,17 @@ def test_validate_pincode(self):
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)
Expand All @@ -106,19 +101,24 @@ def test_homekit_pyhap_interaction(
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)

accessories = homekit.bridge.accessories
self.assertEqual(accessories[2], acc1)
self.assertEqual(accessories[3], acc2)
self.assertEqual(mock_acc_driver.mock_calls,
[call(homekit.bridge, 51826, ip_address, path),
call().start()])

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)
0