Fix PEP257 issues

This commit is contained in:
Fabian Affolter 2016-03-09 10:25:50 +01:00
parent d6eab03a61
commit 9838697d2b
120 changed files with 1447 additions and 1297 deletions

View File

@ -1,9 +1,4 @@
""" """Test the initialization."""
tests.__init__
~~~~~~~~~~~~~~
Tests initialization.
"""
import betamax import betamax
from homeassistant import util from homeassistant import util

View File

@ -1,9 +1,4 @@
""" """Test the helper method for writing tests."""
tests.common
~~~~~~~~~~~~
Helper method for writing tests.
"""
import os import os
from datetime import timedelta from datetime import timedelta
from unittest import mock from unittest import mock
@ -20,12 +15,12 @@ _TEST_INSTANCE_PORT = SERVER_PORT
def get_test_config_dir(): def get_test_config_dir():
""" Returns a path to a test config dir. """ """Return a path to a test config dir."""
return os.path.join(os.path.dirname(__file__), "config") return os.path.join(os.path.dirname(__file__), "config")
def get_test_home_assistant(num_threads=None): def get_test_home_assistant(num_threads=None):
""" Returns a Home Assistant object pointing at test config dir. """ """Return a Home Assistant object pointing at test config dir."""
if num_threads: if num_threads:
orig_num_threads = ha.MIN_WORKER_THREAD orig_num_threads = ha.MIN_WORKER_THREAD
ha.MIN_WORKER_THREAD = num_threads ha.MIN_WORKER_THREAD = num_threads
@ -58,9 +53,9 @@ def get_test_instance_port():
def mock_service(hass, domain, service): def mock_service(hass, domain, service):
""" """Setup a fake service.
Sets up a fake service.
Returns a list that logs all calls to fake service. Return a list that logs all calls to fake service.
""" """
calls = [] calls = []
@ -71,6 +66,7 @@ def mock_service(hass, domain, service):
def fire_mqtt_message(hass, topic, payload, qos=0): def fire_mqtt_message(hass, topic, payload, qos=0):
"""Fire the MQTT message."""
hass.bus.fire(mqtt.EVENT_MQTT_MESSAGE_RECEIVED, { hass.bus.fire(mqtt.EVENT_MQTT_MESSAGE_RECEIVED, {
mqtt.ATTR_TOPIC: topic, mqtt.ATTR_TOPIC: topic,
mqtt.ATTR_PAYLOAD: payload, mqtt.ATTR_PAYLOAD: payload,
@ -79,10 +75,12 @@ def fire_mqtt_message(hass, topic, payload, qos=0):
def fire_time_changed(hass, time): def fire_time_changed(hass, time):
"""Fire a time changes event."""
hass.bus.fire(EVENT_TIME_CHANGED, {'now': time}) hass.bus.fire(EVENT_TIME_CHANGED, {'now': time})
def fire_service_discovered(hass, service, info): def fire_service_discovered(hass, service, info):
"""Fire the MQTT message."""
hass.bus.fire(EVENT_PLATFORM_DISCOVERED, { hass.bus.fire(EVENT_PLATFORM_DISCOVERED, {
ATTR_SERVICE: service, ATTR_SERVICE: service,
ATTR_DISCOVERED: info ATTR_DISCOVERED: info
@ -90,14 +88,14 @@ def fire_service_discovered(hass, service, info):
def ensure_sun_risen(hass): def ensure_sun_risen(hass):
""" Trigger sun to rise if below horizon. """ """Trigger sun to rise if below horizon."""
if sun.is_on(hass): if sun.is_on(hass):
return return
fire_time_changed(hass, sun.next_rising_utc(hass) + timedelta(seconds=10)) fire_time_changed(hass, sun.next_rising_utc(hass) + timedelta(seconds=10))
def ensure_sun_set(hass): def ensure_sun_set(hass):
""" Trigger sun to set if above horizon. """ """Trigger sun to set if above horizon."""
if not sun.is_on(hass): if not sun.is_on(hass):
return return
fire_time_changed(hass, sun.next_setting_utc(hass) + timedelta(seconds=10)) fire_time_changed(hass, sun.next_setting_utc(hass) + timedelta(seconds=10))
@ -116,12 +114,14 @@ def mock_state_change_event(hass, new_state, old_state=None):
def mock_http_component(hass): def mock_http_component(hass):
"""Mock the HTTP component."""
hass.http = MockHTTP() hass.http = MockHTTP()
hass.config.components.append('http') hass.config.components.append('http')
@mock.patch('homeassistant.components.mqtt.MQTT') @mock.patch('homeassistant.components.mqtt.MQTT')
def mock_mqtt_component(hass, mock_mqtt): def mock_mqtt_component(hass, mock_mqtt):
"""Mock the MQTT component."""
mqtt.setup(hass, { mqtt.setup(hass, {
mqtt.DOMAIN: { mqtt.DOMAIN: {
mqtt.CONF_BROKER: 'mock-broker', mqtt.CONF_BROKER: 'mock-broker',
@ -132,8 +132,7 @@ def mock_mqtt_component(hass, mock_mqtt):
class MockHTTP(object): class MockHTTP(object):
""" Mocks the HTTP module. """ """Mock the HTTP module."""
def register_path(self, method, url, callback, require_auth=True): def register_path(self, method, url, callback, require_auth=True):
pass pass
@ -152,19 +151,21 @@ class MockModule(object):
class MockPlatform(object): class MockPlatform(object):
""" Provides a fake platform. """ """Provide a fake platform."""
def __init__(self, setup_platform=None, dependencies=[]): def __init__(self, setup_platform=None, dependencies=[]):
"""Initialize the platform."""
self.DEPENDENCIES = dependencies self.DEPENDENCIES = dependencies
self._setup_platform = setup_platform self._setup_platform = setup_platform
def setup_platform(self, hass, config, add_devices, discovery_info=None): def setup_platform(self, hass, config, add_devices, discovery_info=None):
"""Setup the platform."""
if self._setup_platform is not None: if self._setup_platform is not None:
self._setup_platform(hass, config, add_devices, discovery_info) self._setup_platform(hass, config, add_devices, discovery_info)
class MockToggleDevice(ToggleEntity): class MockToggleDevice(ToggleEntity):
""" Provides a mock toggle device. """ """Provide a mock toggle device."""
def __init__(self, name, state): def __init__(self, name, state):
self._name = name or DEVICE_DEFAULT_NAME self._name = name or DEVICE_DEFAULT_NAME
self._state = state self._state = state
@ -172,33 +173,34 @@ class MockToggleDevice(ToggleEntity):
@property @property
def name(self): def name(self):
""" Returns the name of the device if any. """ """Return the name of the device if any."""
self.calls.append(('name', {})) self.calls.append(('name', {}))
return self._name return self._name
@property @property
def state(self): def state(self):
""" Returns the name of the device if any. """ """Returns the name of the device if any."""
self.calls.append(('state', {})) self.calls.append(('state', {}))
return self._state return self._state
@property @property
def is_on(self): def is_on(self):
""" True if device is on. """ """Return true if device is on."""
self.calls.append(('is_on', {})) self.calls.append(('is_on', {}))
return self._state == STATE_ON return self._state == STATE_ON
def turn_on(self, **kwargs): def turn_on(self, **kwargs):
""" Turn the device on. """ """Turn the device on."""
self.calls.append(('turn_on', kwargs)) self.calls.append(('turn_on', kwargs))
self._state = STATE_ON self._state = STATE_ON
def turn_off(self, **kwargs): def turn_off(self, **kwargs):
""" Turn the device off. """ """Turn the device off."""
self.calls.append(('turn_off', kwargs)) self.calls.append(('turn_off', kwargs))
self._state = STATE_OFF self._state = STATE_OFF
def last_call(self, method=None): def last_call(self, method=None):
"""Return the last call."""
if not self.calls: if not self.calls:
return None return None
elif method is None: elif method is None:

View File

@ -0,0 +1 @@
"""The tests for components."""

View File

@ -0,0 +1 @@
"""The tests for Alarm control panel platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for the manual Alarm Control Panel component."""
tests.components.alarm_control_panel.test_manual
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests manual alarm control panel component.
"""
from datetime import timedelta from datetime import timedelta
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -20,17 +15,18 @@ CODE = 'HELLO_CODE'
class TestAlarmControlPanelManual(unittest.TestCase): class TestAlarmControlPanelManual(unittest.TestCase):
""" Test the manual alarm module. """ """Test the manual alarm module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_arm_home_no_pending(self): def test_arm_home_no_pending(self):
""" Test arm home method. """ """Test arm home method."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -51,7 +47,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_arm_home_with_pending(self): def test_arm_home_with_pending(self):
""" Test arm home method. """ """Test arm home method."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -81,7 +77,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_arm_home_with_invalid_code(self): def test_arm_home_with_invalid_code(self):
""" Attempt to arm home without a valid code. """ """Attempt to arm home without a valid code."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -102,7 +98,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_arm_away_no_pending(self): def test_arm_away_no_pending(self):
""" Test arm home method. """ """Test arm home method."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -123,7 +119,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_arm_away_with_pending(self): def test_arm_away_with_pending(self):
""" Test arm home method. """ """Test arm home method."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -153,7 +149,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_arm_away_with_invalid_code(self): def test_arm_away_with_invalid_code(self):
""" Attempt to arm away without a valid code. """ """Attempt to arm away without a valid code."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -174,7 +170,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_trigger_no_pending(self): def test_trigger_no_pending(self):
""" Test arm home method. """ """Test arm home method."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -194,7 +190,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_trigger_with_pending(self): def test_trigger_with_pending(self):
""" Test arm home method. """ """Test arm home method."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -233,6 +229,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_disarm_while_pending_trigger(self): def test_disarm_while_pending_trigger(self):
"""Test disarming while pending state."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',
@ -267,6 +264,7 @@ class TestAlarmControlPanelManual(unittest.TestCase):
self.hass.states.get(entity_id).state) self.hass.states.get(entity_id).state)
def test_disarm_during_trigger_with_invalid_code(self): def test_disarm_during_trigger_with_invalid_code(self):
"""Test disarming while code is invalid."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'manual', 'platform': 'manual',

View File

@ -1,9 +1,4 @@
""" """The tests the MQTT alarm control panel component."""
tests.components.alarm_control_panel.test_manual
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests manual alarm control panel component.
"""
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -19,18 +14,20 @@ CODE = 'HELLO_CODE'
class TestAlarmControlPanelMQTT(unittest.TestCase): class TestAlarmControlPanelMQTT(unittest.TestCase):
""" Test the manual alarm module. """ """Test the manual alarm module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.mock_publish = mock_mqtt_component(self.hass) self.mock_publish = mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop down stuff we started."""
self.hass.stop() self.hass.stop()
@patch('homeassistant.components.alarm_control_panel.mqtt._LOGGER.error') @patch('homeassistant.components.alarm_control_panel.mqtt._LOGGER.error')
def test_fail_setup_without_state_topic(self, mock_error): def test_fail_setup_without_state_topic(self, mock_error):
"""Test for failing with no state topic."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -41,6 +38,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
@patch('homeassistant.components.alarm_control_panel.mqtt._LOGGER.error') @patch('homeassistant.components.alarm_control_panel.mqtt._LOGGER.error')
def test_fail_setup_without_command_topic(self, mock_error): def test_fail_setup_without_command_topic(self, mock_error):
"""Test failing with no command topic."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -50,7 +48,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
self.assertEqual(1, mock_error.call_count) self.assertEqual(1, mock_error.call_count)
def test_update_state_via_state_topic(self): def test_update_state_via_state_topic(self):
""" Test arm home method. """ """Test updating with via state topic."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -72,7 +70,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
self.assertEqual(state, self.hass.states.get(entity_id).state) self.assertEqual(state, self.hass.states.get(entity_id).state)
def test_ignore_update_state_if_unknown_via_state_topic(self): def test_ignore_update_state_if_unknown_via_state_topic(self):
""" Test arm home method. """ """Test ignoring updates via state topic."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -91,6 +89,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
self.assertEqual(STATE_UNKNOWN, self.hass.states.get(entity_id).state) self.assertEqual(STATE_UNKNOWN, self.hass.states.get(entity_id).state)
def test_arm_home_publishes_mqtt(self): def test_arm_home_publishes_mqtt(self):
"""Test publishing of MQTT messages while armed."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -105,6 +104,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
self.mock_publish.mock_calls[-1][1]) self.mock_publish.mock_calls[-1][1])
def test_arm_home_not_publishes_mqtt_with_invalid_code(self): def test_arm_home_not_publishes_mqtt_with_invalid_code(self):
"""Test not publishing of MQTT messages with invalid code."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -120,6 +120,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
self.assertEqual(call_count, self.mock_publish.call_count) self.assertEqual(call_count, self.mock_publish.call_count)
def test_arm_away_publishes_mqtt(self): def test_arm_away_publishes_mqtt(self):
"""Test publishing of MQTT messages while armed."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -134,6 +135,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
self.mock_publish.mock_calls[-1][1]) self.mock_publish.mock_calls[-1][1])
def test_arm_away_not_publishes_mqtt_with_invalid_code(self): def test_arm_away_not_publishes_mqtt_with_invalid_code(self):
"""Test not publishing of MQTT messages with invalid code."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -149,6 +151,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
self.assertEqual(call_count, self.mock_publish.call_count) self.assertEqual(call_count, self.mock_publish.call_count)
def test_disarm_publishes_mqtt(self): def test_disarm_publishes_mqtt(self):
"""Test publishing of MQTT messages while disarmed."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -163,6 +166,7 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
self.mock_publish.mock_calls[-1][1]) self.mock_publish.mock_calls[-1][1])
def test_disarm_not_publishes_mqtt_with_invalid_code(self): def test_disarm_not_publishes_mqtt_with_invalid_code(self):
"""Test not publishing of MQTT messages with invalid code."""
self.assertTrue(alarm_control_panel.setup(self.hass, { self.assertTrue(alarm_control_panel.setup(self.hass, {
'alarm_control_panel': { 'alarm_control_panel': {
'platform': 'mqtt', 'platform': 'mqtt',

View File

@ -0,0 +1 @@
"""The tests for Automation."""

View File

@ -1,9 +1,4 @@
""" """The tests for the Event automation."""
tests.components.automation.test_event
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests event automation.
"""
import unittest import unittest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
@ -12,22 +7,25 @@ from tests.common import get_test_home_assistant
class TestAutomationEvent(unittest.TestCase): class TestAutomationEvent(unittest.TestCase):
""" Test the event automation. """ """Test the event automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.calls = [] self.calls = []
def record_call(service): def record_call(service):
"""Helper for recording the call."""
self.calls.append(service) self.calls.append(service)
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """"Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_old_config_if_fires_on_event(self): def test_old_config_if_fires_on_event(self):
"""."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'event', 'platform': 'event',
@ -41,6 +39,7 @@ class TestAutomationEvent(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_fires_on_event_with_data(self): def test_old_config_if_fires_on_event_with_data(self):
"""Test old configuration ."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'event', 'platform': 'event',
@ -55,6 +54,7 @@ class TestAutomationEvent(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_not_fires_if_event_data_not_matches(self): def test_old_config_if_not_fires_if_event_data_not_matches(self):
"""test old configuration."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'event', 'platform': 'event',
@ -69,6 +69,7 @@ class TestAutomationEvent(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_event(self): def test_if_fires_on_event(self):
"""Test the firing of events."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -86,6 +87,7 @@ class TestAutomationEvent(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_event_with_data(self): def test_if_fires_on_event_with_data(self):
"""Test the firing of events with data."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -105,6 +107,7 @@ class TestAutomationEvent(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_if_event_data_not_matches(self): def test_if_not_fires_if_event_data_not_matches(self):
"""Test firing of event if no match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {

View File

@ -1,9 +1,4 @@
""" """The tests for the automation component."""
tests.components.automation.test_init
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests automation component.
"""
import unittest import unittest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
@ -13,9 +8,10 @@ from tests.common import get_test_home_assistant
class TestAutomation(unittest.TestCase): class TestAutomation(unittest.TestCase):
""" Test the event automation. """ """Test the event automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.calls = [] self.calls = []
@ -25,10 +21,11 @@ class TestAutomation(unittest.TestCase):
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_old_config_service_data_not_a_dict(self): def test_old_config_service_data_not_a_dict(self):
"""Test old configuration service data."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'event', 'platform': 'event',
@ -43,6 +40,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_service_specify_data(self): def test_old_config_service_specify_data(self):
"""Test old configuration service data."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'event', 'platform': 'event',
@ -58,6 +56,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual('data', self.calls[0].data['some']) self.assertEqual('data', self.calls[0].data['some'])
def test_old_config_service_specify_entity_id(self): def test_old_config_service_specify_entity_id(self):
"""Test old configuration service data."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'event', 'platform': 'event',
@ -74,6 +73,7 @@ class TestAutomation(unittest.TestCase):
self.calls[0].data.get(ATTR_ENTITY_ID)) self.calls[0].data.get(ATTR_ENTITY_ID))
def test_old_config_service_specify_entity_id_list(self): def test_old_config_service_specify_entity_id_list(self):
"""Test old configuration service data."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'event', 'platform': 'event',
@ -90,6 +90,7 @@ class TestAutomation(unittest.TestCase):
self.calls[0].data.get(ATTR_ENTITY_ID)) self.calls[0].data.get(ATTR_ENTITY_ID))
def test_service_data_not_a_dict(self): def test_service_data_not_a_dict(self):
"""Test service data not dict."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -108,6 +109,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_service_specify_data(self): def test_service_specify_data(self):
"""Test service data."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -127,6 +129,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual('data', self.calls[0].data['some']) self.assertEqual('data', self.calls[0].data['some'])
def test_service_specify_entity_id(self): def test_service_specify_entity_id(self):
"""Test service data."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -147,6 +150,7 @@ class TestAutomation(unittest.TestCase):
self.calls[0].data.get(ATTR_ENTITY_ID)) self.calls[0].data.get(ATTR_ENTITY_ID))
def test_service_specify_entity_id_list(self): def test_service_specify_entity_id_list(self):
"""Test service data."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -167,6 +171,7 @@ class TestAutomation(unittest.TestCase):
self.calls[0].data.get(ATTR_ENTITY_ID)) self.calls[0].data.get(ATTR_ENTITY_ID))
def test_two_triggers(self): def test_two_triggers(self):
"""Test triggers."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': [ 'trigger': [
@ -193,6 +198,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual(2, len(self.calls)) self.assertEqual(2, len(self.calls))
def test_two_conditions_with_and(self): def test_two_conditions_with_and(self):
"""Test two and conditions."""
entity_id = 'test.entity' entity_id = 'test.entity'
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
@ -236,6 +242,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_two_conditions_with_or(self): def test_two_conditions_with_or(self):
"""Test two or conditions."""
entity_id = 'test.entity' entity_id = 'test.entity'
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
@ -280,7 +287,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual(2, len(self.calls)) self.assertEqual(2, len(self.calls))
def test_using_trigger_as_condition(self): def test_using_trigger_as_condition(self):
""" """ """Test triggers as condition."""
entity_id = 'test.entity' entity_id = 'test.entity'
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
@ -316,7 +323,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_using_trigger_as_condition_with_invalid_condition(self): def test_using_trigger_as_condition_with_invalid_condition(self):
""" Event is not a valid condition. Will it still work? """ """Event is not a valid condition."""
entity_id = 'test.entity' entity_id = 'test.entity'
self.hass.states.set(entity_id, 100) self.hass.states.set(entity_id, 100)
automation.setup(self.hass, { automation.setup(self.hass, {
@ -344,7 +351,7 @@ class TestAutomation(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_automation_list_setting(self): def test_automation_list_setting(self):
""" Event is not a valid condition. Will it still work? """ """Event is not a valid condition."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: [{ automation.DOMAIN: [{
'trigger': { 'trigger': {

View File

@ -1,9 +1,4 @@
""" """The tests for the MQTT automation."""
tests.components.automation.test_mqtt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests mqtt automation.
"""
import unittest import unittest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
@ -12,9 +7,10 @@ from tests.common import (
class TestAutomationMQTT(unittest.TestCase): class TestAutomationMQTT(unittest.TestCase):
""" Test the event automation. """ """Test the event automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
mock_mqtt_component(self.hass) mock_mqtt_component(self.hass)
self.calls = [] self.calls = []
@ -25,10 +21,11 @@ class TestAutomationMQTT(unittest.TestCase):
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_old_config_if_fires_on_topic_match(self): def test_old_config_if_fires_on_topic_match(self):
"""Test if message is fired on topic match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'mqtt', 'platform': 'mqtt',
@ -42,6 +39,7 @@ class TestAutomationMQTT(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_fires_on_topic_and_payload_match(self): def test_old_config_if_fires_on_topic_and_payload_match(self):
"""Test if message is fired on topic and payload match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'mqtt', 'platform': 'mqtt',
@ -56,6 +54,7 @@ class TestAutomationMQTT(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_not_fires_on_topic_but_no_payload_match(self): def test_old_config_if_not_fires_on_topic_but_no_payload_match(self):
"""Test if message is not fired on topic but no payload."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'mqtt', 'platform': 'mqtt',
@ -70,6 +69,7 @@ class TestAutomationMQTT(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_topic_match(self): def test_if_fires_on_topic_match(self):
"""Test if message is fired on topic match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -87,6 +87,7 @@ class TestAutomationMQTT(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_topic_and_payload_match(self): def test_if_fires_on_topic_and_payload_match(self):
"""Test if message is fired on topic and payload match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -105,6 +106,7 @@ class TestAutomationMQTT(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_on_topic_but_no_payload_match(self): def test_if_not_fires_on_topic_but_no_payload_match(self):
"""Test if message is not fired on topic but no payload."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {

View File

@ -1,9 +1,4 @@
""" """The tests for numeric state automation."""
tests.components.automation.test_numeric_state
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests numeric state automation.
"""
import unittest import unittest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
@ -12,22 +7,25 @@ from tests.common import get_test_home_assistant
class TestAutomationNumericState(unittest.TestCase): class TestAutomationNumericState(unittest.TestCase):
""" Test the event automation. """ """Test the event automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.calls = [] self.calls = []
def record_call(service): def record_call(service):
"""Helper to record calls."""
self.calls.append(service) self.calls.append(service)
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_if_fires_on_entity_change_below(self): def test_if_fires_on_entity_change_below(self):
""""Test the firing with changed entity."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -46,6 +44,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change_over_to_below(self): def test_if_fires_on_entity_change_over_to_below(self):
""""Test the firing with changed entity."""
self.hass.states.set('test.entity', 11) self.hass.states.set('test.entity', 11)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -68,6 +67,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_on_entity_change_below_to_below(self): def test_if_not_fires_on_entity_change_below_to_below(self):
""""Test the firing with changed entity."""
self.hass.states.set('test.entity', 9) self.hass.states.set('test.entity', 9)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -90,6 +90,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_entity_change_above(self): def test_if_fires_on_entity_change_above(self):
""""Test the firing with changed entity."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -108,6 +109,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change_below_to_above(self): def test_if_fires_on_entity_change_below_to_above(self):
""""Test the firing with changed entity."""
# set initial state # set initial state
self.hass.states.set('test.entity', 9) self.hass.states.set('test.entity', 9)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -131,6 +133,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_on_entity_change_above_to_above(self): def test_if_not_fires_on_entity_change_above_to_above(self):
""""Test the firing with changed entity."""
# set initial state # set initial state
self.hass.states.set('test.entity', 11) self.hass.states.set('test.entity', 11)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -154,6 +157,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_entity_change_below_range(self): def test_if_fires_on_entity_change_below_range(self):
""""Test the firing with changed entity."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -173,6 +177,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change_below_above_range(self): def test_if_fires_on_entity_change_below_above_range(self):
""""Test the firing with changed entity."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -192,6 +197,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_entity_change_over_to_below_range(self): def test_if_fires_on_entity_change_over_to_below_range(self):
""""Test the firing with changed entity."""
self.hass.states.set('test.entity', 11) self.hass.states.set('test.entity', 11)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -215,6 +221,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change_over_to_below_above_range(self): def test_if_fires_on_entity_change_over_to_below_above_range(self):
""""Test the firing with changed entity."""
self.hass.states.set('test.entity', 11) self.hass.states.set('test.entity', 11)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -238,6 +245,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_not_fires_if_entity_not_match(self): def test_if_not_fires_if_entity_not_match(self):
""""Test if not fired with non matching entity."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -255,6 +263,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_entity_change_below_with_attribute(self): def test_if_fires_on_entity_change_below_with_attribute(self):
""""Test attributes change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -273,6 +282,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_on_entity_change_not_below_with_attribute(self): def test_if_not_fires_on_entity_change_not_below_with_attribute(self):
""""Test attributes."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -291,6 +301,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_attribute_change_with_attribute_below(self): def test_if_fires_on_attribute_change_with_attribute_below(self):
""""Test attributes change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -310,6 +321,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_on_attribute_change_with_attribute_not_below(self): def test_if_not_fires_on_attribute_change_with_attribute_not_below(self):
""""Test attributes change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -329,6 +341,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_not_fires_on_entity_change_with_attribute_below(self): def test_if_not_fires_on_entity_change_with_attribute_below(self):
""""Test attributes change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -348,6 +361,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_not_fires_on_entity_change_with_not_attribute_below(self): def test_if_not_fires_on_entity_change_with_not_attribute_below(self):
""""Test attributes change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -367,6 +381,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_fires_on_attr_change_with_attribute_below_and_multiple_attr(self): def test_fires_on_attr_change_with_attribute_below_and_multiple_attr(self):
""""Test attributes change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -387,6 +402,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_template_list(self): def test_template_list(self):
""""Test template list."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -408,6 +424,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_template_string(self): def test_template_string(self):
""""Test template string."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -429,6 +446,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_not_fires_on_attr_change_with_attr_not_below_multiple_attr(self): def test_not_fires_on_attr_change_with_attr_not_below_multiple_attr(self):
""""Test if not fired changed attributes."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -449,6 +467,7 @@ class TestAutomationNumericState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_action(self): def test_if_action(self):
""""Test if action."""
entity_id = 'domain.test_entity' entity_id = 'domain.test_entity'
test_state = 10 test_state = 10
automation.setup(self.hass, { automation.setup(self.hass, {

View File

@ -1,9 +1,4 @@
""" """The test for state automation."""
tests.components.automation.test_state
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests state automation.
"""
import unittest import unittest
from datetime import timedelta from datetime import timedelta
from unittest.mock import patch from unittest.mock import patch
@ -16,9 +11,10 @@ from tests.common import fire_time_changed, get_test_home_assistant
class TestAutomationState(unittest.TestCase): class TestAutomationState(unittest.TestCase):
""" Test the event automation. """ """Test the event automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.states.set('test.entity', 'hello') self.hass.states.set('test.entity', 'hello')
self.calls = [] self.calls = []
@ -29,10 +25,11 @@ class TestAutomationState(unittest.TestCase):
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_old_config_if_fires_on_entity_change(self): def test_old_config_if_fires_on_entity_change(self):
"""Test for firing if entity change ."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'state', 'platform': 'state',
@ -46,6 +43,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_fires_on_entity_change_with_from_filter(self): def test_old_config_if_fires_on_entity_change_with_from_filter(self):
"""Test for firing on entity change with filter."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'state', 'platform': 'state',
@ -60,6 +58,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_fires_on_entity_change_with_to_filter(self): def test_old_config_if_fires_on_entity_change_with_to_filter(self):
"""Test for firing on entity change no filter."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'state', 'platform': 'state',
@ -74,6 +73,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_fires_on_entity_change_with_both_filters(self): def test_old_config_if_fires_on_entity_change_with_both_filters(self):
"""Test for firing on entity change with both filters."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'state', 'platform': 'state',
@ -89,6 +89,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_not_fires_if_to_filter_not_match(self): def test_old_config_if_not_fires_if_to_filter_not_match(self):
"""Test for not firing if no match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'state', 'platform': 'state',
@ -104,6 +105,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_old_config_if_not_fires_if_from_filter_not_match(self): def test_old_config_if_not_fires_if_from_filter_not_match(self):
"""Test for no firing if no match."""
self.hass.states.set('test.entity', 'bye') self.hass.states.set('test.entity', 'bye')
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
@ -121,6 +123,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_old_config_if_not_fires_if_entity_not_match(self): def test_old_config_if_not_fires_if_entity_not_match(self):
"""Test for not firing if no match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'state', 'platform': 'state',
@ -134,6 +137,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_old_config_if_action(self): def test_old_config_if_action(self):
"""Test for if action."""
entity_id = 'domain.test_entity' entity_id = 'domain.test_entity'
test_state = 'new_state' test_state = 'new_state'
automation.setup(self.hass, { automation.setup(self.hass, {
@ -162,6 +166,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change(self): def test_if_fires_on_entity_change(self):
"""Test for firing on entity change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -179,6 +184,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change_with_from_filter(self): def test_if_fires_on_entity_change_with_from_filter(self):
"""Test for firing on entity change with filter."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -197,6 +203,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change_with_to_filter(self): def test_if_fires_on_entity_change_with_to_filter(self):
"""Test for firing on entity change with no filter."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -215,6 +222,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change_with_state_filter(self): def test_if_fires_on_entity_change_with_state_filter(self):
"""Test for firing on entity change with state filter."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -233,6 +241,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_entity_change_with_both_filters(self): def test_if_fires_on_entity_change_with_both_filters(self):
"""Test for firing if both filters are a non match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -252,6 +261,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_if_to_filter_not_match(self): def test_if_not_fires_if_to_filter_not_match(self):
"""Test for not firing if to filter is not a match."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -271,6 +281,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_not_fires_if_from_filter_not_match(self): def test_if_not_fires_if_from_filter_not_match(self):
"""Test for not firing if from filter is not a match."""
self.hass.states.set('test.entity', 'bye') self.hass.states.set('test.entity', 'bye')
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
@ -292,6 +303,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_not_fires_if_entity_not_match(self): def test_if_not_fires_if_entity_not_match(self):
"""Test for not firing if entity is not matching."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -309,6 +321,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_action(self): def test_if_action(self):
"""Test for to action."""
entity_id = 'domain.test_entity' entity_id = 'domain.test_entity'
test_state = 'new_state' test_state = 'new_state'
automation.setup(self.hass, { automation.setup(self.hass, {
@ -341,6 +354,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fails_setup_if_to_boolean_value(self): def test_if_fails_setup_if_to_boolean_value(self):
"""Test for setup failure for boolean to."""
self.assertFalse(state.trigger( self.assertFalse(state.trigger(
self.hass, { self.hass, {
'platform': 'state', 'platform': 'state',
@ -349,6 +363,7 @@ class TestAutomationState(unittest.TestCase):
}, lambda x: x)) }, lambda x: x))
def test_if_fails_setup_if_from_boolean_value(self): def test_if_fails_setup_if_from_boolean_value(self):
"""Test for setup failure for boolean from."""
self.assertFalse(state.trigger( self.assertFalse(state.trigger(
self.hass, { self.hass, {
'platform': 'state', 'platform': 'state',
@ -357,6 +372,7 @@ class TestAutomationState(unittest.TestCase):
}, lambda x: x)) }, lambda x: x))
def test_if_fails_setup_bad_for(self): def test_if_fails_setup_bad_for(self):
"""Test for setup failure for bad for."""
self.assertFalse(state.trigger( self.assertFalse(state.trigger(
self.hass, { self.hass, {
'platform': 'state', 'platform': 'state',
@ -368,6 +384,7 @@ class TestAutomationState(unittest.TestCase):
}, lambda x: x)) }, lambda x: x))
def test_if_fails_setup_for_without_to(self): def test_if_fails_setup_for_without_to(self):
"""Test for setup failures for missing to."""
self.assertFalse(state.trigger( self.assertFalse(state.trigger(
self.hass, { self.hass, {
'platform': 'state', 'platform': 'state',
@ -378,6 +395,7 @@ class TestAutomationState(unittest.TestCase):
}, lambda x: x)) }, lambda x: x))
def test_if_not_fires_on_entity_change_with_for(self): def test_if_not_fires_on_entity_change_with_for(self):
"""Test for not firing on entity change with for."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -403,6 +421,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_entity_change_with_for(self): def test_if_fires_on_entity_change_with_for(self):
"""Test for firing on entity change with for."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -426,6 +445,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_for_condition(self): def test_if_fires_on_for_condition(self):
"""Test for firing if contition is on."""
point1 = dt_util.utcnow() point1 = dt_util.utcnow()
point2 = point1 + timedelta(seconds=10) point2 = point1 + timedelta(seconds=10)
with patch('homeassistant.core.dt_util.utcnow') as mock_utcnow: with patch('homeassistant.core.dt_util.utcnow') as mock_utcnow:
@ -464,6 +484,7 @@ class TestAutomationState(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fails_setup_for_without_time(self): def test_if_fails_setup_for_without_time(self):
"""Test for setup failure if no time is provided."""
self.assertIsNone(state.if_action( self.assertIsNone(state.if_action(
self.hass, { self.hass, {
'platform': 'state', 'platform': 'state',
@ -473,6 +494,7 @@ class TestAutomationState(unittest.TestCase):
})) }))
def test_if_fails_setup_for_without_entity(self): def test_if_fails_setup_for_without_entity(self):
"""Test for setup failure if no entity is provided."""
self.assertIsNone(state.if_action( self.assertIsNone(state.if_action(
self.hass, { self.hass, {
'platform': 'state', 'platform': 'state',

View File

@ -1,9 +1,4 @@
""" """The tests for the sun automation."""
tests.components.automation.test_sun
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests sun automation.
"""
from datetime import datetime from datetime import datetime
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -16,9 +11,10 @@ from tests.common import fire_time_changed, get_test_home_assistant
class TestAutomationSun(unittest.TestCase): class TestAutomationSun(unittest.TestCase):
""" Test the sun automation. """ """Test the sun automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.config.components.append('sun') self.hass.config.components.append('sun')
@ -30,10 +26,11 @@ class TestAutomationSun(unittest.TestCase):
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_sunset_trigger(self): def test_sunset_trigger(self):
"""Test the sunset trigger."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_SETTING: '02:00:00 16-09-2015', sun.STATE_ATTR_NEXT_SETTING: '02:00:00 16-09-2015',
}) })
@ -60,6 +57,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_sunrise_trigger(self): def test_sunrise_trigger(self):
"""Test the sunrise trigger."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015', sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015',
}) })
@ -86,6 +84,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_sunset_trigger_with_offset(self): def test_sunset_trigger_with_offset(self):
"""Test the sunset trigger with offset."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_SETTING: '02:00:00 16-09-2015', sun.STATE_ATTR_NEXT_SETTING: '02:00:00 16-09-2015',
}) })
@ -113,6 +112,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_sunrise_trigger_with_offset(self): def test_sunrise_trigger_with_offset(self):
"""Test the runrise trigger with offset."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015', sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015',
}) })
@ -140,6 +140,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_before(self): def test_if_action_before(self):
"""Test if action was before."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015', sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015',
}) })
@ -175,6 +176,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_after(self): def test_if_action_after(self):
"""Test if action was after."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015', sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015',
}) })
@ -210,6 +212,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_before_with_offset(self): def test_if_action_before_with_offset(self):
"""Test if action was before offset."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015', sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015',
}) })
@ -246,6 +249,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_after_with_offset(self): def test_if_action_after_with_offset(self):
"""Test if action was after offset."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015', sun.STATE_ATTR_NEXT_RISING: '14:00:00 16-09-2015',
}) })
@ -282,6 +286,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_before_and_after_during(self): def test_if_action_before_and_after_during(self):
"""Test if action was before and after during."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {
sun.STATE_ATTR_NEXT_RISING: '10:00:00 16-09-2015', sun.STATE_ATTR_NEXT_RISING: '10:00:00 16-09-2015',
sun.STATE_ATTR_NEXT_SETTING: '15:00:00 16-09-2015', sun.STATE_ATTR_NEXT_SETTING: '15:00:00 16-09-2015',
@ -326,6 +331,7 @@ class TestAutomationSun(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_after_different_tz(self): def test_if_action_after_different_tz(self):
"""Test if action was after in a different timezone."""
import pytz import pytz
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, { self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON, {

View File

@ -1,9 +1,4 @@
""" """The tests fr the Template automation."""
tests.components.automation.test_template
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests template automation.
"""
import unittest import unittest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
@ -12,23 +7,26 @@ from tests.common import get_test_home_assistant
class TestAutomationTemplate(unittest.TestCase): class TestAutomationTemplate(unittest.TestCase):
""" Test the event automation. """ """Test the event automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.states.set('test.entity', 'hello') self.hass.states.set('test.entity', 'hello')
self.calls = [] self.calls = []
def record_call(service): def record_call(service):
"""helper for recording calls."""
self.calls.append(service) self.calls.append(service)
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_if_fires_on_change_bool(self): def test_if_fires_on_change_bool(self):
"""Test for firing on boolean change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -46,6 +44,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_change_str(self): def test_if_fires_on_change_str(self):
"""Test for firing on change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -63,6 +62,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_change_str_crazy(self): def test_if_fires_on_change_str_crazy(self):
"""Test for firing on change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -80,6 +80,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_on_change_bool(self): def test_if_not_fires_on_change_bool(self):
"""Test for not firing on boolean change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -97,6 +98,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_not_fires_on_change_str(self): def test_if_not_fires_on_change_str(self):
"""Test for not firing on string change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -114,6 +116,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_not_fires_on_change_str_crazy(self): def test_if_not_fires_on_change_str_crazy(self):
"""Test for not firing on string change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -131,6 +134,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_no_change(self): def test_if_fires_on_no_change(self):
"""Test for firing on no change."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -148,6 +152,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_two_change(self): def test_if_fires_on_two_change(self):
"""Test for firing on two changes."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -171,6 +176,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_change_with_template(self): def test_if_fires_on_change_with_template(self):
"""Test for firing on change with template."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -188,6 +194,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_on_change_with_template(self): def test_if_not_fires_on_change_with_template(self):
"""Test for not firing on change with template."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -205,6 +212,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_change_with_template_advanced(self): def test_if_fires_on_change_with_template_advanced(self):
"""Test for firing on change with template advanced."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -226,6 +234,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_no_change_with_template_advanced(self): def test_if_fires_on_no_change_with_template_advanced(self):
"""Test for firing on no change with template advanced."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -253,6 +262,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_change_with_template_2(self): def test_if_fires_on_change_with_template_2(self):
"""Test for firing on change with template."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -291,6 +301,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(2, len(self.calls)) self.assertEqual(2, len(self.calls))
def test_if_action(self): def test_if_action(self):
"""Test for firing if action."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -323,6 +334,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_on_change_with_bad_template(self): def test_if_fires_on_change_with_bad_template(self):
"""Test for firing on change with bad template."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -340,6 +352,7 @@ class TestAutomationTemplate(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_change_with_bad_template_2(self): def test_if_fires_on_change_with_bad_template_2(self):
"""Test for firing on change with bad template."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {

View File

@ -1,9 +1,4 @@
""" """The tests for the time automation."""
tests.components.automation.test_time
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests time automation.
"""
from datetime import timedelta from datetime import timedelta
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -17,9 +12,10 @@ from tests.common import fire_time_changed, get_test_home_assistant
class TestAutomationTime(unittest.TestCase): class TestAutomationTime(unittest.TestCase):
""" Test the event automation. """ """Test the event automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.calls = [] self.calls = []
@ -29,10 +25,11 @@ class TestAutomationTime(unittest.TestCase):
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_old_config_if_fires_when_hour_matches(self): def test_old_config_if_fires_when_hour_matches(self):
"""Test for firing if hours are matching."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'time', 'platform': 'time',
@ -48,6 +45,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_fires_when_minute_matches(self): def test_old_config_if_fires_when_minute_matches(self):
"""Test for firing if minutes are matching."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'time', 'platform': 'time',
@ -63,6 +61,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_fires_when_second_matches(self): def test_old_config_if_fires_when_second_matches(self):
"""Test for firing if seconds are matching."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'platform': 'time', 'platform': 'time',
@ -78,6 +77,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_fires_when_all_matches(self): def test_old_config_if_fires_when_all_matches(self):
"""Test for firing if everything matches."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
CONF_PLATFORM: 'time', CONF_PLATFORM: 'time',
@ -96,6 +96,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_action_before(self): def test_old_config_if_action_before(self):
"""Test for action before."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
CONF_PLATFORM: 'event', CONF_PLATFORM: 'event',
@ -126,6 +127,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_action_after(self): def test_old_config_if_action_after(self):
"""Test for action after."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
CONF_PLATFORM: 'event', CONF_PLATFORM: 'event',
@ -156,6 +158,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_action_one_weekday(self): def test_old_config_if_action_one_weekday(self):
"""Test for action with one weekday."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
CONF_PLATFORM: 'event', CONF_PLATFORM: 'event',
@ -187,6 +190,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_old_config_if_action_list_weekday(self): def test_old_config_if_action_list_weekday(self):
"""Test for action with a list of weekdays."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
CONF_PLATFORM: 'event', CONF_PLATFORM: 'event',
@ -226,6 +230,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(2, len(self.calls)) self.assertEqual(2, len(self.calls))
def test_if_fires_when_hour_matches(self): def test_if_fires_when_hour_matches(self):
"""Test for firing if hour is matching."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -244,6 +249,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_when_minute_matches(self): def test_if_fires_when_minute_matches(self):
"""Test for firing if minutes are matching."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -262,6 +268,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_when_second_matches(self): def test_if_fires_when_second_matches(self):
"""Test for firing if seconds are matching."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -280,6 +287,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_when_all_matches(self): def test_if_fires_when_all_matches(self):
"""Test for firing if everything matches."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -301,6 +309,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_periodic_seconds(self): def test_if_fires_periodic_seconds(self):
"""Test for firing periodically every second."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -320,6 +329,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_periodic_minutes(self): def test_if_fires_periodic_minutes(self):
"""Test for firing periodically every minute."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -339,6 +349,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_periodic_hours(self): def test_if_fires_periodic_hours(self):
"""Test for firing periodically every hour."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -358,6 +369,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_fires_using_after(self): def test_if_fires_using_after(self):
"""Test for firing after."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -377,6 +389,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_working_if_no_values_in_conf_provided(self): def test_if_not_working_if_no_values_in_conf_provided(self):
"""Test for failure if no configuration."""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -396,8 +409,10 @@ class TestAutomationTime(unittest.TestCase):
@patch('homeassistant.components.automation.time._LOGGER.error') @patch('homeassistant.components.automation.time._LOGGER.error')
def test_if_not_fires_using_wrong_after(self, mock_error): def test_if_not_fires_using_wrong_after(self, mock_error):
""" YAML translates time values to total seconds. This should break the """YAML translates time values to total seconds.
before rule. """
This should break the before rule.
"""
self.assertTrue(automation.setup(self.hass, { self.assertTrue(automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -419,6 +434,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(2, mock_error.call_count) self.assertEqual(2, mock_error.call_count)
def test_if_action_before(self): def test_if_action_before(self):
"""Test for if action before."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -453,6 +469,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_after(self): def test_if_action_after(self):
"""Test for if action after."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -487,6 +504,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_one_weekday(self): def test_if_action_one_weekday(self):
"""Test for if action with one weekday."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {
@ -522,6 +540,7 @@ class TestAutomationTime(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_action_list_weekday(self): def test_if_action_list_weekday(self):
"""Test for action with a list of weekdays."""
automation.setup(self.hass, { automation.setup(self.hass, {
automation.DOMAIN: { automation.DOMAIN: {
'trigger': { 'trigger': {

View File

@ -1,9 +1,4 @@
""" """The tests for the location automation."""
tests.components.automation.test_zone
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests location automation.
"""
import unittest import unittest
from homeassistant.components import automation, zone from homeassistant.components import automation, zone
@ -12,9 +7,10 @@ from tests.common import get_test_home_assistant
class TestAutomationZone(unittest.TestCase): class TestAutomationZone(unittest.TestCase):
""" Test the event automation. """ """Test the event automation."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
zone.setup(self.hass, { zone.setup(self.hass, {
'zone': { 'zone': {
@ -33,10 +29,11 @@ class TestAutomationZone(unittest.TestCase):
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_if_fires_on_zone_enter(self): def test_if_fires_on_zone_enter(self):
"""Test for firing on zone enter."""
self.hass.states.set('test.entity', 'hello', { self.hass.states.set('test.entity', 'hello', {
'latitude': 32.881011, 'latitude': 32.881011,
'longitude': -117.234758 'longitude': -117.234758
@ -66,6 +63,7 @@ class TestAutomationZone(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_for_enter_on_zone_leave(self): def test_if_not_fires_for_enter_on_zone_leave(self):
"""Test for not firing on zone leave."""
self.hass.states.set('test.entity', 'hello', { self.hass.states.set('test.entity', 'hello', {
'latitude': 32.880586, 'latitude': 32.880586,
'longitude': -117.237564 'longitude': -117.237564
@ -95,6 +93,7 @@ class TestAutomationZone(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_if_fires_on_zone_leave(self): def test_if_fires_on_zone_leave(self):
"""Test for firing on zone leave."""
self.hass.states.set('test.entity', 'hello', { self.hass.states.set('test.entity', 'hello', {
'latitude': 32.880586, 'latitude': 32.880586,
'longitude': -117.237564 'longitude': -117.237564
@ -124,6 +123,7 @@ class TestAutomationZone(unittest.TestCase):
self.assertEqual(1, len(self.calls)) self.assertEqual(1, len(self.calls))
def test_if_not_fires_for_leave_on_zone_enter(self): def test_if_not_fires_for_leave_on_zone_enter(self):
"""Test for not firing on zone enter."""
self.hass.states.set('test.entity', 'hello', { self.hass.states.set('test.entity', 'hello', {
'latitude': 32.881011, 'latitude': 32.881011,
'longitude': -117.234758 'longitude': -117.234758
@ -153,6 +153,7 @@ class TestAutomationZone(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_zone_condition(self): def test_zone_condition(self):
"""Test for zone condition."""
self.hass.states.set('test.entity', 'hello', { self.hass.states.set('test.entity', 'hello', {
'latitude': 32.880586, 'latitude': 32.880586,
'longitude': -117.237564 'longitude': -117.237564

View File

@ -0,0 +1 @@
"""The tests for Binary sensor platforms."""

View File

@ -1,8 +1,4 @@
""" """The tests for the Binary sensor component."""
tests.components.binary_sensor.test_binary_sensor
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test the binary_sensor base class
"""
import unittest import unittest
from unittest import mock from unittest import mock

View File

@ -1,9 +1,4 @@
""" """The tests fr the Command line Binary sensor platform."""
tests.components.binary_sensor.command_line
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests command binary sensor.
"""
import unittest import unittest
from homeassistant.const import (STATE_ON, STATE_OFF) from homeassistant.const import (STATE_ON, STATE_OFF)
@ -13,17 +8,18 @@ from tests.common import get_test_home_assistant
class TestCommandSensorBinarySensor(unittest.TestCase): class TestCommandSensorBinarySensor(unittest.TestCase):
""" Test the Template sensor. """ """Test the Command line Binary sensor."""
def setUp(self): def setUp(self):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): def tearDown(self):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_setup(self): def test_setup(self):
""" Test sensor setup """ """Test sensor setup."""
config = {'name': 'Test', config = {'name': 'Test',
'command': 'echo 1', 'command': 'echo 1',
'payload_on': '1', 'payload_on': '1',
@ -31,7 +27,7 @@ class TestCommandSensorBinarySensor(unittest.TestCase):
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -44,13 +40,13 @@ class TestCommandSensorBinarySensor(unittest.TestCase):
self.assertEqual(STATE_ON, entity.state) self.assertEqual(STATE_ON, entity.state)
def test_setup_bad_config(self): def test_setup_bad_config(self):
""" Test setup with a bad config """ """Test the setup with a bad configuration."""
config = {} config = {}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -60,7 +56,7 @@ class TestCommandSensorBinarySensor(unittest.TestCase):
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
def test_template(self): def test_template(self):
""" Test command sensor with template """ """Test setting the state with a template."""
data = command_line.CommandSensorData('echo 10') data = command_line.CommandSensorData('echo 10')
entity = command_line.CommandBinarySensor( entity = command_line.CommandBinarySensor(
@ -69,7 +65,7 @@ class TestCommandSensorBinarySensor(unittest.TestCase):
self.assertEqual(STATE_ON, entity.state) self.assertEqual(STATE_ON, entity.state)
def test_sensor_off(self): def test_sensor_off(self):
""" Test command sensor with template """ """Test setting the state with a template."""
data = command_line.CommandSensorData('echo 0') data = command_line.CommandSensorData('echo 0')
entity = command_line.CommandBinarySensor( entity = command_line.CommandBinarySensor(

View File

@ -1,9 +1,4 @@
""" """The tests for the MQTT binary sensor platform."""
tests.components.binary_sensor.test_mqtt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests MQTT binary sensor.
"""
import unittest import unittest
import homeassistant.components.binary_sensor as binary_sensor import homeassistant.components.binary_sensor as binary_sensor
@ -14,17 +9,19 @@ from tests.common import get_test_home_assistant
class TestSensorMQTT(unittest.TestCase): class TestSensorMQTT(unittest.TestCase):
""" Test the MQTT sensor. """ """Test the MQTT sensor."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
mock_mqtt_component(self.hass) mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_setting_sensor_value_via_mqtt_message(self): def test_setting_sensor_value_via_mqtt_message(self):
"""Test the setting of the value via MQTT."""
self.assertTrue(binary_sensor.setup(self.hass, { self.assertTrue(binary_sensor.setup(self.hass, {
'binary_sensor': { 'binary_sensor': {
'platform': 'mqtt', 'platform': 'mqtt',

View File

@ -1,9 +1,4 @@
""" """The tests for the nx584 sensor platform."""
tests.components.binary_sensor.nx584
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests for nx584 sensor.
"""
import requests import requests
import unittest import unittest
from unittest import mock from unittest import mock
@ -13,11 +8,16 @@ from nx584 import client as nx584_client
class StopMe(Exception): class StopMe(Exception):
"""Stop helper."""
pass pass
class TestNX584SensorSetup(unittest.TestCase): class TestNX584SensorSetup(unittest.TestCase):
"""Test the nx584 sensor platform."""
def setUp(self): def setUp(self):
"""Setup things to be run when tests are started."""
self._mock_client = mock.patch.object(nx584_client, 'Client') self._mock_client = mock.patch.object(nx584_client, 'Client')
self._mock_client.start() self._mock_client.start()
@ -32,11 +32,13 @@ class TestNX584SensorSetup(unittest.TestCase):
client.get_version.return_value = '1.1' client.get_version.return_value = '1.1'
def tearDown(self): def tearDown(self):
"""Stop everything that was started."""
self._mock_client.stop() self._mock_client.stop()
@mock.patch('homeassistant.components.binary_sensor.nx584.NX584Watcher') @mock.patch('homeassistant.components.binary_sensor.nx584.NX584Watcher')
@mock.patch('homeassistant.components.binary_sensor.nx584.NX584ZoneSensor') @mock.patch('homeassistant.components.binary_sensor.nx584.NX584ZoneSensor')
def test_setup_no_config(self, mock_nx, mock_watcher): def test_setup_no_config(self, mock_nx, mock_watcher):
"""Test the setup with no configuration."""
add_devices = mock.MagicMock() add_devices = mock.MagicMock()
hass = mock.MagicMock() hass = mock.MagicMock()
self.assertTrue(nx584.setup_platform(hass, {}, add_devices)) self.assertTrue(nx584.setup_platform(hass, {}, add_devices))
@ -49,6 +51,7 @@ class TestNX584SensorSetup(unittest.TestCase):
@mock.patch('homeassistant.components.binary_sensor.nx584.NX584Watcher') @mock.patch('homeassistant.components.binary_sensor.nx584.NX584Watcher')
@mock.patch('homeassistant.components.binary_sensor.nx584.NX584ZoneSensor') @mock.patch('homeassistant.components.binary_sensor.nx584.NX584ZoneSensor')
def test_setup_full_config(self, mock_nx, mock_watcher): def test_setup_full_config(self, mock_nx, mock_watcher):
"""Test the setup with full configuration."""
config = { config = {
'host': 'foo:123', 'host': 'foo:123',
'exclude_zones': [2], 'exclude_zones': [2],
@ -66,12 +69,14 @@ class TestNX584SensorSetup(unittest.TestCase):
self.assertTrue(mock_watcher.called) self.assertTrue(mock_watcher.called)
def _test_assert_graceful_fail(self, config): def _test_assert_graceful_fail(self, config):
"""Test the failing."""
hass = add_devices = mock.MagicMock() hass = add_devices = mock.MagicMock()
self.assertFalse(nx584.setup_platform(hass, config, self.assertFalse(nx584.setup_platform(hass, config,
add_devices)) add_devices))
self.assertFalse(add_devices.called) self.assertFalse(add_devices.called)
def test_setup_bad_config(self): def test_setup_bad_config(self):
"""Test the setup with bad configuration."""
bad_configs = [ bad_configs = [
{'exclude_zones': ['a']}, {'exclude_zones': ['a']},
{'zone_types': {'a': 'b'}}, {'zone_types': {'a': 'b'}},
@ -82,15 +87,18 @@ class TestNX584SensorSetup(unittest.TestCase):
self._test_assert_graceful_fail(config) self._test_assert_graceful_fail(config)
def test_setup_connect_failed(self): def test_setup_connect_failed(self):
"""Test the setup with connection failure."""
nx584_client.Client.return_value.list_zones.side_effect = \ nx584_client.Client.return_value.list_zones.side_effect = \
requests.exceptions.ConnectionError requests.exceptions.ConnectionError
self._test_assert_graceful_fail({}) self._test_assert_graceful_fail({})
def test_setup_version_too_old(self): def test_setup_version_too_old(self):
""""Test if version is too old."""
nx584_client.Client.return_value.get_version.return_value = '1.0' nx584_client.Client.return_value.get_version.return_value = '1.0'
self._test_assert_graceful_fail({}) self._test_assert_graceful_fail({})
def test_setup_no_zones(self): def test_setup_no_zones(self):
"""Test the setup with no zones."""
nx584_client.Client.return_value.list_zones.return_value = [] nx584_client.Client.return_value.list_zones.return_value = []
hass = add_devices = mock.MagicMock() hass = add_devices = mock.MagicMock()
self.assertTrue(nx584.setup_platform(hass, {}, self.assertTrue(nx584.setup_platform(hass, {},
@ -99,7 +107,10 @@ class TestNX584SensorSetup(unittest.TestCase):
class TestNX584ZoneSensor(unittest.TestCase): class TestNX584ZoneSensor(unittest.TestCase):
"""Test for the nx584 zone sensor."""
def test_sensor_normal(self): def test_sensor_normal(self):
"""Test the sensor."""
zone = {'number': 1, 'name': 'foo', 'state': True} zone = {'number': 1, 'name': 'foo', 'state': True}
sensor = nx584.NX584ZoneSensor(zone, 'motion') sensor = nx584.NX584ZoneSensor(zone, 'motion')
self.assertEqual('foo', sensor.name) self.assertEqual('foo', sensor.name)
@ -111,8 +122,11 @@ class TestNX584ZoneSensor(unittest.TestCase):
class TestNX584Watcher(unittest.TestCase): class TestNX584Watcher(unittest.TestCase):
"""Test the nx584 watcher."""
@mock.patch.object(nx584.NX584ZoneSensor, 'update_ha_state') @mock.patch.object(nx584.NX584ZoneSensor, 'update_ha_state')
def test_process_zone_event(self, mock_update): def test_process_zone_event(self, mock_update):
"""Test the processing of zone events."""
zone1 = {'number': 1, 'name': 'foo', 'state': True} zone1 = {'number': 1, 'name': 'foo', 'state': True}
zone2 = {'number': 2, 'name': 'bar', 'state': True} zone2 = {'number': 2, 'name': 'bar', 'state': True}
zones = { zones = {
@ -126,15 +140,17 @@ class TestNX584Watcher(unittest.TestCase):
@mock.patch.object(nx584.NX584ZoneSensor, 'update_ha_state') @mock.patch.object(nx584.NX584ZoneSensor, 'update_ha_state')
def test_process_zone_event_missing_zone(self, mock_update): def test_process_zone_event_missing_zone(self, mock_update):
"""Test the processing of zone events with missing zones."""
watcher = nx584.NX584Watcher(None, {}) watcher = nx584.NX584Watcher(None, {})
watcher._process_zone_event({'zone': 1, 'zone_state': False}) watcher._process_zone_event({'zone': 1, 'zone_state': False})
self.assertFalse(mock_update.called) self.assertFalse(mock_update.called)
def test_run_with_zone_events(self): def test_run_with_zone_events(self):
"""Test the zone events."""
empty_me = [1, 2] empty_me = [1, 2]
def fake_get_events(): def fake_get_events():
"""Return nothing twice, then some events""" """Return nothing twice, then some events."""
if empty_me: if empty_me:
empty_me.pop() empty_me.pop()
else: else:
@ -159,6 +175,7 @@ class TestNX584Watcher(unittest.TestCase):
@mock.patch('time.sleep') @mock.patch('time.sleep')
def test_run_retries_failures(self, mock_sleep): def test_run_retries_failures(self, mock_sleep):
"""Test the retries with failures."""
empty_me = [1, 2] empty_me = [1, 2]
def fake_run(): def fake_run():

View File

@ -1,9 +1,4 @@
""" """The tests for the TCP binary sensor platform."""
tests.components.sensor.tcp
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests TCP sensor.
"""
from copy import copy from copy import copy
from unittest.mock import patch, Mock from unittest.mock import patch, Mock
@ -15,7 +10,7 @@ from tests.components.sensor import test_tcp
@patch('homeassistant.components.sensor.tcp.Sensor.update') @patch('homeassistant.components.sensor.tcp.Sensor.update')
def test_setup_platform_valid_config(mock_update): def test_setup_platform_valid_config(mock_update):
""" Should check the supplied config and call add_entities with Sensor. """ """Should check the supplied config and call add_entities with Sensor."""
add_entities = Mock() add_entities = Mock()
ret = bin_tcp.setup_platform(None, test_tcp.TEST_CONFIG, add_entities) ret = bin_tcp.setup_platform(None, test_tcp.TEST_CONFIG, add_entities)
assert ret is None, "setup_platform() should return None if successful." assert ret is None, "setup_platform() should return None if successful."
@ -24,23 +19,25 @@ def test_setup_platform_valid_config(mock_update):
def test_setup_platform_invalid_config(): def test_setup_platform_invalid_config():
""" Should check the supplied config and return False if it is invalid. """ """Should check the supplied config and return False if it is invalid."""
config = copy(test_tcp.TEST_CONFIG) config = copy(test_tcp.TEST_CONFIG)
del config[tcp.CONF_HOST] del config[tcp.CONF_HOST]
assert bin_tcp.setup_platform(None, config, None) is False assert bin_tcp.setup_platform(None, config, None) is False
class TestTCPBinarySensor(): class TestTCPBinarySensor():
""" Test the TCP Binary Sensor. """ """Test the TCP Binary Sensor."""
def setup_class(cls): def setup_class(cls):
"""Setup things to be run when tests are started."""
cls.hass = get_test_home_assistant() cls.hass = get_test_home_assistant()
def teardown_class(cls): def teardown_class(cls):
"""Stop down everything that was started."""
cls.hass.stop() cls.hass.stop()
def test_requires_additional_values(self): def test_requires_additional_values(self):
""" Should require the additional config values specified. """ """Should require the additional config values specified."""
config = copy(test_tcp.TEST_CONFIG) config = copy(test_tcp.TEST_CONFIG)
for key in bin_tcp.BinarySensor.required: for key in bin_tcp.BinarySensor.required:
del config[key] del config[key]
@ -49,14 +46,14 @@ class TestTCPBinarySensor():
@patch('homeassistant.components.sensor.tcp.Sensor.update') @patch('homeassistant.components.sensor.tcp.Sensor.update')
def test_is_on_true(self, mock_update): def test_is_on_true(self, mock_update):
""" Should return True if _state is the same as value_on. """ """Should return True if _state is the same as value_on."""
sensor = bin_tcp.BinarySensor(self.hass, test_tcp.TEST_CONFIG) sensor = bin_tcp.BinarySensor(self.hass, test_tcp.TEST_CONFIG)
sensor._state = test_tcp.TEST_CONFIG[tcp.CONF_VALUE_ON] sensor._state = test_tcp.TEST_CONFIG[tcp.CONF_VALUE_ON]
assert sensor.is_on assert sensor.is_on
@patch('homeassistant.components.sensor.tcp.Sensor.update') @patch('homeassistant.components.sensor.tcp.Sensor.update')
def test_is_on_false(self, mock_update): def test_is_on_false(self, mock_update):
""" Should return False if _state is not the same as value_on. """ """Should return False if _state is not the same as value_on."""
sensor = bin_tcp.BinarySensor(self.hass, test_tcp.TEST_CONFIG) sensor = bin_tcp.BinarySensor(self.hass, test_tcp.TEST_CONFIG)
sensor._state = "%s abc" % test_tcp.TEST_CONFIG[tcp.CONF_VALUE_ON] sensor._state = "%s abc" % test_tcp.TEST_CONFIG[tcp.CONF_VALUE_ON]
assert not sensor.is_on assert not sensor.is_on

View File

@ -1,9 +1,4 @@
""" """The tests for the Template Binary sensor platform."""
tests.components.binary_sensor.test_template
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests for template binary_sensor.
"""
import unittest import unittest
from unittest import mock from unittest import mock
@ -12,8 +7,11 @@ from homeassistant.exceptions import TemplateError
class TestBinarySensorTemplate(unittest.TestCase): class TestBinarySensorTemplate(unittest.TestCase):
"""Test for Binary sensor template platform."""
@mock.patch.object(template, 'BinarySensorTemplate') @mock.patch.object(template, 'BinarySensorTemplate')
def test_setup(self, mock_template): def test_setup(self, mock_template):
""""Test the setup."""
config = { config = {
'sensors': { 'sensors': {
'test': { 'test': {
@ -32,11 +30,13 @@ class TestBinarySensorTemplate(unittest.TestCase):
add_devices.assert_called_once_with([mock_template.return_value]) add_devices.assert_called_once_with([mock_template.return_value])
def test_setup_no_sensors(self): def test_setup_no_sensors(self):
""""Test setup with no sensors."""
config = {} config = {}
result = template.setup_platform(None, config, None) result = template.setup_platform(None, config, None)
self.assertFalse(result) self.assertFalse(result)
def test_setup_invalid_device(self): def test_setup_invalid_device(self):
""""Test the setup with invalid devices."""
config = { config = {
'sensors': { 'sensors': {
'foo bar': {}, 'foo bar': {},
@ -46,6 +46,7 @@ class TestBinarySensorTemplate(unittest.TestCase):
self.assertFalse(result) self.assertFalse(result)
def test_setup_invalid_sensor_class(self): def test_setup_invalid_sensor_class(self):
""""Test setup with invalid sensor class."""
config = { config = {
'sensors': { 'sensors': {
'test': { 'test': {
@ -58,6 +59,7 @@ class TestBinarySensorTemplate(unittest.TestCase):
self.assertFalse(result) self.assertFalse(result)
def test_setup_invalid_missing_template(self): def test_setup_invalid_missing_template(self):
""""Test setup with invalid and missing template."""
config = { config = {
'sensors': { 'sensors': {
'test': { 'test': {
@ -69,6 +71,7 @@ class TestBinarySensorTemplate(unittest.TestCase):
self.assertFalse(result) self.assertFalse(result)
def test_attributes(self): def test_attributes(self):
""""Test the attributes."""
hass = mock.MagicMock() hass = mock.MagicMock()
vs = template.BinarySensorTemplate(hass, 'parent', 'Parent', vs = template.BinarySensorTemplate(hass, 'parent', 'Parent',
'motion', '{{ 1 > 1 }}') 'motion', '{{ 1 > 1 }}')
@ -84,6 +87,7 @@ class TestBinarySensorTemplate(unittest.TestCase):
self.assertTrue(vs.is_on) self.assertTrue(vs.is_on)
def test_event(self): def test_event(self):
""""Test the event."""
hass = mock.MagicMock() hass = mock.MagicMock()
vs = template.BinarySensorTemplate(hass, 'parent', 'Parent', vs = template.BinarySensorTemplate(hass, 'parent', 'Parent',
'motion', '{{ 1 > 1 }}') 'motion', '{{ 1 > 1 }}')
@ -92,6 +96,7 @@ class TestBinarySensorTemplate(unittest.TestCase):
mock_update.assert_called_once_with(True) mock_update.assert_called_once_with(True)
def test_update(self): def test_update(self):
""""Test the update."""
hass = mock.MagicMock() hass = mock.MagicMock()
vs = template.BinarySensorTemplate(hass, 'parent', 'Parent', vs = template.BinarySensorTemplate(hass, 'parent', 'Parent',
'motion', '{{ 2 > 1 }}') 'motion', '{{ 2 > 1 }}')
@ -101,6 +106,7 @@ class TestBinarySensorTemplate(unittest.TestCase):
@mock.patch('homeassistant.helpers.template.render') @mock.patch('homeassistant.helpers.template.render')
def test_update_template_error(self, mock_render): def test_update_template_error(self, mock_render):
""""Test the template update error."""
hass = mock.MagicMock() hass = mock.MagicMock()
vs = template.BinarySensorTemplate(hass, 'parent', 'Parent', vs = template.BinarySensorTemplate(hass, 'parent', 'Parent',
'motion', '{{ 1 > 1 }}') 'motion', '{{ 1 > 1 }}')

View File

@ -0,0 +1 @@
"""The tests for camera platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for UVC camera module."""
tests.components.camera.test_uvc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests for uvc camera module.
"""
import socket import socket
import unittest import unittest
from unittest import mock from unittest import mock
@ -16,9 +11,12 @@ from homeassistant.components.camera import uvc
class TestUVCSetup(unittest.TestCase): class TestUVCSetup(unittest.TestCase):
"""Test the UVC camera platform."""
@mock.patch('uvcclient.nvr.UVCRemote') @mock.patch('uvcclient.nvr.UVCRemote')
@mock.patch.object(uvc, 'UnifiVideoCamera') @mock.patch.object(uvc, 'UnifiVideoCamera')
def test_setup_full_config(self, mock_uvc, mock_remote): def test_setup_full_config(self, mock_uvc, mock_remote):
""""Test the setup with full configuration."""
config = { config = {
'nvr': 'foo', 'nvr': 'foo',
'port': 123, 'port': 123,
@ -31,6 +29,7 @@ class TestUVCSetup(unittest.TestCase):
] ]
def fake_get_camera(uuid): def fake_get_camera(uuid):
""""Create a fake camera."""
if uuid == 'three': if uuid == 'three':
return {'model': 'airCam'} return {'model': 'airCam'}
else: else:
@ -52,6 +51,7 @@ class TestUVCSetup(unittest.TestCase):
@mock.patch('uvcclient.nvr.UVCRemote') @mock.patch('uvcclient.nvr.UVCRemote')
@mock.patch.object(uvc, 'UnifiVideoCamera') @mock.patch.object(uvc, 'UnifiVideoCamera')
def test_setup_partial_config(self, mock_uvc, mock_remote): def test_setup_partial_config(self, mock_uvc, mock_remote):
""""Test the setup with partial configuration."""
config = { config = {
'nvr': 'foo', 'nvr': 'foo',
'key': 'secret', 'key': 'secret',
@ -74,6 +74,7 @@ class TestUVCSetup(unittest.TestCase):
]) ])
def test_setup_incomplete_config(self): def test_setup_incomplete_config(self):
""""Test the setup with incomplete configuration."""
self.assertFalse(uvc.setup_platform( self.assertFalse(uvc.setup_platform(
None, {'nvr': 'foo'}, None)) None, {'nvr': 'foo'}, None))
self.assertFalse(uvc.setup_platform( self.assertFalse(uvc.setup_platform(
@ -83,6 +84,7 @@ class TestUVCSetup(unittest.TestCase):
@mock.patch('uvcclient.nvr.UVCRemote') @mock.patch('uvcclient.nvr.UVCRemote')
def test_setup_nvr_errors(self, mock_remote): def test_setup_nvr_errors(self, mock_remote):
""""Test for NVR errors."""
errors = [nvr.NotAuthorized, nvr.NvrError, errors = [nvr.NotAuthorized, nvr.NvrError,
requests.exceptions.ConnectionError] requests.exceptions.ConnectionError]
config = { config = {
@ -95,7 +97,10 @@ class TestUVCSetup(unittest.TestCase):
class TestUVC(unittest.TestCase): class TestUVC(unittest.TestCase):
"""Test class for UVC."""
def setup_method(self, method): def setup_method(self, method):
""""Setup the mock camera."""
self.nvr = mock.MagicMock() self.nvr = mock.MagicMock()
self.uuid = 'uuid' self.uuid = 'uuid'
self.name = 'name' self.name = 'name'
@ -111,6 +116,7 @@ class TestUVC(unittest.TestCase):
} }
def test_properties(self): def test_properties(self):
""""Test the properties."""
self.assertEqual(self.name, self.uvc.name) self.assertEqual(self.name, self.uvc.name)
self.assertTrue(self.uvc.is_recording) self.assertTrue(self.uvc.is_recording)
self.assertEqual('Ubiquiti', self.uvc.brand) self.assertEqual('Ubiquiti', self.uvc.brand)
@ -119,6 +125,7 @@ class TestUVC(unittest.TestCase):
@mock.patch('uvcclient.store.get_info_store') @mock.patch('uvcclient.store.get_info_store')
@mock.patch('uvcclient.camera.UVCCameraClient') @mock.patch('uvcclient.camera.UVCCameraClient')
def test_login(self, mock_camera, mock_store): def test_login(self, mock_camera, mock_store):
""""Test the login."""
mock_store.return_value.get_camera_password.return_value = 'seekret' mock_store.return_value.get_camera_password.return_value = 'seekret'
self.uvc._login() self.uvc._login()
mock_camera.assert_called_once_with('host-a', 'admin', 'seekret') mock_camera.assert_called_once_with('host-a', 'admin', 'seekret')
@ -127,6 +134,7 @@ class TestUVC(unittest.TestCase):
@mock.patch('uvcclient.store.get_info_store') @mock.patch('uvcclient.store.get_info_store')
@mock.patch('uvcclient.camera.UVCCameraClient') @mock.patch('uvcclient.camera.UVCCameraClient')
def test_login_no_password(self, mock_camera, mock_store): def test_login_no_password(self, mock_camera, mock_store):
""""Test the login with no password."""
mock_store.return_value.get_camera_password.return_value = None mock_store.return_value.get_camera_password.return_value = None
self.uvc._login() self.uvc._login()
mock_camera.assert_called_once_with('host-a', 'admin', 'ubnt') mock_camera.assert_called_once_with('host-a', 'admin', 'ubnt')
@ -135,6 +143,7 @@ class TestUVC(unittest.TestCase):
@mock.patch('uvcclient.store.get_info_store') @mock.patch('uvcclient.store.get_info_store')
@mock.patch('uvcclient.camera.UVCCameraClient') @mock.patch('uvcclient.camera.UVCCameraClient')
def test_login_tries_both_addrs_and_caches(self, mock_camera, mock_store): def test_login_tries_both_addrs_and_caches(self, mock_camera, mock_store):
""""Test the login tries."""
responses = [0] responses = [0]
def fake_login(*a): def fake_login(*a):
@ -158,27 +167,32 @@ class TestUVC(unittest.TestCase):
@mock.patch('uvcclient.store.get_info_store') @mock.patch('uvcclient.store.get_info_store')
@mock.patch('uvcclient.camera.UVCCameraClient') @mock.patch('uvcclient.camera.UVCCameraClient')
def test_login_fails_both_properly(self, mock_camera, mock_store): def test_login_fails_both_properly(self, mock_camera, mock_store):
""""Test if login fails properly."""
mock_camera.return_value.login.side_effect = socket.error mock_camera.return_value.login.side_effect = socket.error
self.assertEqual(None, self.uvc._login()) self.assertEqual(None, self.uvc._login())
self.assertEqual(None, self.uvc._connect_addr) self.assertEqual(None, self.uvc._connect_addr)
def test_camera_image_tries_login_bails_on_failure(self): def test_camera_image_tries_login_bails_on_failure(self):
""""Test retrieving failure."""
with mock.patch.object(self.uvc, '_login') as mock_login: with mock.patch.object(self.uvc, '_login') as mock_login:
mock_login.return_value = False mock_login.return_value = False
self.assertEqual(None, self.uvc.camera_image()) self.assertEqual(None, self.uvc.camera_image())
mock_login.assert_called_once_with() mock_login.assert_called_once_with()
def test_camera_image_logged_in(self): def test_camera_image_logged_in(self):
""""Test the login state."""
self.uvc._camera = mock.MagicMock() self.uvc._camera = mock.MagicMock()
self.assertEqual(self.uvc._camera.get_snapshot.return_value, self.assertEqual(self.uvc._camera.get_snapshot.return_value,
self.uvc.camera_image()) self.uvc.camera_image())
def test_camera_image_error(self): def test_camera_image_error(self):
""""Test the camera image error."""
self.uvc._camera = mock.MagicMock() self.uvc._camera = mock.MagicMock()
self.uvc._camera.get_snapshot.side_effect = camera.CameraConnectError self.uvc._camera.get_snapshot.side_effect = camera.CameraConnectError
self.assertEqual(None, self.uvc.camera_image()) self.assertEqual(None, self.uvc.camera_image())
def test_camera_image_reauths(self): def test_camera_image_reauths(self):
""""Test the re-authentication."""
responses = [0] responses = [0]
def fake_snapshot(): def fake_snapshot():
@ -197,6 +211,7 @@ class TestUVC(unittest.TestCase):
self.assertEqual([], responses) self.assertEqual([], responses)
def test_camera_image_reauths_only_once(self): def test_camera_image_reauths_only_once(self):
""""Test if the re-authentication only happens once."""
self.uvc._camera = mock.MagicMock() self.uvc._camera = mock.MagicMock()
self.uvc._camera.get_snapshot.side_effect = camera.CameraAuthError self.uvc._camera.get_snapshot.side_effect = camera.CameraAuthError
with mock.patch.object(self.uvc, '_login') as mock_login: with mock.patch.object(self.uvc, '_login') as mock_login:

View File

@ -0,0 +1 @@
"""The tests for Device tracker platforms."""

View File

@ -1,4 +1,4 @@
"""Tests for the device tracker compoment.""" """The tests for the device tracker component."""
# pylint: disable=protected-access,too-many-public-methods # pylint: disable=protected-access,too-many-public-methods
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -17,15 +17,15 @@ from tests.common import (
class TestComponentsDeviceTracker(unittest.TestCase): class TestComponentsDeviceTracker(unittest.TestCase):
""" Tests homeassistant.components.device_tracker module. """ """Test the Device tracker."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
""" Init needed objects. """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.yaml_devices = self.hass.config.path(device_tracker.YAML_DEVICES) self.yaml_devices = self.hass.config.path(device_tracker.YAML_DEVICES)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
try: try:
os.remove(self.yaml_devices) os.remove(self.yaml_devices)
except FileNotFoundError: except FileNotFoundError:
@ -34,7 +34,7 @@ class TestComponentsDeviceTracker(unittest.TestCase):
self.hass.stop() self.hass.stop()
def test_is_on(self): def test_is_on(self):
""" Test is_on method. """ """Test is_on method."""
entity_id = device_tracker.ENTITY_ID_FORMAT.format('test') entity_id = device_tracker.ENTITY_ID_FORMAT.format('test')
self.hass.states.set(entity_id, STATE_HOME) self.hass.states.set(entity_id, STATE_HOME)
@ -46,6 +46,7 @@ class TestComponentsDeviceTracker(unittest.TestCase):
self.assertFalse(device_tracker.is_on(self.hass, entity_id)) self.assertFalse(device_tracker.is_on(self.hass, entity_id))
def test_reading_yaml_config(self): def test_reading_yaml_config(self):
"""Test the rendering of the YAML configuration."""
dev_id = 'test' dev_id = 'test'
device = device_tracker.Device( device = device_tracker.Device(
self.hass, timedelta(seconds=180), 0, True, dev_id, self.hass, timedelta(seconds=180), 0, True, dev_id,
@ -62,9 +63,11 @@ class TestComponentsDeviceTracker(unittest.TestCase):
self.assertEqual(device.consider_home, config.consider_home) self.assertEqual(device.consider_home, config.consider_home)
def test_setup_without_yaml_file(self): def test_setup_without_yaml_file(self):
"""Test with no YAML file."""
self.assertTrue(device_tracker.setup(self.hass, {})) self.assertTrue(device_tracker.setup(self.hass, {}))
def test_adding_unknown_device_to_config(self): def test_adding_unknown_device_to_config(self):
"""Test the adding of unknown devices to configuration file."""
scanner = get_component('device_tracker.test').SCANNER scanner = get_component('device_tracker.test').SCANNER
scanner.reset() scanner.reset()
scanner.come_home('DEV1') scanner.come_home('DEV1')
@ -78,6 +81,7 @@ class TestComponentsDeviceTracker(unittest.TestCase):
assert config[0].track assert config[0].track
def test_discovery(self): def test_discovery(self):
"""Test discovery."""
scanner = get_component('device_tracker.test').SCANNER scanner = get_component('device_tracker.test').SCANNER
with patch.dict(device_tracker.DISCOVERY_PLATFORMS, {'test': 'test'}): with patch.dict(device_tracker.DISCOVERY_PLATFORMS, {'test': 'test'}):
@ -88,6 +92,7 @@ class TestComponentsDeviceTracker(unittest.TestCase):
self.assertTrue(mock_scan.called) self.assertTrue(mock_scan.called)
def test_update_stale(self): def test_update_stale(self):
"""Test stalled update."""
scanner = get_component('device_tracker.test').SCANNER scanner = get_component('device_tracker.test').SCANNER
scanner.reset() scanner.reset()
scanner.come_home('DEV1') scanner.come_home('DEV1')
@ -117,6 +122,7 @@ class TestComponentsDeviceTracker(unittest.TestCase):
self.hass.states.get('device_tracker.dev1').state) self.hass.states.get('device_tracker.dev1').state)
def test_entity_attributes(self): def test_entity_attributes(self):
"""Test the entity attributes."""
dev_id = 'test_entity' dev_id = 'test_entity'
entity_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id) entity_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id)
friendly_name = 'Paulus' friendly_name = 'Paulus'
@ -135,6 +141,7 @@ class TestComponentsDeviceTracker(unittest.TestCase):
self.assertEqual(picture, attrs.get(ATTR_ENTITY_PICTURE)) self.assertEqual(picture, attrs.get(ATTR_ENTITY_PICTURE))
def test_device_hidden(self): def test_device_hidden(self):
"""Test hidden devices."""
dev_id = 'test_entity' dev_id = 'test_entity'
entity_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id) entity_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id)
device = device_tracker.Device( device = device_tracker.Device(
@ -152,6 +159,7 @@ class TestComponentsDeviceTracker(unittest.TestCase):
.attributes.get(ATTR_HIDDEN)) .attributes.get(ATTR_HIDDEN))
def test_group_all_devices(self): def test_group_all_devices(self):
"""Test grouping of devices."""
dev_id = 'test_entity' dev_id = 'test_entity'
entity_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id) entity_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id)
device = device_tracker.Device( device = device_tracker.Device(
@ -173,6 +181,7 @@ class TestComponentsDeviceTracker(unittest.TestCase):
@patch('homeassistant.components.device_tracker.DeviceTracker.see') @patch('homeassistant.components.device_tracker.DeviceTracker.see')
def test_see_service(self, mock_see): def test_see_service(self, mock_see):
"""Test the see service."""
self.assertTrue(device_tracker.setup(self.hass, {})) self.assertTrue(device_tracker.setup(self.hass, {}))
mac = 'AB:CD:EF:GH' mac = 'AB:CD:EF:GH'
dev_id = 'some_device' dev_id = 'some_device'

View File

@ -1,9 +1,4 @@
""" """The tests the for Locative device tracker platform."""
tests.components.device_tracker.test_locative
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests the locative device tracker component.
"""
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -22,19 +17,17 @@ hass = None
def _url(data={}): def _url(data={}):
""" Helper method to generate urls. """ """Helper method to generate URLs."""
data = "&".join(["{}={}".format(name, value) for data = "&".join(["{}={}".format(name, value) for
name, value in data.items()]) name, value in data.items()])
return "{}{}locative?{}".format(HTTP_BASE_URL, const.URL_API, data) return "{}{}locative?{}".format(HTTP_BASE_URL, const.URL_API, data)
def setUpModule(): # pylint: disable=invalid-name def setUpModule(): # pylint: disable=invalid-name
""" Initalizes a Home Assistant server. """ """Initalize a Home Assistant server."""
global hass global hass
hass = get_test_home_assistant() hass = get_test_home_assistant()
# Set up server
bootstrap.setup_component(hass, http.DOMAIN, { bootstrap.setup_component(hass, http.DOMAIN, {
http.DOMAIN: { http.DOMAIN: {
http.CONF_SERVER_PORT: SERVER_PORT http.CONF_SERVER_PORT: SERVER_PORT
@ -55,19 +48,21 @@ def setUpModule(): # pylint: disable=invalid-name
def tearDownModule(): # pylint: disable=invalid-name def tearDownModule(): # pylint: disable=invalid-name
""" Stops the Home Assistant server. """ """Stop the Home Assistant server."""
hass.stop() hass.stop()
# Stub out update_config or else Travis CI raises an exception # Stub out update_config or else Travis CI raises an exception
@patch('homeassistant.components.device_tracker.update_config') @patch('homeassistant.components.device_tracker.update_config')
class TestLocative(unittest.TestCase): class TestLocative(unittest.TestCase):
""" Test Locative """ """Test Locative platform."""
def tearDown(self): def tearDown(self):
"""Stop everything that was started."""
hass.pool.block_till_done() hass.pool.block_till_done()
def test_missing_data(self, update_config): def test_missing_data(self, update_config):
"""Test missing data."""
data = { data = {
'latitude': 1.0, 'latitude': 1.0,
'longitude': 1.1, 'longitude': 1.1,
@ -117,7 +112,7 @@ class TestLocative(unittest.TestCase):
self.assertEqual(422, req.status_code) self.assertEqual(422, req.status_code)
def test_enter_and_exit(self, update_config): def test_enter_and_exit(self, update_config):
""" Test when there is a known zone """ """Test when there is a known zone."""
data = { data = {
'latitude': 40.7855, 'latitude': 40.7855,
'longitude': -111.7367, 'longitude': -111.7367,
@ -173,8 +168,7 @@ class TestLocative(unittest.TestCase):
self.assertEqual(state_name, 'work') self.assertEqual(state_name, 'work')
def test_exit_after_enter(self, update_config): def test_exit_after_enter(self, update_config):
""" Test when an exit message comes after an enter message """ """Test when an exit message comes after an enter message."""
data = { data = {
'latitude': 40.7855, 'latitude': 40.7855,
'longitude': -111.7367, 'longitude': -111.7367,
@ -213,8 +207,7 @@ class TestLocative(unittest.TestCase):
self.assertEqual(state.state, 'work') self.assertEqual(state.state, 'work')
def test_exit_first(self, update_config): def test_exit_first(self, update_config):
""" Test when an exit message is sent first on a new device """ """Test when an exit message is sent first on a new device."""
data = { data = {
'latitude': 40.7855, 'latitude': 40.7855,
'longitude': -111.7367, 'longitude': -111.7367,

View File

@ -1,9 +1,4 @@
""" """The tests for the MQTT device tracker platform."""
tests.components.device_tracker.test_mqtt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests the MQTT device tracker component.
"""
import unittest import unittest
import os import os
@ -15,19 +10,22 @@ from tests.common import (
class TestComponentsDeviceTrackerMQTT(unittest.TestCase): class TestComponentsDeviceTrackerMQTT(unittest.TestCase):
"""Test MQTT device tracker platform."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
""" Init needed objects. """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
mock_mqtt_component(self.hass) mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
try: try:
os.remove(self.hass.config.path(device_tracker.YAML_DEVICES)) os.remove(self.hass.config.path(device_tracker.YAML_DEVICES))
except FileNotFoundError: except FileNotFoundError:
pass pass
def test_new_message(self): def test_new_message(self):
"""Test new message."""
dev_id = 'paulus' dev_id = 'paulus'
enttiy_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id) enttiy_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id)
topic = '/location/paulus' topic = '/location/paulus'

View File

@ -1,9 +1,4 @@
""" """The tests for the Owntracks device tracker."""
tests.components.device_tracker.test_owntracks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Owntracks device tracker.
"""
import json import json
import os import os
import unittest import unittest
@ -11,9 +6,7 @@ import unittest
from collections import defaultdict from collections import defaultdict
from homeassistant.components import device_tracker from homeassistant.components import device_tracker
from homeassistant.const import (STATE_NOT_HOME, CONF_PLATFORM) from homeassistant.const import (STATE_NOT_HOME, CONF_PLATFORM)
import homeassistant.components.device_tracker.owntracks as owntracks import homeassistant.components.device_tracker.owntracks as owntracks
from tests.common import ( from tests.common import (
@ -101,10 +94,10 @@ REGION_LEAVE_INACCURATE_MESSAGE = {
class TestDeviceTrackerOwnTracks(unittest.TestCase): class TestDeviceTrackerOwnTracks(unittest.TestCase):
""" Test the Template sensor. """ """Test the OwnTrack sensor."""
def setup_method(self, method): def setup_method(self, method):
""" Init needed objects. """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
mock_mqtt_component(self.hass) mock_mqtt_component(self.hass)
self.assertTrue(device_tracker.setup(self.hass, { self.assertTrue(device_tracker.setup(self.hass, {
@ -155,7 +148,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
owntracks.MOBILE_BEACONS_ACTIVE = defaultdict(list) owntracks.MOBILE_BEACONS_ACTIVE = defaultdict(list)
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
try: try:
@ -164,39 +157,48 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
pass pass
def send_message(self, topic, message): def send_message(self, topic, message):
"""Test the sending of a message."""
fire_mqtt_message( fire_mqtt_message(
self.hass, topic, json.dumps(message)) self.hass, topic, json.dumps(message))
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
def assert_location_state(self, location): def assert_location_state(self, location):
"""Test the assertion of a location state."""
state = self.hass.states.get(DEVICE_TRACKER_STATE) state = self.hass.states.get(DEVICE_TRACKER_STATE)
self.assertEqual(state.state, location) self.assertEqual(state.state, location)
def assert_location_latitude(self, latitude): def assert_location_latitude(self, latitude):
"""Test the assertion of a location latitude."""
state = self.hass.states.get(DEVICE_TRACKER_STATE) state = self.hass.states.get(DEVICE_TRACKER_STATE)
self.assertEqual(state.attributes.get('latitude'), latitude) self.assertEqual(state.attributes.get('latitude'), latitude)
def assert_location_longitude(self, longitude): def assert_location_longitude(self, longitude):
"""Test the assertion of a location longitude."""
state = self.hass.states.get(DEVICE_TRACKER_STATE) state = self.hass.states.get(DEVICE_TRACKER_STATE)
self.assertEqual(state.attributes.get('longitude'), longitude) self.assertEqual(state.attributes.get('longitude'), longitude)
def assert_location_accuracy(self, accuracy): def assert_location_accuracy(self, accuracy):
"""Test the assertion of a location accuracy."""
state = self.hass.states.get(DEVICE_TRACKER_STATE) state = self.hass.states.get(DEVICE_TRACKER_STATE)
self.assertEqual(state.attributes.get('gps_accuracy'), accuracy) self.assertEqual(state.attributes.get('gps_accuracy'), accuracy)
def assert_tracker_state(self, location): def assert_tracker_state(self, location):
"""Test the assertion of a tracker state."""
state = self.hass.states.get(REGION_TRACKER_STATE) state = self.hass.states.get(REGION_TRACKER_STATE)
self.assertEqual(state.state, location) self.assertEqual(state.state, location)
def assert_tracker_latitude(self, latitude): def assert_tracker_latitude(self, latitude):
"""Test the assertion of a tracker latitude."""
state = self.hass.states.get(REGION_TRACKER_STATE) state = self.hass.states.get(REGION_TRACKER_STATE)
self.assertEqual(state.attributes.get('latitude'), latitude) self.assertEqual(state.attributes.get('latitude'), latitude)
def assert_tracker_accuracy(self, accuracy): def assert_tracker_accuracy(self, accuracy):
"""Test the assertion of a tracker accuracy."""
state = self.hass.states.get(REGION_TRACKER_STATE) state = self.hass.states.get(REGION_TRACKER_STATE)
self.assertEqual(state.attributes.get('gps_accuracy'), accuracy) self.assertEqual(state.attributes.get('gps_accuracy'), accuracy)
def test_location_update(self): def test_location_update(self):
"""Test the update of a location."""
self.send_message(LOCATION_TOPIC, LOCATION_MESSAGE) self.send_message(LOCATION_TOPIC, LOCATION_MESSAGE)
self.assert_location_latitude(2.0) self.assert_location_latitude(2.0)
@ -204,6 +206,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_state('outer') self.assert_location_state('outer')
def test_location_inaccurate_gps(self): def test_location_inaccurate_gps(self):
"""Test the location for inaccurate GPS information."""
self.send_message(LOCATION_TOPIC, LOCATION_MESSAGE) self.send_message(LOCATION_TOPIC, LOCATION_MESSAGE)
self.send_message(LOCATION_TOPIC, LOCATION_MESSAGE_INACCURATE) self.send_message(LOCATION_TOPIC, LOCATION_MESSAGE_INACCURATE)
@ -211,6 +214,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_longitude(1.0) self.assert_location_longitude(1.0)
def test_event_entry_exit(self): def test_event_entry_exit(self):
"""Test the entry event."""
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE) self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
# Enter uses the zone's gps co-ords # Enter uses the zone's gps co-ords
@ -236,6 +240,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assertFalse(owntracks.REGIONS_ENTERED[USER]) self.assertFalse(owntracks.REGIONS_ENTERED[USER])
def test_event_entry_exit_inaccurate(self): def test_event_entry_exit_inaccurate(self):
"""Test the event for inaccurate exit."""
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE) self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
# Enter uses the zone's gps co-ords # Enter uses the zone's gps co-ords
@ -254,6 +259,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assertFalse(owntracks.REGIONS_ENTERED[USER]) self.assertFalse(owntracks.REGIONS_ENTERED[USER])
def test_event_exit_outside_zone_sets_away(self): def test_event_exit_outside_zone_sets_away(self):
"""Test the event for exit zone."""
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE) self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
self.assert_location_state('inner') self.assert_location_state('inner')
@ -267,6 +273,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_state(STATE_NOT_HOME) self.assert_location_state(STATE_NOT_HOME)
def test_event_entry_exit_right_order(self): def test_event_entry_exit_right_order(self):
"""Test the event for ordering."""
# Enter inner zone # Enter inner zone
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE) self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
@ -297,6 +304,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_accuracy(60.0) self.assert_location_accuracy(60.0)
def test_event_entry_exit_wrong_order(self): def test_event_entry_exit_wrong_order(self):
"""Test the event for wrong order."""
# Enter inner zone # Enter inner zone
self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE) self.send_message(EVENT_TOPIC, REGION_ENTER_MESSAGE)
self.assert_location_state('inner') self.assert_location_state('inner')
@ -318,6 +326,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_state('outer') self.assert_location_state('outer')
def test_event_entry_exit_passive_zone(self): def test_event_entry_exit_passive_zone(self):
"""Test the event for passive zone exits."""
# Enter passive zone # Enter passive zone
message = REGION_ENTER_MESSAGE.copy() message = REGION_ENTER_MESSAGE.copy()
message['desc'] = "passive" message['desc'] = "passive"
@ -354,6 +363,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_accuracy(60.0) self.assert_location_accuracy(60.0)
def test_event_entry_unknown_zone(self): def test_event_entry_unknown_zone(self):
"""Test the event for unknown zone."""
# Just treat as location update # Just treat as location update
message = REGION_ENTER_MESSAGE.copy() message = REGION_ENTER_MESSAGE.copy()
message['desc'] = "unknown" message['desc'] = "unknown"
@ -362,6 +372,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_state('outer') self.assert_location_state('outer')
def test_event_exit_unknown_zone(self): def test_event_exit_unknown_zone(self):
"""Test the event for unknown zone."""
# Just treat as location update # Just treat as location update
message = REGION_LEAVE_MESSAGE.copy() message = REGION_LEAVE_MESSAGE.copy()
message['desc'] = "unknown" message['desc'] = "unknown"
@ -370,6 +381,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_state('outer') self.assert_location_state('outer')
def test_event_entry_zone_loading_dash(self): def test_event_entry_zone_loading_dash(self):
"""Test the event for zone landing."""
# Make sure the leading - is ignored # Make sure the leading - is ignored
# Ownracks uses this to switch on hold # Ownracks uses this to switch on hold
message = REGION_ENTER_MESSAGE.copy() message = REGION_ENTER_MESSAGE.copy()
@ -379,6 +391,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_location_state('inner') self.assert_location_state('inner')
def test_mobile_enter_move_beacon(self): def test_mobile_enter_move_beacon(self):
"""Test the movement of a beacon."""
# Enter mobile beacon, should set location # Enter mobile beacon, should set location
message = REGION_ENTER_MESSAGE.copy() message = REGION_ENTER_MESSAGE.copy()
message['desc'] = IBEACON_DEVICE message['desc'] = IBEACON_DEVICE
@ -396,6 +409,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_tracker_state(STATE_NOT_HOME) self.assert_tracker_state(STATE_NOT_HOME)
def test_mobile_enter_exit_region_beacon(self): def test_mobile_enter_exit_region_beacon(self):
"""Test the enter and the exit of a region beacon."""
# Start tracking beacon # Start tracking beacon
message = REGION_ENTER_MESSAGE.copy() message = REGION_ENTER_MESSAGE.copy()
message['desc'] = IBEACON_DEVICE message['desc'] = IBEACON_DEVICE
@ -418,6 +432,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_tracker_latitude(2.0) self.assert_tracker_latitude(2.0)
def test_mobile_exit_move_beacon(self): def test_mobile_exit_move_beacon(self):
"""Test the exit move of a beacon."""
# Start tracking beacon # Start tracking beacon
message = REGION_ENTER_MESSAGE.copy() message = REGION_ENTER_MESSAGE.copy()
message['desc'] = IBEACON_DEVICE message['desc'] = IBEACON_DEVICE
@ -440,6 +455,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assert_tracker_latitude(3.0) self.assert_tracker_latitude(3.0)
def test_mobile_multiple_async_enter_exit(self): def test_mobile_multiple_async_enter_exit(self):
"""Test the multiple entering."""
# Test race condition # Test race condition
enter_message = REGION_ENTER_MESSAGE.copy() enter_message = REGION_ENTER_MESSAGE.copy()
enter_message['desc'] = IBEACON_DEVICE enter_message['desc'] = IBEACON_DEVICE
@ -460,6 +476,7 @@ class TestDeviceTrackerOwnTracks(unittest.TestCase):
self.assertEqual(owntracks.MOBILE_BEACONS_ACTIVE['greg_phone'], []) self.assertEqual(owntracks.MOBILE_BEACONS_ACTIVE['greg_phone'], [])
def test_mobile_multiple_enter_exit(self): def test_mobile_multiple_enter_exit(self):
"""Test the multiple entering."""
# Should only happen if the iphone dies # Should only happen if the iphone dies
enter_message = REGION_ENTER_MESSAGE.copy() enter_message = REGION_ENTER_MESSAGE.copy()
enter_message['desc'] = IBEACON_DEVICE enter_message['desc'] = IBEACON_DEVICE

View File

@ -1,8 +1,4 @@
""" """The tests for the Unifi WAP device tracker platform."""
homeassistant.components.device_tracker.unifi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Device tracker platform that supports scanning a Unifi WAP controller
"""
import unittest import unittest
from unittest import mock from unittest import mock
import urllib import urllib
@ -13,9 +9,12 @@ from unifi import controller
class TestUnifiScanner(unittest.TestCase): class TestUnifiScanner(unittest.TestCase):
"""Test the Unifiy platform."""
@mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner') @mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner')
@mock.patch.object(controller, 'Controller') @mock.patch.object(controller, 'Controller')
def test_config_minimal(self, mock_ctrl, mock_scanner): def test_config_minimal(self, mock_ctrl, mock_scanner):
"""Test the setup with minimal configuration."""
config = { config = {
'device_tracker': { 'device_tracker': {
CONF_USERNAME: 'foo', CONF_USERNAME: 'foo',
@ -31,6 +30,7 @@ class TestUnifiScanner(unittest.TestCase):
@mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner') @mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner')
@mock.patch.object(controller, 'Controller') @mock.patch.object(controller, 'Controller')
def test_config_full(self, mock_ctrl, mock_scanner): def test_config_full(self, mock_ctrl, mock_scanner):
"""Test the setup with full configuration."""
config = { config = {
'device_tracker': { 'device_tracker': {
CONF_USERNAME: 'foo', CONF_USERNAME: 'foo',
@ -48,6 +48,7 @@ class TestUnifiScanner(unittest.TestCase):
@mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner') @mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner')
@mock.patch.object(controller, 'Controller') @mock.patch.object(controller, 'Controller')
def test_config_error(self, mock_ctrl, mock_scanner): def test_config_error(self, mock_ctrl, mock_scanner):
"""Test for configuration errors."""
config = { config = {
'device_tracker': { 'device_tracker': {
CONF_HOST: 'myhost', CONF_HOST: 'myhost',
@ -61,6 +62,7 @@ class TestUnifiScanner(unittest.TestCase):
@mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner') @mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner')
@mock.patch.object(controller, 'Controller') @mock.patch.object(controller, 'Controller')
def test_config_badport(self, mock_ctrl, mock_scanner): def test_config_badport(self, mock_ctrl, mock_scanner):
"""Test the setup with a bad port."""
config = { config = {
'device_tracker': { 'device_tracker': {
CONF_USERNAME: 'foo', CONF_USERNAME: 'foo',
@ -76,6 +78,7 @@ class TestUnifiScanner(unittest.TestCase):
@mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner') @mock.patch('homeassistant.components.device_tracker.unifi.UnifiScanner')
@mock.patch.object(controller, 'Controller') @mock.patch.object(controller, 'Controller')
def test_config_controller_failed(self, mock_ctrl, mock_scanner): def test_config_controller_failed(self, mock_ctrl, mock_scanner):
"""Test for controller failure."""
config = { config = {
'device_tracker': { 'device_tracker': {
CONF_USERNAME: 'foo', CONF_USERNAME: 'foo',
@ -88,6 +91,7 @@ class TestUnifiScanner(unittest.TestCase):
self.assertFalse(result) self.assertFalse(result)
def test_scanner_update(self): def test_scanner_update(self):
"""Test the scanner update."""
ctrl = mock.MagicMock() ctrl = mock.MagicMock()
fake_clients = [ fake_clients = [
{'mac': '123'}, {'mac': '123'},
@ -98,12 +102,14 @@ class TestUnifiScanner(unittest.TestCase):
ctrl.get_clients.assert_called_once_with() ctrl.get_clients.assert_called_once_with()
def test_scanner_update_error(self): def test_scanner_update_error(self):
"""Test the scanner update for error."""
ctrl = mock.MagicMock() ctrl = mock.MagicMock()
ctrl.get_clients.side_effect = urllib.error.HTTPError( ctrl.get_clients.side_effect = urllib.error.HTTPError(
'/', 500, 'foo', {}, None) '/', 500, 'foo', {}, None)
unifi.UnifiScanner(ctrl) unifi.UnifiScanner(ctrl)
def test_scan_devices(self): def test_scan_devices(self):
"""Test the scanning for devices."""
ctrl = mock.MagicMock() ctrl = mock.MagicMock()
fake_clients = [ fake_clients = [
{'mac': '123'}, {'mac': '123'},
@ -114,6 +120,7 @@ class TestUnifiScanner(unittest.TestCase):
self.assertEqual(set(['123', '234']), set(scanner.scan_devices())) self.assertEqual(set(['123', '234']), set(scanner.scan_devices()))
def test_get_device_name(self): def test_get_device_name(self):
"""Test the getting of device names."""
ctrl = mock.MagicMock() ctrl = mock.MagicMock()
fake_clients = [ fake_clients = [
{'mac': '123', 'hostname': 'foobar'}, {'mac': '123', 'hostname': 'foobar'},

View File

@ -0,0 +1 @@
"""The tests for Garage door platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for the Demo Garage door platform."""
tests.components.garage_door.test_demo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests demo garage door component.
"""
import unittest import unittest
import homeassistant.components.garage_door as gd import homeassistant.components.garage_door as gd
@ -16,9 +11,10 @@ RIGHT = 'garage_door.right_garage_door'
class TestGarageDoorDemo(unittest.TestCase): class TestGarageDoorDemo(unittest.TestCase):
""" Test the demo garage door. """ """Test the demo garage door."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.assertTrue(gd.setup(self.hass, { self.assertTrue(gd.setup(self.hass, {
'garage_door': { 'garage_door': {
@ -27,10 +23,11 @@ class TestGarageDoorDemo(unittest.TestCase):
})) }))
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_is_closed(self): def test_is_closed(self):
"""Test if door is closed."""
self.assertTrue(gd.is_closed(self.hass, LEFT)) self.assertTrue(gd.is_closed(self.hass, LEFT))
self.hass.states.is_state(LEFT, 'close') self.hass.states.is_state(LEFT, 'close')
@ -38,15 +35,15 @@ class TestGarageDoorDemo(unittest.TestCase):
self.hass.states.is_state(RIGHT, 'open') self.hass.states.is_state(RIGHT, 'open')
def test_open_door(self): def test_open_door(self):
"""Test opeing of the door."""
gd.open_door(self.hass, LEFT) gd.open_door(self.hass, LEFT)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertFalse(gd.is_closed(self.hass, LEFT)) self.assertFalse(gd.is_closed(self.hass, LEFT))
def test_close_door(self): def test_close_door(self):
"""Test closing ot the door."""
gd.close_door(self.hass, RIGHT) gd.close_door(self.hass, RIGHT)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertTrue(gd.is_closed(self.hass, RIGHT)) self.assertTrue(gd.is_closed(self.hass, RIGHT))

View File

@ -0,0 +1 @@
"""The tests for Light platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for the Light component."""
tests.components.test_init
~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests light component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
import os import os
@ -18,13 +13,14 @@ from tests.common import mock_service, get_test_home_assistant
class TestLight(unittest.TestCase): class TestLight(unittest.TestCase):
""" Test the light module. """ """Test the light module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
user_light_file = self.hass.config.path(light.LIGHT_PROFILES_FILE) user_light_file = self.hass.config.path(light.LIGHT_PROFILES_FILE)
@ -33,7 +29,7 @@ class TestLight(unittest.TestCase):
os.remove(user_light_file) os.remove(user_light_file)
def test_methods(self): def test_methods(self):
""" Test if methods call the services as expected. """ """Test if methods call the services as expected."""
# Test is_on # Test is_on
self.hass.states.set('light.test', STATE_ON) self.hass.states.set('light.test', STATE_ON)
self.assertTrue(light.is_on(self.hass, 'light.test')) self.assertTrue(light.is_on(self.hass, 'light.test'))
@ -111,7 +107,7 @@ class TestLight(unittest.TestCase):
self.assertEqual('transition_val', call.data[light.ATTR_TRANSITION]) self.assertEqual('transition_val', call.data[light.ATTR_TRANSITION])
def test_services(self): def test_services(self):
""" Test the provided services. """ """Test the provided services."""
platform = loader.get_component('light.test') platform = loader.get_component('light.test')
platform.init() platform.init()
@ -245,7 +241,7 @@ class TestLight(unittest.TestCase):
data) data)
def test_broken_light_profiles(self): def test_broken_light_profiles(self):
""" Test light profiles. """ """Test light profiles."""
platform = loader.get_component('light.test') platform = loader.get_component('light.test')
platform.init() platform.init()
@ -261,7 +257,7 @@ class TestLight(unittest.TestCase):
)) ))
def test_light_profiles(self): def test_light_profiles(self):
""" Test light profiles. """ """Test light profiles."""
platform = loader.get_component('light.test') platform = loader.get_component('light.test')
platform.init() platform.init()

View File

@ -1,10 +1,6 @@
""" """The tests for the MQTT light platform.
tests.components.light.test_mqtt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests mqtt light. Configuration for RGB Version with brightness:
config for RGB Version with brightness:
light: light:
platform: mqtt platform: mqtt
@ -59,7 +55,6 @@ light:
qos: 0 qos: 0
payload_on: "on" payload_on: "on"
payload_off: "off" payload_off: "off"
""" """
import unittest import unittest
@ -70,17 +65,19 @@ from tests.common import (
class TestLightMQTT(unittest.TestCase): class TestLightMQTT(unittest.TestCase):
""" Test the MQTT light. """ """Test the MQTT light."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.mock_publish = mock_mqtt_component(self.hass) self.mock_publish = mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_fail_setup_if_no_command_topic(self): def test_fail_setup_if_no_command_topic(self):
"""Test if command fails with command topic."""
self.assertTrue(light.setup(self.hass, { self.assertTrue(light.setup(self.hass, {
'light': { 'light': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -90,6 +87,7 @@ class TestLightMQTT(unittest.TestCase):
self.assertIsNone(self.hass.states.get('light.test')) self.assertIsNone(self.hass.states.get('light.test'))
def test_no_color_or_brightness_if_no_topics(self): def test_no_color_or_brightness_if_no_topics(self):
"""Test if there is no color and brightness if no topic."""
self.assertTrue(light.setup(self.hass, { self.assertTrue(light.setup(self.hass, {
'light': { 'light': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -113,6 +111,7 @@ class TestLightMQTT(unittest.TestCase):
self.assertIsNone(state.attributes.get('brightness')) self.assertIsNone(state.attributes.get('brightness'))
def test_controlling_state_via_topic(self): def test_controlling_state_via_topic(self):
"""Test the controlling of the state via topic."""
self.assertTrue(light.setup(self.hass, { self.assertTrue(light.setup(self.hass, {
'light': { 'light': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -172,6 +171,7 @@ class TestLightMQTT(unittest.TestCase):
light_state.attributes.get('rgb_color')) light_state.attributes.get('rgb_color'))
def test_controlling_scale(self): def test_controlling_scale(self):
"""Test the controlling scale."""
self.assertTrue(light.setup(self.hass, { self.assertTrue(light.setup(self.hass, {
'light': { 'light': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -217,6 +217,7 @@ class TestLightMQTT(unittest.TestCase):
light_state.attributes['brightness']) light_state.attributes['brightness'])
def test_controlling_state_via_topic_with_templates(self): def test_controlling_state_via_topic_with_templates(self):
"""Test the setting og the state with a template."""
self.assertTrue(light.setup(self.hass, { self.assertTrue(light.setup(self.hass, {
'light': { 'light': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -250,6 +251,7 @@ class TestLightMQTT(unittest.TestCase):
self.assertEqual([1, 2, 3], state.attributes.get('rgb_color')) self.assertEqual([1, 2, 3], state.attributes.get('rgb_color'))
def test_sending_mqtt_commands_and_optimistic(self): def test_sending_mqtt_commands_and_optimistic(self):
"""Test the sending of command in optimistic mode."""
self.assertTrue(light.setup(self.hass, { self.assertTrue(light.setup(self.hass, {
'light': { 'light': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -307,6 +309,7 @@ class TestLightMQTT(unittest.TestCase):
self.assertEqual(50, state.attributes['brightness']) self.assertEqual(50, state.attributes['brightness'])
def test_show_brightness_if_only_command_topic(self): def test_show_brightness_if_only_command_topic(self):
"""Test the brightness if only a command topic is present."""
self.assertTrue(light.setup(self.hass, { self.assertTrue(light.setup(self.hass, {
'light': { 'light': {
'platform': 'mqtt', 'platform': 'mqtt',

View File

@ -1,10 +1,4 @@
""" """The tests for the Rfxtrx light platform."""
tests.components.light.test_rfxtrx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Rfxtrx light.
"""
import unittest import unittest
from homeassistant.components import rfxtrx as rfxtrx_core from homeassistant.components import rfxtrx as rfxtrx_core
@ -18,25 +12,25 @@ from tests.common import get_test_home_assistant
@pytest.mark.skipif(True, reason='Does not clean up properly, takes 100% CPU') @pytest.mark.skipif(True, reason='Does not clean up properly, takes 100% CPU')
class TestLightRfxtrx(unittest.TestCase): class TestLightRfxtrx(unittest.TestCase):
""" Test the Rfxtrx light. """ """Test the Rfxtrx light platform."""
def setUp(self): def setUp(self):
""" setup hass """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant(0) self.hass = get_test_home_assistant(0)
def tearDown(self): def tearDown(self):
""" Stop down stuff we started. """ """Stop everything that was started."""
rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS = [] rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS = []
rfxtrx_core.RFX_DEVICES = {} rfxtrx_core.RFX_DEVICES = {}
self.hass.stop() self.hass.stop()
def test_default_config(self): def test_default_config(self):
""" Test with 0 lights """ """Test with 0 lights."""
config = {'devices': {}} config = {'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -44,7 +38,7 @@ class TestLightRfxtrx(unittest.TestCase):
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
def test_one_sensor(self): def test_one_sensor(self):
""" Test with 1 light """ """Test with 1 light."""
config = {'devices': config = {'devices':
{'123efab1': { {'123efab1': {
'name': 'Test', 'name': 'Test',
@ -56,7 +50,7 @@ class TestLightRfxtrx(unittest.TestCase):
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -104,7 +98,7 @@ class TestLightRfxtrx(unittest.TestCase):
self.assertEqual(entity.brightness, 255) self.assertEqual(entity.brightness, 255)
def test_several_lights(self): def test_several_lights(self):
""" Test with 3 lights """ """Test with 3 lights."""
config = {'signal_repetitions': 3, config = {'signal_repetitions': 3,
'devices': 'devices':
{'123efab1': { {'123efab1': {
@ -119,7 +113,7 @@ class TestLightRfxtrx(unittest.TestCase):
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -145,12 +139,12 @@ class TestLightRfxtrx(unittest.TestCase):
self.assertEqual(3, device_num) self.assertEqual(3, device_num)
def test_discover_light(self): def test_discover_light(self):
""" Test with discover of light """ """Test with discovery of lights."""
config = {'automatic_add': True, 'devices': {}} config = {'automatic_add': True, 'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -209,12 +203,12 @@ class TestLightRfxtrx(unittest.TestCase):
self.assertEqual(2, len(devices)) self.assertEqual(2, len(devices))
def test_discover_light_noautoadd(self): def test_discover_light_noautoadd(self):
""" Test with discover of light when auto add is False """ """Test with discover of light when auto add is False."""
config = {'automatic_add': False, 'devices': {}} config = {'automatic_add': False, 'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -250,14 +244,14 @@ class TestLightRfxtrx(unittest.TestCase):
self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES)) self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
# trying to add a sensor # Trying to add a sensor
event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279') event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y') event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event) rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES)) self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
# trying to add a switch # Trying to add a switch
event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70') event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18, event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70]) 0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])

View File

@ -0,0 +1 @@
"""The tests for Lock platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for the Demo lock platform."""
tests.components.lock.test_demo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests demo lock component.
"""
import unittest import unittest
from homeassistant.components import lock from homeassistant.components import lock
@ -16,9 +11,10 @@ KITCHEN = 'lock.kitchen_door'
class TestLockDemo(unittest.TestCase): class TestLockDemo(unittest.TestCase):
""" Test the demo lock. """ """Test the demo lock."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.assertTrue(lock.setup(self.hass, { self.assertTrue(lock.setup(self.hass, {
'lock': { 'lock': {
@ -27,10 +23,11 @@ class TestLockDemo(unittest.TestCase):
})) }))
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_is_locked(self): def test_is_locked(self):
"""Test if lock is locked."""
self.assertTrue(lock.is_locked(self.hass, FRONT)) self.assertTrue(lock.is_locked(self.hass, FRONT))
self.hass.states.is_state(FRONT, 'locked') self.hass.states.is_state(FRONT, 'locked')
@ -38,15 +35,15 @@ class TestLockDemo(unittest.TestCase):
self.hass.states.is_state(KITCHEN, 'unlocked') self.hass.states.is_state(KITCHEN, 'unlocked')
def test_locking(self): def test_locking(self):
"""Test the locking of a lock."""
lock.lock(self.hass, KITCHEN) lock.lock(self.hass, KITCHEN)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertTrue(lock.is_locked(self.hass, KITCHEN)) self.assertTrue(lock.is_locked(self.hass, KITCHEN))
def test_unlocking(self): def test_unlocking(self):
"""Test the unlocking of a lock."""
lock.unlock(self.hass, FRONT) lock.unlock(self.hass, FRONT)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertFalse(lock.is_locked(self.hass, FRONT)) self.assertFalse(lock.is_locked(self.hass, FRONT))

View File

@ -1,6 +1,4 @@
""" """The tests for the MQTT lock platform."""
Tests MQTT lock.
"""
import unittest import unittest
from homeassistant.const import (STATE_LOCKED, STATE_UNLOCKED, from homeassistant.const import (STATE_LOCKED, STATE_UNLOCKED,
@ -12,15 +10,18 @@ from tests.common import (
class TestLockMQTT(unittest.TestCase): class TestLockMQTT(unittest.TestCase):
"""Test the MQTT lock.""" """Test the MQTT lock."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.mock_publish = mock_mqtt_component(self.hass) self.mock_publish = mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
"""Stop down stuff we started.""" """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_controlling_state_via_topic(self): def test_controlling_state_via_topic(self):
"""Test the controlling state via topic."""
self.assertTrue(lock.setup(self.hass, { self.assertTrue(lock.setup(self.hass, {
'lock': { 'lock': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -49,6 +50,7 @@ class TestLockMQTT(unittest.TestCase):
self.assertEqual(STATE_UNLOCKED, state.state) self.assertEqual(STATE_UNLOCKED, state.state)
def test_sending_mqtt_commands_and_optimistic(self): def test_sending_mqtt_commands_and_optimistic(self):
"""Test the sending MQTT commands in optimistic mode."""
self.assertTrue(lock.setup(self.hass, { self.assertTrue(lock.setup(self.hass, {
'lock': { 'lock': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -81,6 +83,7 @@ class TestLockMQTT(unittest.TestCase):
self.assertEqual(STATE_UNLOCKED, state.state) self.assertEqual(STATE_UNLOCKED, state.state)
def test_controlling_state_via_topic_and_json_message(self): def test_controlling_state_via_topic_and_json_message(self):
"""Test the controlling state via topic and JSON message."""
self.assertTrue(lock.setup(self.hass, { self.assertTrue(lock.setup(self.hass, {
'lock': { 'lock': {
'platform': 'mqtt', 'platform': 'mqtt',

View File

@ -0,0 +1 @@
"""The tests for Media player platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for the Cast Media player platform."""
tests.component.media_player.test_cast
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests cast media_player component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -12,10 +7,11 @@ from homeassistant.components.media_player import cast
class TestCastMediaPlayer(unittest.TestCase): class TestCastMediaPlayer(unittest.TestCase):
""" Test the media_player module. """ """Test the media_player module."""
@patch('homeassistant.components.media_player.cast.CastDevice') @patch('homeassistant.components.media_player.cast.CastDevice')
def test_filter_duplicates(self, mock_device): def test_filter_duplicates(self, mock_device):
"""Test filtering of duplicates."""
cast.setup_platform(None, { cast.setup_platform(None, {
'host': 'some_host' 'host': 'some_host'
}, lambda _: _) }, lambda _: _)

View File

@ -1,9 +1,4 @@
""" """The tests for the Demo Media player platform."""
tests.component.media_player.test_demo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests demo media_player component.
"""
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
import homeassistant.components.media_player as mp import homeassistant.components.media_player as mp
@ -14,16 +9,18 @@ entity_id = 'media_player.walkman'
class TestDemoMediaPlayer(unittest.TestCase): class TestDemoMediaPlayer(unittest.TestCase):
""" Test the media_player module. """ """Test the media_player module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_volume_services(self): def test_volume_services(self):
"""Test the volume service."""
assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}}) assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}})
state = self.hass.states.get(entity_id) state = self.hass.states.get(entity_id)
assert 1.0 == state.attributes.get('volume_level') assert 1.0 == state.attributes.get('volume_level')
@ -50,6 +47,7 @@ class TestDemoMediaPlayer(unittest.TestCase):
assert True is state.attributes.get('is_volume_muted') assert True is state.attributes.get('is_volume_muted')
def test_turning_off_and_on(self): def test_turning_off_and_on(self):
"""Test turn_on and turn_off."""
assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}}) assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}})
assert self.hass.states.is_state(entity_id, 'playing') assert self.hass.states.is_state(entity_id, 'playing')
@ -68,6 +66,7 @@ class TestDemoMediaPlayer(unittest.TestCase):
assert not mp.is_on(self.hass, entity_id) assert not mp.is_on(self.hass, entity_id)
def test_playing_pausing(self): def test_playing_pausing(self):
"""Test media_pause."""
assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}}) assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}})
assert self.hass.states.is_state(entity_id, 'playing') assert self.hass.states.is_state(entity_id, 'playing')
@ -88,6 +87,7 @@ class TestDemoMediaPlayer(unittest.TestCase):
assert self.hass.states.is_state(entity_id, 'playing') assert self.hass.states.is_state(entity_id, 'playing')
def test_prev_next_track(self): def test_prev_next_track(self):
"""Test media_next_track and media_prevoius_track ."""
assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}}) assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}})
state = self.hass.states.get(entity_id) state = self.hass.states.get(entity_id)
assert 1 == state.attributes.get('media_track') assert 1 == state.attributes.get('media_track')
@ -118,6 +118,7 @@ class TestDemoMediaPlayer(unittest.TestCase):
@patch('homeassistant.components.media_player.demo.DemoYoutubePlayer.' @patch('homeassistant.components.media_player.demo.DemoYoutubePlayer.'
'media_seek') 'media_seek')
def test_play_media(self, mock_seek): def test_play_media(self, mock_seek):
"""Test play_media ."""
assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}}) assert mp.setup(self.hass, {'media_player': {'platform': 'demo'}})
ent_id = 'media_player.living_room' ent_id = 'media_player.living_room'
state = self.hass.states.get(ent_id) state = self.hass.states.get(ent_id)

View File

@ -1,9 +1,4 @@
""" """The tests for the Universal Media player platform."""
tests.component.media_player.test_universal
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests universal media_player component.
"""
from copy import copy from copy import copy
import unittest import unittest
@ -17,9 +12,10 @@ from tests.common import mock_service, get_test_home_assistant
class MockMediaPlayer(media_player.MediaPlayerDevice): class MockMediaPlayer(media_player.MediaPlayerDevice):
""" Mock media player for testing """ """Mock media player for testing."""
def __init__(self, hass, name): def __init__(self, hass, name):
"""Initialize the media player."""
self.hass = hass self.hass = hass
self._name = name self._name = name
self.entity_id = media_player.ENTITY_ID_FORMAT.format(name) self.entity_id = media_player.ENTITY_ID_FORMAT.format(name)
@ -34,58 +30,59 @@ class MockMediaPlayer(media_player.MediaPlayerDevice):
@property @property
def name(self): def name(self):
""" name of player """ """Return the name of player."""
return self._name return self._name
@property @property
def state(self): def state(self):
""" state of the player """ """Return the state of the player."""
return self._state return self._state
@property @property
def volume_level(self): def volume_level(self):
""" volume level of player """ """The volume level of player."""
return self._volume_level return self._volume_level
@property @property
def is_volume_muted(self): def is_volume_muted(self):
""" if the media player is muted """ """Return true if the media player is muted."""
return self._is_volume_muted return self._is_volume_muted
@property @property
def supported_media_commands(self): def supported_media_commands(self):
""" supported media commands flag """ """Supported media commands flag."""
return self._supported_media_commands return self._supported_media_commands
def turn_on(self): def turn_on(self):
""" mock turn_on function """ """Mock turn_on function."""
self._state = STATE_UNKNOWN self._state = STATE_UNKNOWN
def turn_off(self): def turn_off(self):
""" mock turn_off function """ """Mock turn_off function."""
self._state = STATE_OFF self._state = STATE_OFF
def mute_volume(self): def mute_volume(self):
""" mock mute function """ """Mock mute function."""
self._is_volume_muted = ~self._is_volume_muted self._is_volume_muted = ~self._is_volume_muted
def set_volume_level(self, volume): def set_volume_level(self, volume):
""" mock set volume level """ """Mock set volume level."""
self._volume_level = volume self._volume_level = volume
def media_play(self): def media_play(self):
""" mock play """ """Mock play."""
self._state = STATE_PLAYING self._state = STATE_PLAYING
def media_pause(self): def media_pause(self):
""" mock pause """ """Mock pause."""
self._state = STATE_PAUSED self._state = STATE_PAUSED
class TestMediaPlayer(unittest.TestCase): class TestMediaPlayer(unittest.TestCase):
""" Test the media_player module. """ """Test the media_player module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.mock_mp_1 = MockMediaPlayer(self.hass, 'mock1') self.mock_mp_1 = MockMediaPlayer(self.hass, 'mock1')
@ -113,11 +110,11 @@ class TestMediaPlayer(unittest.TestCase):
'state': self.mock_state_switch_id}} 'state': self.mock_state_switch_id}}
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_check_config_children_only(self): def test_check_config_children_only(self):
""" Check config with only children """ """Check config with only children."""
config_start = copy(self.config_children_only) config_start = copy(self.config_children_only)
del config_start['platform'] del config_start['platform']
config_start['commands'] = {} config_start['commands'] = {}
@ -129,7 +126,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(config_start, self.config_children_only) self.assertEqual(config_start, self.config_children_only)
def test_check_config_children_and_attr(self): def test_check_config_children_and_attr(self):
""" Check config with children and attributes """ """Check config with children and attributes."""
config_start = copy(self.config_children_and_attr) config_start = copy(self.config_children_and_attr)
del config_start['platform'] del config_start['platform']
config_start['commands'] = {} config_start['commands'] = {}
@ -140,13 +137,13 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(config_start, self.config_children_and_attr) self.assertEqual(config_start, self.config_children_and_attr)
def test_check_config_no_name(self): def test_check_config_no_name(self):
""" Check config with no Name entry """ """Check config with no Name entry."""
response = universal.validate_config({'platform': 'universal'}) response = universal.validate_config({'platform': 'universal'})
self.assertFalse(response) self.assertFalse(response)
def test_check_config_bad_children(self): def test_check_config_bad_children(self):
""" Check config with bad children entry """ """Check config with bad children entry."""
config_no_children = {'name': 'test', 'platform': 'universal'} config_no_children = {'name': 'test', 'platform': 'universal'}
config_bad_children = {'name': 'test', 'children': {}, config_bad_children = {'name': 'test', 'children': {},
'platform': 'universal'} 'platform': 'universal'}
@ -160,7 +157,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual([], config_bad_children['children']) self.assertEqual([], config_bad_children['children'])
def test_check_config_bad_commands(self): def test_check_config_bad_commands(self):
""" Check config with bad commands entry """ """Check config with bad commands entry."""
config = {'name': 'test', 'commands': [], 'platform': 'universal'} config = {'name': 'test', 'commands': [], 'platform': 'universal'}
response = universal.validate_config(config) response = universal.validate_config(config)
@ -168,7 +165,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual({}, config['commands']) self.assertEqual({}, config['commands'])
def test_check_config_bad_attributes(self): def test_check_config_bad_attributes(self):
""" Check config with bad attributes """ """Check config with bad attributes."""
config = {'name': 'test', 'attributes': [], 'platform': 'universal'} config = {'name': 'test', 'attributes': [], 'platform': 'universal'}
response = universal.validate_config(config) response = universal.validate_config(config)
@ -176,7 +173,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual({}, config['attributes']) self.assertEqual({}, config['attributes'])
def test_check_config_bad_key(self): def test_check_config_bad_key(self):
""" check config with bad key """ """Check config with bad key."""
config = {'name': 'test', 'asdf': 5, 'platform': 'universal'} config = {'name': 'test', 'asdf': 5, 'platform': 'universal'}
response = universal.validate_config(config) response = universal.validate_config(config)
@ -184,12 +181,12 @@ class TestMediaPlayer(unittest.TestCase):
self.assertFalse('asdf' in config) self.assertFalse('asdf' in config)
def test_platform_setup(self): def test_platform_setup(self):
""" test platform setup """ """Test platform setup."""
config = {'name': 'test', 'platform': 'universal'} config = {'name': 'test', 'platform': 'universal'}
entities = [] entities = []
def add_devices(new_entities): def add_devices(new_entities):
""" add devices to list """ """Add devices to list."""
for dev in new_entities: for dev in new_entities:
entities.append(dev) entities.append(dev)
@ -199,7 +196,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual('test', entities[0].name) self.assertEqual('test', entities[0].name)
def test_master_state(self): def test_master_state(self):
""" test master state property """ """Test master state property."""
config = self.config_children_only config = self.config_children_only
universal.validate_config(config) universal.validate_config(config)
@ -208,20 +205,18 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(None, ump.master_state) self.assertEqual(None, ump.master_state)
def test_master_state_with_attrs(self): def test_master_state_with_attrs(self):
""" test master state property """ """Test master state property."""
config = self.config_children_and_attr config = self.config_children_and_attr
universal.validate_config(config) universal.validate_config(config)
ump = universal.UniversalMediaPlayer(self.hass, **config) ump = universal.UniversalMediaPlayer(self.hass, **config)
self.assertEqual(STATE_OFF, ump.master_state) self.assertEqual(STATE_OFF, ump.master_state)
self.hass.states.set(self.mock_state_switch_id, STATE_ON) self.hass.states.set(self.mock_state_switch_id, STATE_ON)
self.assertEqual(STATE_ON, ump.master_state) self.assertEqual(STATE_ON, ump.master_state)
def test_master_state_with_bad_attrs(self): def test_master_state_with_bad_attrs(self):
""" test master state property """ """Test master state property."""
config = self.config_children_and_attr config = self.config_children_and_attr
config['attributes']['state'] = 'bad.entity_id' config['attributes']['state'] = 'bad.entity_id'
universal.validate_config(config) universal.validate_config(config)
@ -231,7 +226,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(STATE_OFF, ump.master_state) self.assertEqual(STATE_OFF, ump.master_state)
def test_active_child_state(self): def test_active_child_state(self):
""" test active child state property """ """Test active child state property."""
config = self.config_children_only config = self.config_children_only
universal.validate_config(config) universal.validate_config(config)
@ -260,7 +255,7 @@ class TestMediaPlayer(unittest.TestCase):
ump._child_state.entity_id) ump._child_state.entity_id)
def test_name(self): def test_name(self):
""" test name property """ """Test name property."""
config = self.config_children_only config = self.config_children_only
universal.validate_config(config) universal.validate_config(config)
@ -269,7 +264,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(config['name'], ump.name) self.assertEqual(config['name'], ump.name)
def test_state_children_only(self): def test_state_children_only(self):
""" test media player state with only children """ """Test media player state with only children."""
config = self.config_children_only config = self.config_children_only
universal.validate_config(config) universal.validate_config(config)
@ -285,7 +280,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(STATE_PLAYING, ump.state) self.assertEqual(STATE_PLAYING, ump.state)
def test_state_with_children_and_attrs(self): def test_state_with_children_and_attrs(self):
""" test media player with children and master state """ """Test media player with children and master state."""
config = self.config_children_and_attr config = self.config_children_and_attr
universal.validate_config(config) universal.validate_config(config)
@ -309,7 +304,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(STATE_OFF, ump.state) self.assertEqual(STATE_OFF, ump.state)
def test_volume_level(self): def test_volume_level(self):
""" test volume level property """ """Test volume level property."""
config = self.config_children_only config = self.config_children_only
universal.validate_config(config) universal.validate_config(config)
@ -330,7 +325,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(1, ump.volume_level) self.assertEqual(1, ump.volume_level)
def test_is_volume_muted_children_only(self): def test_is_volume_muted_children_only(self):
""" test is volume muted property w/ children only """ """Test is volume muted property w/ children only."""
config = self.config_children_only config = self.config_children_only
universal.validate_config(config) universal.validate_config(config)
@ -351,7 +346,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertTrue(ump.is_volume_muted) self.assertTrue(ump.is_volume_muted)
def test_is_volume_muted_children_and_attr(self): def test_is_volume_muted_children_and_attr(self):
""" test is volume muted property w/ children and attrs """ """Test is volume muted property w/ children and attrs."""
config = self.config_children_and_attr config = self.config_children_and_attr
universal.validate_config(config) universal.validate_config(config)
@ -363,7 +358,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertTrue(ump.is_volume_muted) self.assertTrue(ump.is_volume_muted)
def test_supported_media_commands_children_only(self): def test_supported_media_commands_children_only(self):
""" test supported media commands with only children """ """Test supported media commands with only children."""
config = self.config_children_only config = self.config_children_only
universal.validate_config(config) universal.validate_config(config)
@ -380,7 +375,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(512, ump.supported_media_commands) self.assertEqual(512, ump.supported_media_commands)
def test_supported_media_commands_children_and_cmds(self): def test_supported_media_commands_children_and_cmds(self):
""" test supported media commands with children and attrs """ """Test supported media commands with children and attrs."""
config = self.config_children_and_attr config = self.config_children_and_attr
universal.validate_config(config) universal.validate_config(config)
config['commands']['turn_on'] = 'test' config['commands']['turn_on'] = 'test'
@ -405,7 +400,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(check_flags, ump.supported_media_commands) self.assertEqual(check_flags, ump.supported_media_commands)
def test_service_call_to_child(self): def test_service_call_to_child(self):
""" test a service call that should be routed to a child """ """Test a service call that should be routed to a child."""
config = self.config_children_only config = self.config_children_only
universal.validate_config(config) universal.validate_config(config)
@ -421,6 +416,7 @@ class TestMediaPlayer(unittest.TestCase):
self.assertEqual(1, len(self.mock_mp_2.turn_off_service_calls)) self.assertEqual(1, len(self.mock_mp_2.turn_off_service_calls))
def test_service_call_to_command(self): def test_service_call_to_command(self):
"""Test service call to command."""
config = self.config_children_only config = self.config_children_only
config['commands'] = \ config['commands'] = \
{'turn_off': {'service': 'test.turn_off', 'data': {}}} {'turn_off': {'service': 'test.turn_off', 'data': {}}}

View File

@ -0,0 +1 @@
"""The tests for notification platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for the command line notification platform."""
tests.components.notify.test_command_line
~~~~~~~~~~~~~~~~~~~~~~~~
Tests command line notification.
"""
import os import os
import tempfile import tempfile
import unittest import unittest
@ -14,16 +9,18 @@ from unittest.mock import patch
class TestCommandLine(unittest.TestCase): class TestCommandLine(unittest.TestCase):
""" Test the command line. """ """Test the command line notifications."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = core.HomeAssistant() self.hass = core.HomeAssistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_command_line_output(self): def test_command_line_output(self):
"""Test the command line output."""
with tempfile.TemporaryDirectory() as tempdirname: with tempfile.TemporaryDirectory() as tempdirname:
filename = os.path.join(tempdirname, 'message.txt') filename = os.path.join(tempdirname, 'message.txt')
message = 'one, two, testing, testing' message = 'one, two, testing, testing'
@ -44,7 +41,7 @@ class TestCommandLine(unittest.TestCase):
@patch('homeassistant.components.notify.command_line._LOGGER.error') @patch('homeassistant.components.notify.command_line._LOGGER.error')
def test_error_for_none_zero_exit_code(self, mock_error): def test_error_for_none_zero_exit_code(self, mock_error):
""" Test if an error if logged for non zero exit codes. """ """Test if an error if logged for non zero exit codes."""
self.assertTrue(notify.setup(self.hass, { self.assertTrue(notify.setup(self.hass, {
'notify': { 'notify': {
'name': 'test', 'name': 'test',

View File

@ -1,9 +1,4 @@
""" """The tests for the notify demo platform."""
tests.components.notify.test_demo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests notify demo component.
"""
import unittest import unittest
import homeassistant.components.notify as notify import homeassistant.components.notify as notify
@ -13,9 +8,10 @@ from tests.common import get_test_home_assistant
class TestNotifyDemo(unittest.TestCase): class TestNotifyDemo(unittest.TestCase):
""" Test the demo notify. """ """Test the demo notify."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.assertTrue(notify.setup(self.hass, { self.assertTrue(notify.setup(self.hass, {
'notify': { 'notify': {
@ -25,15 +21,17 @@ class TestNotifyDemo(unittest.TestCase):
self.events = [] self.events = []
def record_event(event): def record_event(event):
"""Record event to send notification."""
self.events.append(event) self.events.append(event)
self.hass.bus.listen(demo.EVENT_NOTIFY, record_event) self.hass.bus.listen(demo.EVENT_NOTIFY, record_event)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """"Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_sending_templated_message(self): def test_sending_templated_message(self):
"""Send a templated message."""
self.hass.states.set('sensor.temperature', 10) self.hass.states.set('sensor.temperature', 10)
notify.send_message(self.hass, '{{ states.sensor.temperature.state }}', notify.send_message(self.hass, '{{ states.sensor.temperature.state }}',
'{{ states.sensor.temperature.name }}') '{{ states.sensor.temperature.name }}')

View File

@ -0,0 +1 @@
"""The tests for Roller shutter platforms."""

View File

@ -1,8 +1,4 @@
""" """The tests the Roller shutter command line platform."""
tests.components.rollershutter.command_line
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests the command_line component
"""
import os import os
import tempfile import tempfile
@ -16,7 +12,10 @@ from homeassistant.components.rollershutter import (
class TestCommandRollerShutter(unittest.TestCase): class TestCommandRollerShutter(unittest.TestCase):
"""Test the Roller shutter command line platform."""
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = ha.HomeAssistant() self.hass = ha.HomeAssistant()
self.hass.config.latitude = 32.87336 self.hass.config.latitude = 32.87336
self.hass.config.longitude = 117.22743 self.hass.config.longitude = 117.22743
@ -26,15 +25,17 @@ class TestCommandRollerShutter(unittest.TestCase):
None) # FIXME None) # FIXME
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_should_poll(self): def test_should_poll(self):
"""Test the setting of polling."""
self.assertTrue(self.rs.should_poll) self.assertTrue(self.rs.should_poll)
self.rs._command_state = None self.rs._command_state = None
self.assertFalse(self.rs.should_poll) self.assertFalse(self.rs.should_poll)
def test_query_state_value(self): def test_query_state_value(self):
"""Test with state value."""
with mock.patch('subprocess.check_output') as mock_run: with mock.patch('subprocess.check_output') as mock_run:
mock_run.return_value = b' foo bar ' mock_run.return_value = b' foo bar '
result = self.rs._query_state_value('runme') result = self.rs._query_state_value('runme')
@ -42,6 +43,7 @@ class TestCommandRollerShutter(unittest.TestCase):
mock_run.assert_called_once_with('runme', shell=True) mock_run.assert_called_once_with('runme', shell=True)
def test_state_value(self): def test_state_value(self):
"""Test with state value."""
with tempfile.TemporaryDirectory() as tempdirname: with tempfile.TemporaryDirectory() as tempdirname:
path = os.path.join(tempdirname, 'rollershutter_status') path = os.path.join(tempdirname, 'rollershutter_status')
test_rollershutter = { test_rollershutter = {

View File

@ -1,9 +1,4 @@
""" """The tests for the MQTT roller shutter platform."""
tests.components.rollershutter.test_mqtt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests MQTT rollershutter.
"""
import unittest import unittest
from homeassistant.const import STATE_OPEN, STATE_CLOSED, STATE_UNKNOWN from homeassistant.const import STATE_OPEN, STATE_CLOSED, STATE_UNKNOWN
@ -14,17 +9,19 @@ from tests.common import get_test_home_assistant
class TestRollershutterMQTT(unittest.TestCase): class TestRollershutterMQTT(unittest.TestCase):
""" Test the MQTT rollershutter. """ """Test the MQTT roller shutter."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.mock_publish = mock_mqtt_component(self.hass) self.mock_publish = mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_controlling_state_via_topic(self): def test_controlling_state_via_topic(self):
"""Test the controlling state via topic."""
self.assertTrue(rollershutter.setup(self.hass, { self.assertTrue(rollershutter.setup(self.hass, {
'rollershutter': { 'rollershutter': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -60,6 +57,7 @@ class TestRollershutterMQTT(unittest.TestCase):
self.assertEqual(STATE_OPEN, state.state) self.assertEqual(STATE_OPEN, state.state)
def test_send_move_up_command(self): def test_send_move_up_command(self):
"""Test the sending of move_up."""
self.assertTrue(rollershutter.setup(self.hass, { self.assertTrue(rollershutter.setup(self.hass, {
'rollershutter': { 'rollershutter': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -82,6 +80,7 @@ class TestRollershutterMQTT(unittest.TestCase):
self.assertEqual(STATE_UNKNOWN, state.state) self.assertEqual(STATE_UNKNOWN, state.state)
def test_send_move_down_command(self): def test_send_move_down_command(self):
"""Test the sending of move_down."""
self.assertTrue(rollershutter.setup(self.hass, { self.assertTrue(rollershutter.setup(self.hass, {
'rollershutter': { 'rollershutter': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -104,6 +103,7 @@ class TestRollershutterMQTT(unittest.TestCase):
self.assertEqual(STATE_UNKNOWN, state.state) self.assertEqual(STATE_UNKNOWN, state.state)
def test_send_stop_command(self): def test_send_stop_command(self):
"""Test the sending of stop."""
self.assertTrue(rollershutter.setup(self.hass, { self.assertTrue(rollershutter.setup(self.hass, {
'rollershutter': { 'rollershutter': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -126,6 +126,7 @@ class TestRollershutterMQTT(unittest.TestCase):
self.assertEqual(STATE_UNKNOWN, state.state) self.assertEqual(STATE_UNKNOWN, state.state)
def test_state_attributes_current_position(self): def test_state_attributes_current_position(self):
"""Test the current position."""
self.assertTrue(rollershutter.setup(self.hass, { self.assertTrue(rollershutter.setup(self.hass, {
'rollershutter': { 'rollershutter': {
'platform': 'mqtt', 'platform': 'mqtt',

View File

@ -0,0 +1 @@
"""The tests for Sensor platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for the Command line sensor platform."""
tests.components.sensor.test_command_line
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests command sensor.
"""
import unittest import unittest
from homeassistant.components.sensor import command_line from homeassistant.components.sensor import command_line
@ -12,24 +7,25 @@ from tests.common import get_test_home_assistant
class TestCommandSensorSensor(unittest.TestCase): class TestCommandSensorSensor(unittest.TestCase):
""" Test the Command line sensor. """ """Test the Command line sensor."""
def setUp(self): def setUp(self):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): def tearDown(self):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_setup(self): def test_setup(self):
""" Test sensor setup. """ """Test sensor setup."""
config = {'name': 'Test', config = {'name': 'Test',
'unit_of_measurement': 'in', 'unit_of_measurement': 'in',
'command': 'echo 5'} 'command': 'echo 5'}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -43,13 +39,13 @@ class TestCommandSensorSensor(unittest.TestCase):
self.assertEqual('5', entity.state) self.assertEqual('5', entity.state)
def test_setup_bad_config(self): def test_setup_bad_config(self):
""" Test setup with a bad configuration. """ """Test setup with a bad configuration."""
config = {} config = {}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -59,7 +55,7 @@ class TestCommandSensorSensor(unittest.TestCase):
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
def test_template(self): def test_template(self):
""" Test command sensor with template. """ """Test command sensor with template."""
data = command_line.CommandSensorData('echo 50') data = command_line.CommandSensorData('echo 50')
entity = command_line.CommandSensor( entity = command_line.CommandSensor(
@ -68,7 +64,7 @@ class TestCommandSensorSensor(unittest.TestCase):
self.assertEqual(5, float(entity.state)) self.assertEqual(5, float(entity.state))
def test_bad_command(self): def test_bad_command(self):
""" Test bad command. """ """Test bad command."""
data = command_line.CommandSensorData('asdfasdf') data = command_line.CommandSensorData('asdfasdf')
data.update() data.update()

View File

@ -1,9 +1,4 @@
""" """The tests for the mFi sensor platform."""
tests.components.sensor.test_mfi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests mFi sensor.
"""
import unittest import unittest
import unittest.mock as mock import unittest.mock as mock
@ -17,6 +12,8 @@ from tests.common import get_test_home_assistant
class TestMfiSensorSetup(unittest.TestCase): class TestMfiSensorSetup(unittest.TestCase):
"""Test the mFi sensor platform."""
PLATFORM = mfi PLATFORM = mfi
COMPONENT = sensor COMPONENT = sensor
THING = 'sensor' THING = 'sensor'
@ -33,15 +30,17 @@ class TestMfiSensorSetup(unittest.TestCase):
} }
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.config.latitude = 32.87336 self.hass.config.latitude = 32.87336
self.hass.config.longitude = 117.22743 self.hass.config.longitude = 117.22743
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_setup_missing_config(self): def test_setup_missing_config(self):
"""Test setup with missing configuration."""
config = { config = {
'sensor': { 'sensor': {
'platform': 'mfi', 'platform': 'mfi',
@ -51,6 +50,7 @@ class TestMfiSensorSetup(unittest.TestCase):
@mock.patch('mficlient.client') @mock.patch('mficlient.client')
def test_setup_failed_login(self, mock_client): def test_setup_failed_login(self, mock_client):
"""Test setup with login failure."""
mock_client.FailedToLogin = Exception() mock_client.FailedToLogin = Exception()
mock_client.MFiClient.side_effect = mock_client.FailedToLogin mock_client.MFiClient.side_effect = mock_client.FailedToLogin
self.assertFalse( self.assertFalse(
@ -60,6 +60,7 @@ class TestMfiSensorSetup(unittest.TestCase):
@mock.patch('mficlient.client') @mock.patch('mficlient.client')
def test_setup_failed_connect(self, mock_client): def test_setup_failed_connect(self, mock_client):
"""Test setup with conection failure."""
mock_client.FailedToLogin = Exception() mock_client.FailedToLogin = Exception()
mock_client.MFiClient.side_effect = requests.exceptions.ConnectionError mock_client.MFiClient.side_effect = requests.exceptions.ConnectionError
self.assertFalse( self.assertFalse(
@ -69,6 +70,7 @@ class TestMfiSensorSetup(unittest.TestCase):
@mock.patch('mficlient.client.MFiClient') @mock.patch('mficlient.client.MFiClient')
def test_setup_minimum(self, mock_client): def test_setup_minimum(self, mock_client):
"""Test setup with minimum configuration."""
config = dict(self.GOOD_CONFIG) config = dict(self.GOOD_CONFIG)
del config[self.THING]['port'] del config[self.THING]['port']
assert self.COMPONENT.setup(self.hass, config) assert self.COMPONENT.setup(self.hass, config)
@ -78,6 +80,7 @@ class TestMfiSensorSetup(unittest.TestCase):
@mock.patch('mficlient.client.MFiClient') @mock.patch('mficlient.client.MFiClient')
def test_setup_with_port(self, mock_client): def test_setup_with_port(self, mock_client):
"""Test setup with port."""
config = dict(self.GOOD_CONFIG) config = dict(self.GOOD_CONFIG)
config[self.THING]['port'] = 6123 config[self.THING]['port'] = 6123
assert self.COMPONENT.setup(self.hass, config) assert self.COMPONENT.setup(self.hass, config)
@ -87,6 +90,7 @@ class TestMfiSensorSetup(unittest.TestCase):
@mock.patch('mficlient.client.MFiClient') @mock.patch('mficlient.client.MFiClient')
def test_setup_with_tls_disabled(self, mock_client): def test_setup_with_tls_disabled(self, mock_client):
"""Test setup without TLS."""
config = dict(self.GOOD_CONFIG) config = dict(self.GOOD_CONFIG)
del config[self.THING]['port'] del config[self.THING]['port']
config[self.THING]['use_tls'] = False config[self.THING]['use_tls'] = False
@ -99,6 +103,7 @@ class TestMfiSensorSetup(unittest.TestCase):
@mock.patch('mficlient.client.MFiClient') @mock.patch('mficlient.client.MFiClient')
@mock.patch('homeassistant.components.sensor.mfi.MfiSensor') @mock.patch('homeassistant.components.sensor.mfi.MfiSensor')
def test_setup_adds_proper_devices(self, mock_sensor, mock_client): def test_setup_adds_proper_devices(self, mock_sensor, mock_client):
"""Test if setup adds devices."""
ports = {i: mock.MagicMock(model=model) ports = {i: mock.MagicMock(model=model)
for i, model in enumerate(mfi.SENSOR_MODELS)} for i, model in enumerate(mfi.SENSOR_MODELS)}
ports['bad'] = mock.MagicMock(model='notasensor') ports['bad'] = mock.MagicMock(model='notasensor')
@ -113,7 +118,10 @@ class TestMfiSensorSetup(unittest.TestCase):
class TestMfiSensor(unittest.TestCase): class TestMfiSensor(unittest.TestCase):
"""Test for mFi sensor platform."""
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.config.latitude = 32.87336 self.hass.config.latitude = 32.87336
self.hass.config.longitude = 117.22743 self.hass.config.longitude = 117.22743
@ -121,29 +129,35 @@ class TestMfiSensor(unittest.TestCase):
self.sensor = mfi.MfiSensor(self.port, self.hass) self.sensor = mfi.MfiSensor(self.port, self.hass)
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_name(self): def test_name(self):
"""Test the name."""
self.assertEqual(self.port.label, self.sensor.name) self.assertEqual(self.port.label, self.sensor.name)
def test_uom_temp(self): def test_uom_temp(self):
"""Test the UOM temperature."""
self.port.tag = 'temperature' self.port.tag = 'temperature'
self.assertEqual(TEMP_CELCIUS, self.sensor.unit_of_measurement) self.assertEqual(TEMP_CELCIUS, self.sensor.unit_of_measurement)
def test_uom_power(self): def test_uom_power(self):
"""Test the UOEM power."""
self.port.tag = 'active_pwr' self.port.tag = 'active_pwr'
self.assertEqual('Watts', self.sensor.unit_of_measurement) self.assertEqual('Watts', self.sensor.unit_of_measurement)
def test_uom_digital(self): def test_uom_digital(self):
"""Test the UOM digital input."""
self.port.model = 'Input Digital' self.port.model = 'Input Digital'
self.assertEqual('State', self.sensor.unit_of_measurement) self.assertEqual('State', self.sensor.unit_of_measurement)
def test_uom_unknown(self): def test_uom_unknown(self):
"""Test the UOM."""
self.port.tag = 'balloons' self.port.tag = 'balloons'
self.assertEqual('balloons', self.sensor.unit_of_measurement) self.assertEqual('balloons', self.sensor.unit_of_measurement)
def test_state_digital(self): def test_state_digital(self):
"""Test the digital input."""
self.port.model = 'Input Digital' self.port.model = 'Input Digital'
self.port.value = 0 self.port.value = 0
self.assertEqual(mfi.STATE_OFF, self.sensor.state) self.assertEqual(mfi.STATE_OFF, self.sensor.state)
@ -153,6 +167,7 @@ class TestMfiSensor(unittest.TestCase):
self.assertEqual(mfi.STATE_ON, self.sensor.state) self.assertEqual(mfi.STATE_ON, self.sensor.state)
def test_state_digits(self): def test_state_digits(self):
"""Test the state of digits."""
self.port.tag = 'didyoucheckthedict?' self.port.tag = 'didyoucheckthedict?'
self.port.value = 1.25 self.port.value = 1.25
with mock.patch.dict(mfi.DIGITS, {'didyoucheckthedict?': 1}): with mock.patch.dict(mfi.DIGITS, {'didyoucheckthedict?': 1}):
@ -161,5 +176,6 @@ class TestMfiSensor(unittest.TestCase):
self.assertEqual(1.0, self.sensor.state) self.assertEqual(1.0, self.sensor.state)
def test_update(self): def test_update(self):
"""Test the update."""
self.sensor.update() self.sensor.update()
self.port.refresh.assert_called_once_with() self.port.refresh.assert_called_once_with()

View File

@ -1,9 +1,4 @@
""" """The tests for the MQTT sensor platform."""
tests.components.sensor.test_mqtt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests MQTT sensor.
"""
import unittest import unittest
import homeassistant.components.sensor as sensor import homeassistant.components.sensor as sensor
@ -13,17 +8,19 @@ from tests.common import get_test_home_assistant
class TestSensorMQTT(unittest.TestCase): class TestSensorMQTT(unittest.TestCase):
""" Test the MQTT sensor. """ """Test the MQTT sensor."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
mock_mqtt_component(self.hass) mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_setting_sensor_value_via_mqtt_message(self): def test_setting_sensor_value_via_mqtt_message(self):
"""Test the setting of the value via MQTT."""
self.assertTrue(sensor.setup(self.hass, { self.assertTrue(sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -42,6 +39,7 @@ class TestSensorMQTT(unittest.TestCase):
state.attributes.get('unit_of_measurement')) state.attributes.get('unit_of_measurement'))
def test_setting_sensor_value_via_mqtt_json_message(self): def test_setting_sensor_value_via_mqtt_json_message(self):
"""Test the setting of the value via MQTT with JSON playload."""
self.assertTrue(sensor.setup(self.hass, { self.assertTrue(sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'mqtt', 'platform': 'mqtt',

View File

@ -1,10 +1,4 @@
""" """The tests for the Rfxtrx sensor platform."""
tests.components.sensor.test_rfxtrx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Rfxtrx sensor.
"""
import unittest import unittest
@ -16,25 +10,25 @@ from tests.common import get_test_home_assistant
class TestSensorRfxtrx(unittest.TestCase): class TestSensorRfxtrx(unittest.TestCase):
""" Test the Rfxtrx sensor. """ """Test the Rfxtrx sensor platform."""
def setUp(self): def setUp(self):
""" setup hass """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant(0) self.hass = get_test_home_assistant(0)
def tearDown(self): def tearDown(self):
""" Stop down stuff we started. """ """Stop everything that was started."""
rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS = [] rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS = []
rfxtrx_core.RFX_DEVICES = {} rfxtrx_core.RFX_DEVICES = {}
self.hass.stop() self.hass.stop()
def test_default_config(self): def test_default_config(self):
""" Test with 0 sensors """ """Test with 0 sensor."""
config = {'devices': {}} config = {'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -42,7 +36,7 @@ class TestSensorRfxtrx(unittest.TestCase):
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
def test_one_sensor(self): def test_one_sensor(self):
""" Test with 1 sensor """ """Test with 1 sensor."""
config = {'devices': config = {'devices':
{'sensor_0502': { {'sensor_0502': {
'name': 'Test', 'name': 'Test',
@ -51,7 +45,7 @@ class TestSensorRfxtrx(unittest.TestCase):
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -69,7 +63,7 @@ class TestSensorRfxtrx(unittest.TestCase):
entity.device_state_attributes) entity.device_state_attributes)
def test_several_sensors(self): def test_several_sensors(self):
""" Test with 3 sensors """ """Test with 3 sensors."""
config = {'devices': config = {'devices':
{'sensor_0502': { {'sensor_0502': {
'name': 'Test', 'name': 'Test',
@ -85,7 +79,7 @@ class TestSensorRfxtrx(unittest.TestCase):
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -129,12 +123,12 @@ class TestSensorRfxtrx(unittest.TestCase):
self.assertEqual(3, device_num) self.assertEqual(3, device_num)
def test_discover_sensor(self): def test_discover_sensor(self):
""" Test with discover of sensor """ """Test with discovery of sensor."""
config = {'devices': {}} config = {'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -196,12 +190,12 @@ class TestSensorRfxtrx(unittest.TestCase):
self.assertEqual(2, len(devices)) self.assertEqual(2, len(devices))
def test_discover_sensor_noautoadd(self): def test_discover_sensor_noautoadd(self):
""" Test with discover of sensor when auto add is False """ """Test with discover of sensor when auto add is False."""
config = {'automatic_add': False, 'devices': {}} config = {'automatic_add': False, 'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)

View File

@ -1,9 +1,4 @@
""" """The tests for the TCP sensor platform."""
tests.components.sensor.tcp
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests TCP sensor.
"""
import socket import socket
from copy import copy from copy import copy
from uuid import uuid4 from uuid import uuid4
@ -37,7 +32,7 @@ KEYS_AND_DEFAULTS = {
@patch('homeassistant.components.sensor.tcp.Sensor.update') @patch('homeassistant.components.sensor.tcp.Sensor.update')
def test_setup_platform_valid_config(mock_update): def test_setup_platform_valid_config(mock_update):
""" Should check the supplied config and call add_entities with Sensor. """ """Should check the supplied config and call add_entities with Sensor."""
add_entities = Mock() add_entities = Mock()
ret = tcp.setup_platform(None, TEST_CONFIG, add_entities) ret = tcp.setup_platform(None, TEST_CONFIG, add_entities)
assert ret is None, "setup_platform() should return None if successful." assert ret is None, "setup_platform() should return None if successful."
@ -46,30 +41,32 @@ def test_setup_platform_valid_config(mock_update):
def test_setup_platform_invalid_config(): def test_setup_platform_invalid_config():
""" Should check the supplied config and return False if it is invalid. """ """Should check the supplied config and return False if it is invalid."""
config = copy(TEST_CONFIG) config = copy(TEST_CONFIG)
del config[tcp.CONF_HOST] del config[tcp.CONF_HOST]
assert tcp.setup_platform(None, config, None) is False assert tcp.setup_platform(None, config, None) is False
class TestTCPSensor(): class TestTCPSensor():
""" Test the TCP Sensor. """ """Test the TCP Sensor."""
def setup_class(cls): def setup_class(cls):
"""Setup things to be run when tests are started."""
cls.hass = get_test_home_assistant() cls.hass = get_test_home_assistant()
def teardown_class(cls): def teardown_class(cls):
"""Stop everything that was started."""
cls.hass.stop() cls.hass.stop()
@patch('homeassistant.components.sensor.tcp.Sensor.update') @patch('homeassistant.components.sensor.tcp.Sensor.update')
def test_name(self, mock_update): def test_name(self, mock_update):
""" Should return the name if set in the config. """ """Should return the name if set in the config."""
sensor = tcp.Sensor(self.hass, TEST_CONFIG) sensor = tcp.Sensor(self.hass, TEST_CONFIG)
assert sensor.name == TEST_CONFIG[tcp.CONF_NAME] assert sensor.name == TEST_CONFIG[tcp.CONF_NAME]
@patch('homeassistant.components.sensor.tcp.Sensor.update') @patch('homeassistant.components.sensor.tcp.Sensor.update')
def test_name_not_set(self, mock_update): def test_name_not_set(self, mock_update):
""" Should return the superclass name property if not set in config """ """Should return the superclass name property if not set in config."""
config = copy(TEST_CONFIG) config = copy(TEST_CONFIG)
del config[tcp.CONF_NAME] del config[tcp.CONF_NAME]
entity = Entity() entity = Entity()
@ -78,7 +75,7 @@ class TestTCPSensor():
@patch('homeassistant.components.sensor.tcp.Sensor.update') @patch('homeassistant.components.sensor.tcp.Sensor.update')
def test_state(self, mock_update): def test_state(self, mock_update):
""" Should return the contents of _state. """ """Should return the contents of _state."""
sensor = tcp.Sensor(self.hass, TEST_CONFIG) sensor = tcp.Sensor(self.hass, TEST_CONFIG)
uuid = str(uuid4()) uuid = str(uuid4())
sensor._state = uuid sensor._state = uuid
@ -86,30 +83,24 @@ class TestTCPSensor():
@patch('homeassistant.components.sensor.tcp.Sensor.update') @patch('homeassistant.components.sensor.tcp.Sensor.update')
def test_unit_of_measurement(self, mock_update): def test_unit_of_measurement(self, mock_update):
""" Should return the configured unit of measurement. """ """Should return the configured unit of measurement."""
sensor = tcp.Sensor(self.hass, TEST_CONFIG) sensor = tcp.Sensor(self.hass, TEST_CONFIG)
assert sensor.unit_of_measurement == TEST_CONFIG[tcp.CONF_UNIT] assert sensor.unit_of_measurement == TEST_CONFIG[tcp.CONF_UNIT]
@patch("homeassistant.components.sensor.tcp.Sensor.update") @patch("homeassistant.components.sensor.tcp.Sensor.update")
def test_config_valid_keys(self, *args): def test_config_valid_keys(self, *args):
""" """Should store valid keys in _config."""
Should store valid keys in _config.
"""
sensor = tcp.Sensor(self.hass, TEST_CONFIG) sensor = tcp.Sensor(self.hass, TEST_CONFIG)
for key in TEST_CONFIG: for key in TEST_CONFIG:
assert key in sensor._config assert key in sensor._config
def test_validate_config_valid_keys(self): def test_validate_config_valid_keys(self):
""" """Should return True when provided with the correct keys."""
Should return True when provided with the correct keys.
"""
assert tcp.Sensor.validate_config(TEST_CONFIG) assert tcp.Sensor.validate_config(TEST_CONFIG)
@patch("homeassistant.components.sensor.tcp.Sensor.update") @patch("homeassistant.components.sensor.tcp.Sensor.update")
def test_config_invalid_keys(self, mock_update): def test_config_invalid_keys(self, mock_update):
""" """Shouldn't store invalid keys in _config."""
Shouldn't store invalid keys in _config.
"""
config = copy(TEST_CONFIG) config = copy(TEST_CONFIG)
config.update({ config.update({
"a": "test_a", "a": "test_a",
@ -121,9 +112,7 @@ class TestTCPSensor():
assert invalid_key not in sensor._config assert invalid_key not in sensor._config
def test_validate_config_invalid_keys(self): def test_validate_config_invalid_keys(self):
""" """Test with invalid keys plus some extra."""
Should return True when provided with the correct keys plus some extra.
"""
config = copy(TEST_CONFIG) config = copy(TEST_CONFIG)
config.update({ config.update({
"a": "test_a", "a": "test_a",
@ -134,9 +123,7 @@ class TestTCPSensor():
@patch("homeassistant.components.sensor.tcp.Sensor.update") @patch("homeassistant.components.sensor.tcp.Sensor.update")
def test_config_uses_defaults(self, mock_update): def test_config_uses_defaults(self, mock_update):
""" """Should use defaults where appropriate."""
Should use defaults where appropriate.
"""
config = copy(TEST_CONFIG) config = copy(TEST_CONFIG)
for key in KEYS_AND_DEFAULTS.keys(): for key in KEYS_AND_DEFAULTS.keys():
del config[key] del config[key]
@ -145,18 +132,14 @@ class TestTCPSensor():
assert sensor._config[key] == default assert sensor._config[key] == default
def test_validate_config_missing_defaults(self): def test_validate_config_missing_defaults(self):
""" """Should return True when defaulted keys are not provided."""
Should return True when defaulted keys are not provided.
"""
config = copy(TEST_CONFIG) config = copy(TEST_CONFIG)
for key in KEYS_AND_DEFAULTS.keys(): for key in KEYS_AND_DEFAULTS.keys():
del config[key] del config[key]
assert tcp.Sensor.validate_config(config) assert tcp.Sensor.validate_config(config)
def test_validate_config_missing_required(self): def test_validate_config_missing_required(self):
""" """Should return False when required config items are missing."""
Should return False when required config items are missing.
"""
for key in TEST_CONFIG: for key in TEST_CONFIG:
if key in KEYS_AND_DEFAULTS: if key in KEYS_AND_DEFAULTS:
continue continue
@ -168,18 +151,14 @@ class TestTCPSensor():
@patch("homeassistant.components.sensor.tcp.Sensor.update") @patch("homeassistant.components.sensor.tcp.Sensor.update")
def test_init_calls_update(self, mock_update): def test_init_calls_update(self, mock_update):
""" """Should call update() method during __init__()."""
Should call update() method during __init__().
"""
tcp.Sensor(self.hass, TEST_CONFIG) tcp.Sensor(self.hass, TEST_CONFIG)
assert mock_update.called assert mock_update.called
@patch("socket.socket") @patch("socket.socket")
@patch("select.select", return_value=(True, False, False)) @patch("select.select", return_value=(True, False, False))
def test_update_connects_to_host_and_port(self, mock_select, mock_socket): def test_update_connects_to_host_and_port(self, mock_select, mock_socket):
""" """Should connect to the configured host and port."""
Should connect to the configured host and port.
"""
tcp.Sensor(self.hass, TEST_CONFIG) tcp.Sensor(self.hass, TEST_CONFIG)
mock_socket = mock_socket().__enter__() mock_socket = mock_socket().__enter__()
assert mock_socket.connect.mock_calls[0][1] == (( assert mock_socket.connect.mock_calls[0][1] == ((
@ -188,9 +167,7 @@ class TestTCPSensor():
@patch("socket.socket.connect", side_effect=socket.error()) @patch("socket.socket.connect", side_effect=socket.error())
def test_update_returns_if_connecting_fails(self, *args): def test_update_returns_if_connecting_fails(self, *args):
""" """Should return if connecting to host fails."""
Should return if connecting to host fails.
"""
with patch("homeassistant.components.sensor.tcp.Sensor.update"): with patch("homeassistant.components.sensor.tcp.Sensor.update"):
sensor = tcp.Sensor(self.hass, TEST_CONFIG) sensor = tcp.Sensor(self.hass, TEST_CONFIG)
assert sensor.update() is None assert sensor.update() is None
@ -198,9 +175,7 @@ class TestTCPSensor():
@patch("socket.socket.connect") @patch("socket.socket.connect")
@patch("socket.socket.send", side_effect=socket.error()) @patch("socket.socket.send", side_effect=socket.error())
def test_update_returns_if_sending_fails(self, *args): def test_update_returns_if_sending_fails(self, *args):
""" """Should return if sending fails."""
Should return if sending fails.
"""
with patch("homeassistant.components.sensor.tcp.Sensor.update"): with patch("homeassistant.components.sensor.tcp.Sensor.update"):
sensor = tcp.Sensor(self.hass, TEST_CONFIG) sensor = tcp.Sensor(self.hass, TEST_CONFIG)
assert sensor.update() is None assert sensor.update() is None
@ -209,7 +184,7 @@ class TestTCPSensor():
@patch("socket.socket.send") @patch("socket.socket.send")
@patch("select.select", return_value=(False, False, False)) @patch("select.select", return_value=(False, False, False))
def test_update_returns_if_select_fails(self, *args): def test_update_returns_if_select_fails(self, *args):
""" Should return if select fails to return a socket. """ """Should return if select fails to return a socket."""
with patch("homeassistant.components.sensor.tcp.Sensor.update"): with patch("homeassistant.components.sensor.tcp.Sensor.update"):
sensor = tcp.Sensor(self.hass, TEST_CONFIG) sensor = tcp.Sensor(self.hass, TEST_CONFIG)
assert sensor.update() is None assert sensor.update() is None
@ -217,9 +192,7 @@ class TestTCPSensor():
@patch("socket.socket") @patch("socket.socket")
@patch("select.select", return_value=(True, False, False)) @patch("select.select", return_value=(True, False, False))
def test_update_sends_payload(self, mock_select, mock_socket): def test_update_sends_payload(self, mock_select, mock_socket):
""" """Should send the configured payload as bytes."""
Should send the configured payload as bytes.
"""
tcp.Sensor(self.hass, TEST_CONFIG) tcp.Sensor(self.hass, TEST_CONFIG)
mock_socket = mock_socket().__enter__() mock_socket = mock_socket().__enter__()
mock_socket.send.assert_called_with( mock_socket.send.assert_called_with(
@ -229,9 +202,7 @@ class TestTCPSensor():
@patch("socket.socket") @patch("socket.socket")
@patch("select.select", return_value=(True, False, False)) @patch("select.select", return_value=(True, False, False))
def test_update_calls_select_with_timeout(self, mock_select, mock_socket): def test_update_calls_select_with_timeout(self, mock_select, mock_socket):
""" """Should provide the timeout argument to select."""
Should provide the timeout argument to select.
"""
tcp.Sensor(self.hass, TEST_CONFIG) tcp.Sensor(self.hass, TEST_CONFIG)
mock_socket = mock_socket().__enter__() mock_socket = mock_socket().__enter__()
mock_select.assert_called_with( mock_select.assert_called_with(
@ -241,9 +212,7 @@ class TestTCPSensor():
@patch("select.select", return_value=(True, False, False)) @patch("select.select", return_value=(True, False, False))
def test_update_receives_packet_and_sets_as_state( def test_update_receives_packet_and_sets_as_state(
self, mock_select, mock_socket): self, mock_select, mock_socket):
""" """Test the response from the socket and set it as the state."""
Should receive the response from the socket and set it as the state.
"""
test_value = "test_value" test_value = "test_value"
mock_socket = mock_socket().__enter__() mock_socket = mock_socket().__enter__()
mock_socket.recv.return_value = test_value.encode() mock_socket.recv.return_value = test_value.encode()
@ -255,9 +224,7 @@ class TestTCPSensor():
@patch("socket.socket") @patch("socket.socket")
@patch("select.select", return_value=(True, False, False)) @patch("select.select", return_value=(True, False, False))
def test_update_renders_value_in_template(self, mock_select, mock_socket): def test_update_renders_value_in_template(self, mock_select, mock_socket):
""" """Should render the value in the provided template."""
Should render the value in the provided template.
"""
test_value = "test_value" test_value = "test_value"
mock_socket = mock_socket().__enter__() mock_socket = mock_socket().__enter__()
mock_socket.recv.return_value = test_value.encode() mock_socket.recv.return_value = test_value.encode()
@ -270,7 +237,7 @@ class TestTCPSensor():
@patch("select.select", return_value=(True, False, False)) @patch("select.select", return_value=(True, False, False))
def test_update_returns_if_template_render_fails( def test_update_returns_if_template_render_fails(
self, mock_select, mock_socket): self, mock_select, mock_socket):
""" Should return None if rendering the template fails. """ """Should return None if rendering the template fails."""
test_value = "test_value" test_value = "test_value"
mock_socket = mock_socket().__enter__() mock_socket = mock_socket().__enter__()
mock_socket.recv.return_value = test_value.encode() mock_socket.recv.return_value = test_value.encode()

View File

@ -1,25 +1,22 @@
""" """The test for the Template sensor platform."""
tests.components.sensor.test_template
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests template sensor.
"""
import homeassistant.components.sensor as sensor import homeassistant.components.sensor as sensor
from tests.common import get_test_home_assistant from tests.common import get_test_home_assistant
class TestTemplateSensor: class TestTemplateSensor:
""" Test the Template sensor. """ """Test the Template sensor."""
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_template(self): def test_template(self):
"""Test template."""
assert sensor.setup(self.hass, { assert sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'template', 'platform': 'template',
@ -41,6 +38,7 @@ class TestTemplateSensor:
assert state.state == 'It Works.' assert state.state == 'It Works.'
def test_template_syntax_error(self): def test_template_syntax_error(self):
"""Test templating syntax error."""
assert sensor.setup(self.hass, { assert sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'template', 'platform': 'template',
@ -59,6 +57,7 @@ class TestTemplateSensor:
assert state.state == 'error' assert state.state == 'error'
def test_template_attribute_missing(self): def test_template_attribute_missing(self):
"""Test missing attribute template."""
assert sensor.setup(self.hass, { assert sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'template', 'platform': 'template',
@ -75,6 +74,7 @@ class TestTemplateSensor:
assert state.state == 'error' assert state.state == 'error'
def test_invalid_name_does_not_create(self): def test_invalid_name_does_not_create(self):
"""Test invalid name."""
assert sensor.setup(self.hass, { assert sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'template', 'platform': 'template',
@ -89,6 +89,7 @@ class TestTemplateSensor:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_invalid_sensor_does_not_create(self): def test_invalid_sensor_does_not_create(self):
"""Test invalid sensor."""
assert sensor.setup(self.hass, { assert sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'template', 'platform': 'template',
@ -100,6 +101,7 @@ class TestTemplateSensor:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_no_sensors_does_not_create(self): def test_no_sensors_does_not_create(self):
"""Test no sensors."""
assert sensor.setup(self.hass, { assert sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'template' 'platform': 'template'
@ -108,6 +110,7 @@ class TestTemplateSensor:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_missing_template_does_not_create(self): def test_missing_template_does_not_create(self):
"""Test missing template."""
assert sensor.setup(self.hass, { assert sensor.setup(self.hass, {
'sensor': { 'sensor': {
'platform': 'template', 'platform': 'template',

View File

@ -1,9 +1,4 @@
""" """The tests for the Yr sensor platform."""
tests.components.sensor.test_yr
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Yr sensor.
"""
from datetime import datetime from datetime import datetime
from unittest.mock import patch from unittest.mock import patch
@ -17,18 +12,20 @@ from tests.common import get_test_home_assistant
@pytest.mark.usefixtures('betamax_session') @pytest.mark.usefixtures('betamax_session')
class TestSensorYr: class TestSensorYr:
""" Test the Yr sensor. """ """Test the Yr sensor."""
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.config.latitude = 32.87336 self.hass.config.latitude = 32.87336
self.hass.config.longitude = 117.22743 self.hass.config.longitude = 117.22743
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_default_setup(self, betamax_session): def test_default_setup(self, betamax_session):
"""Test the default setup."""
now = datetime(2016, 1, 5, 1, tzinfo=dt_util.UTC) now = datetime(2016, 1, 5, 1, tzinfo=dt_util.UTC)
with patch('homeassistant.components.sensor.yr.requests.Session', with patch('homeassistant.components.sensor.yr.requests.Session',
@ -49,6 +46,7 @@ class TestSensorYr:
assert state.attributes.get('unit_of_measurement') is None assert state.attributes.get('unit_of_measurement') is None
def test_custom_setup(self, betamax_session): def test_custom_setup(self, betamax_session):
"""Test a custom setup."""
now = datetime(2016, 1, 5, 1, tzinfo=dt_util.UTC) now = datetime(2016, 1, 5, 1, tzinfo=dt_util.UTC)
with patch('homeassistant.components.sensor.yr.requests.Session', with patch('homeassistant.components.sensor.yr.requests.Session',

View File

@ -0,0 +1 @@
"""The tests for Switch platforms."""

View File

@ -1,9 +1,4 @@
""" """the tests for the Command line switch platform."""
tests.components.switch.test_command_line
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests command switch.
"""
import json import json
import os import os
import tempfile import tempfile
@ -16,16 +11,18 @@ from tests.common import get_test_home_assistant
class TestCommandSwitch(unittest.TestCase): class TestCommandSwitch(unittest.TestCase):
""" Test the command switch. """ """Test the command switch."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_state_none(self): def test_state_none(self):
"""Test with none state."""
with tempfile.TemporaryDirectory() as tempdirname: with tempfile.TemporaryDirectory() as tempdirname:
path = os.path.join(tempdirname, 'switch_status') path = os.path.join(tempdirname, 'switch_status')
test_switch = { test_switch = {
@ -57,6 +54,7 @@ class TestCommandSwitch(unittest.TestCase):
self.assertEqual(STATE_OFF, state.state) self.assertEqual(STATE_OFF, state.state)
def test_state_value(self): def test_state_value(self):
"""Test with state value."""
with tempfile.TemporaryDirectory() as tempdirname: with tempfile.TemporaryDirectory() as tempdirname:
path = os.path.join(tempdirname, 'switch_status') path = os.path.join(tempdirname, 'switch_status')
test_switch = { test_switch = {
@ -90,6 +88,7 @@ class TestCommandSwitch(unittest.TestCase):
self.assertEqual(STATE_OFF, state.state) self.assertEqual(STATE_OFF, state.state)
def test_state_json_value(self): def test_state_json_value(self):
"""Test with state JSON value."""
with tempfile.TemporaryDirectory() as tempdirname: with tempfile.TemporaryDirectory() as tempdirname:
path = os.path.join(tempdirname, 'switch_status') path = os.path.join(tempdirname, 'switch_status')
oncmd = json.dumps({'status': 'ok'}) oncmd = json.dumps({'status': 'ok'})
@ -125,6 +124,7 @@ class TestCommandSwitch(unittest.TestCase):
self.assertEqual(STATE_OFF, state.state) self.assertEqual(STATE_OFF, state.state)
def test_state_code(self): def test_state_code(self):
"""Test with state code."""
with tempfile.TemporaryDirectory() as tempdirname: with tempfile.TemporaryDirectory() as tempdirname:
path = os.path.join(tempdirname, 'switch_status') path = os.path.join(tempdirname, 'switch_status')
test_switch = { test_switch = {

View File

@ -1,9 +1,4 @@
""" """The tests for the Switch component."""
tests.components.switch.test_init
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests switch component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
@ -15,13 +10,12 @@ from tests.common import get_test_home_assistant
class TestSwitch(unittest.TestCase): class TestSwitch(unittest.TestCase):
""" Test the switch module. """ """Test the switch module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
platform = loader.get_component('switch.test') platform = loader.get_component('switch.test')
platform.init() platform.init()
self.assertTrue(switch.setup( self.assertTrue(switch.setup(
self.hass, {switch.DOMAIN: {CONF_PLATFORM: 'test'}} self.hass, {switch.DOMAIN: {CONF_PLATFORM: 'test'}}
@ -32,11 +26,11 @@ class TestSwitch(unittest.TestCase):
platform.DEVICES platform.DEVICES
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_methods(self): def test_methods(self):
""" Test is_on, turn_on, turn_off methods. """ """Test is_on, turn_on, turn_off methods."""
self.assertTrue(switch.is_on(self.hass)) self.assertTrue(switch.is_on(self.hass))
self.assertEqual( self.assertEqual(
STATE_ON, STATE_ON,
@ -81,7 +75,7 @@ class TestSwitch(unittest.TestCase):
self.assertTrue(switch.is_on(self.hass, self.switch_3.entity_id)) self.assertTrue(switch.is_on(self.hass, self.switch_3.entity_id))
def test_setup_two_platforms(self): def test_setup_two_platforms(self):
""" Test with bad config. """ """Test with bad configuration."""
# Test if switch component returns 0 switches # Test if switch component returns 0 switches
test_platform = loader.get_component('switch.test') test_platform = loader.get_component('switch.test')
test_platform.init(True) test_platform.init(True)

View File

@ -1,9 +1,4 @@
""" """The tests for the mFi switch platform."""
tests.components.switch.test_mfi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests mFi switch.
"""
import unittest import unittest
import unittest.mock as mock import unittest.mock as mock
@ -15,6 +10,8 @@ from tests.common import get_test_home_assistant
class TestMfiSwitchSetup(test_mfi_sensor.TestMfiSensorSetup): class TestMfiSwitchSetup(test_mfi_sensor.TestMfiSensorSetup):
"""Test the mFi switch."""
PLATFORM = mfi PLATFORM = mfi
COMPONENT = switch COMPONENT = switch
THING = 'switch' THING = 'switch'
@ -31,6 +28,7 @@ class TestMfiSwitchSetup(test_mfi_sensor.TestMfiSensorSetup):
@mock.patch('mficlient.client.MFiClient') @mock.patch('mficlient.client.MFiClient')
@mock.patch('homeassistant.components.switch.mfi.MfiSwitch') @mock.patch('homeassistant.components.switch.mfi.MfiSwitch')
def test_setup_adds_proper_devices(self, mock_switch, mock_client): def test_setup_adds_proper_devices(self, mock_switch, mock_client):
"""Test if setup adds devices."""
ports = {i: mock.MagicMock(model=model) ports = {i: mock.MagicMock(model=model)
for i, model in enumerate(mfi.SWITCH_MODELS)} for i, model in enumerate(mfi.SWITCH_MODELS)}
ports['bad'] = mock.MagicMock(model='notaswitch') ports['bad'] = mock.MagicMock(model='notaswitch')
@ -45,7 +43,10 @@ class TestMfiSwitchSetup(test_mfi_sensor.TestMfiSensorSetup):
class TestMfiSwitch(unittest.TestCase): class TestMfiSwitch(unittest.TestCase):
"""Test for mFi switch platform."""
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.config.latitude = 32.87336 self.hass.config.latitude = 32.87336
self.hass.config.longitude = 117.22743 self.hass.config.longitude = 117.22743
@ -53,17 +54,20 @@ class TestMfiSwitch(unittest.TestCase):
self.switch = mfi.MfiSwitch(self.port) self.switch = mfi.MfiSwitch(self.port)
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_name(self): def test_name(self):
"""Test the name."""
self.assertEqual(self.port.label, self.switch.name) self.assertEqual(self.port.label, self.switch.name)
def test_update(self): def test_update(self):
"""Test update."""
self.switch.update() self.switch.update()
self.port.refresh.assert_called_once_with() self.port.refresh.assert_called_once_with()
def test_update_with_target_state(self): def test_update_with_target_state(self):
"""Test update with target state."""
self.switch._target_state = True self.switch._target_state = True
self.port.data = {} self.port.data = {}
self.port.data['output'] = 'stale' self.port.data['output'] = 'stale'
@ -75,24 +79,29 @@ class TestMfiSwitch(unittest.TestCase):
self.assertEqual('untouched', self.port.data['output']) self.assertEqual('untouched', self.port.data['output'])
def test_turn_on(self): def test_turn_on(self):
"""Test turn_on."""
self.switch.turn_on() self.switch.turn_on()
self.port.control.assert_called_once_with(True) self.port.control.assert_called_once_with(True)
self.assertTrue(self.switch._target_state) self.assertTrue(self.switch._target_state)
def test_turn_off(self): def test_turn_off(self):
"""Test turn_off."""
self.switch.turn_off() self.switch.turn_off()
self.port.control.assert_called_once_with(False) self.port.control.assert_called_once_with(False)
self.assertFalse(self.switch._target_state) self.assertFalse(self.switch._target_state)
def test_current_power_mwh(self): def test_current_power_mwh(self):
"""Test current power."""
self.port.data = {'active_pwr': 1} self.port.data = {'active_pwr': 1}
self.assertEqual(1000, self.switch.current_power_mwh) self.assertEqual(1000, self.switch.current_power_mwh)
def test_current_power_mwh_no_data(self): def test_current_power_mwh_no_data(self):
"""Test current power if there is no data."""
self.port.data = {'notpower': 123} self.port.data = {'notpower': 123}
self.assertEqual(0, self.switch.current_power_mwh) self.assertEqual(0, self.switch.current_power_mwh)
def test_device_state_attributes(self): def test_device_state_attributes(self):
"""Test the state attributes."""
self.port.data = {'v_rms': 1.25, self.port.data = {'v_rms': 1.25,
'i_rms': 2.75} 'i_rms': 2.75}
self.assertEqual({'volts': 1.2, 'amps': 2.8}, self.assertEqual({'volts': 1.2, 'amps': 2.8},

View File

@ -1,9 +1,4 @@
""" """The tests for the MQTT switch platform."""
tests.components.switch.test_mqtt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests MQTT switch.
"""
import unittest import unittest
from homeassistant.const import STATE_ON, STATE_OFF, ATTR_ASSUMED_STATE from homeassistant.const import STATE_ON, STATE_OFF, ATTR_ASSUMED_STATE
@ -13,17 +8,19 @@ from tests.common import (
class TestSensorMQTT(unittest.TestCase): class TestSensorMQTT(unittest.TestCase):
""" Test the MQTT switch. """ """Test the MQTT switch."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.mock_publish = mock_mqtt_component(self.hass) self.mock_publish = mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """"Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_controlling_state_via_topic(self): def test_controlling_state_via_topic(self):
"""Test the controlling state via topic."""
self.assertTrue(switch.setup(self.hass, { self.assertTrue(switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -52,6 +49,7 @@ class TestSensorMQTT(unittest.TestCase):
self.assertEqual(STATE_OFF, state.state) self.assertEqual(STATE_OFF, state.state)
def test_sending_mqtt_commands_and_optimistic(self): def test_sending_mqtt_commands_and_optimistic(self):
"""Test the sending MQTT commands in optimistic mode."""
self.assertTrue(switch.setup(self.hass, { self.assertTrue(switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'mqtt', 'platform': 'mqtt',
@ -84,6 +82,7 @@ class TestSensorMQTT(unittest.TestCase):
self.assertEqual(STATE_OFF, state.state) self.assertEqual(STATE_OFF, state.state)
def test_controlling_state_via_topic_and_json_message(self): def test_controlling_state_via_topic_and_json_message(self):
"""Test the controlling state via topic and JSON message."""
self.assertTrue(switch.setup(self.hass, { self.assertTrue(switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'mqtt', 'platform': 'mqtt',

View File

@ -1,10 +1,4 @@
""" """The tests for the Rfxtrx switch platform."""
tests.components.switch.test_rfxtrx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Rfxtrx switch.
"""
import unittest import unittest
from homeassistant.components import rfxtrx as rfxtrx_core from homeassistant.components import rfxtrx as rfxtrx_core
@ -18,25 +12,25 @@ from tests.common import get_test_home_assistant
@pytest.mark.skipif(True, reason='Does not clean up properly, takes 100% CPU') @pytest.mark.skipif(True, reason='Does not clean up properly, takes 100% CPU')
class TestSwitchRfxtrx(unittest.TestCase): class TestSwitchRfxtrx(unittest.TestCase):
""" Test the Rfxtrx switch. """ """Test the Rfxtrx switch platform."""
def setUp(self): def setUp(self):
""" setup hass """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant(0) self.hass = get_test_home_assistant(0)
def tearDown(self): def tearDown(self):
""" Stop down stuff we started. """ """Stop everything that was started."""
rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS = [] rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS = []
rfxtrx_core.RFX_DEVICES = {} rfxtrx_core.RFX_DEVICES = {}
self.hass.stop() self.hass.stop()
def test_default_config(self): def test_default_config(self):
""" Test with 0 switchs """ """Test with 0 switches."""
config = {'devices': {}} config = {'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -44,7 +38,7 @@ class TestSwitchRfxtrx(unittest.TestCase):
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
def test_one_sensor(self): def test_one_sensor(self):
""" Test with 1 switch """ """Test with 1 switch."""
config = {'devices': config = {'devices':
{'123efab1': { {'123efab1': {
'name': 'Test', 'name': 'Test',
@ -56,7 +50,7 @@ class TestSwitchRfxtrx(unittest.TestCase):
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -84,7 +78,7 @@ class TestSwitchRfxtrx(unittest.TestCase):
self.assertFalse(entity.is_on) self.assertFalse(entity.is_on)
def test_several_switchs(self): def test_several_switchs(self):
""" Test with 3 switchs """ """Test with 3 switches."""
config = {'signal_repetitions': 3, config = {'signal_repetitions': 3,
'devices': 'devices':
{'123efab1': { {'123efab1': {
@ -99,7 +93,7 @@ class TestSwitchRfxtrx(unittest.TestCase):
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -125,12 +119,12 @@ class TestSwitchRfxtrx(unittest.TestCase):
self.assertEqual(3, device_num) self.assertEqual(3, device_num)
def test_discover_switch(self): def test_discover_switch(self):
""" Test with discover of switch """ """Test with discovery of switches."""
config = {'automatic_add': True, 'devices': {}} config = {'automatic_add': True, 'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -169,14 +163,14 @@ class TestSwitchRfxtrx(unittest.TestCase):
self.assertEqual('<Entity 118cdeb2 : 0b1100120118cdea02000070: on>', self.assertEqual('<Entity 118cdeb2 : 0b1100120118cdea02000070: on>',
entity.__str__()) entity.__str__())
# trying to add a sensor # Trying to add a sensor
event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279') event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y') event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event) rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES)) self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
self.assertEqual(2, len(devices)) self.assertEqual(2, len(devices))
# trying to add a light # Trying to add a light
event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70') event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01, 0x18, event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01, 0x18,
0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70]) 0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70])
@ -188,12 +182,12 @@ class TestSwitchRfxtrx(unittest.TestCase):
self.assertEqual(2, len(devices)) self.assertEqual(2, len(devices))
def test_discover_switch_noautoadd(self): def test_discover_switch_noautoadd(self):
""" Test with discover of switch when auto add is False """ """Test with discovery of switch when auto add is False."""
config = {'automatic_add': False, 'devices': {}} config = {'automatic_add': False, 'devices': {}}
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -226,14 +220,14 @@ class TestSwitchRfxtrx(unittest.TestCase):
self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES)) self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
# trying to add a sensor # Trying to add a sensor
event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279') event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y') event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event) rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES)) self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
self.assertEqual(0, len(devices)) self.assertEqual(0, len(devices))
# trying to add a light # Trying to add a light
event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70') event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01, event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01,
0x18, 0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70]) 0x18, 0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70])

View File

@ -1,9 +1,4 @@
""" """The tests for the Template switch platform."""
tests.components.switch.template
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests template switch.
"""
import homeassistant.components as core import homeassistant.components as core
import homeassistant.components.switch as switch import homeassistant.components.switch as switch
@ -15,11 +10,11 @@ from tests.common import get_test_home_assistant
class TestTemplateSwitch: class TestTemplateSwitch:
""" Test the Template switch. """ """Test the Template switch."""
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.calls = [] self.calls = []
def record_call(service): def record_call(service):
@ -28,10 +23,11 @@ class TestTemplateSwitch:
self.hass.services.register('test', 'automation', record_call) self.hass.services.register('test', 'automation', record_call)
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_template_state_text(self): def test_template_state_text(self):
""""Test the state text of a template."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -65,6 +61,7 @@ class TestTemplateSwitch:
assert state.state == STATE_OFF assert state.state == STATE_OFF
def test_template_state_boolean_on(self): def test_template_state_boolean_on(self):
"""Test the setting of the state with boolean on."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -89,6 +86,7 @@ class TestTemplateSwitch:
assert state.state == STATE_ON assert state.state == STATE_ON
def test_template_state_boolean_off(self): def test_template_state_boolean_off(self):
"""Test the setting of the state with off."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -113,6 +111,7 @@ class TestTemplateSwitch:
assert state.state == STATE_OFF assert state.state == STATE_OFF
def test_template_syntax_error(self): def test_template_syntax_error(self):
"""Test templating syntax error."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -139,6 +138,7 @@ class TestTemplateSwitch:
assert state.state == 'unavailable' assert state.state == 'unavailable'
def test_invalid_name_does_not_create(self): def test_invalid_name_does_not_create(self):
"""Test invalid name."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -161,6 +161,7 @@ class TestTemplateSwitch:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_invalid_switch_does_not_create(self): def test_invalid_switch_does_not_create(self):
"""Test invalid name."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -172,6 +173,7 @@ class TestTemplateSwitch:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_no_switches_does_not_create(self): def test_no_switches_does_not_create(self):
"""Test if there are no switches no creation."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template' 'platform': 'template'
@ -180,6 +182,7 @@ class TestTemplateSwitch:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_missing_template_does_not_create(self): def test_missing_template_does_not_create(self):
"""Test missing template."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -202,6 +205,7 @@ class TestTemplateSwitch:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_missing_on_does_not_create(self): def test_missing_on_does_not_create(self):
"""Test missing on."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -224,6 +228,7 @@ class TestTemplateSwitch:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_missing_off_does_not_create(self): def test_missing_off_does_not_create(self):
"""Test missing off."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -246,6 +251,7 @@ class TestTemplateSwitch:
assert self.hass.states.all() == [] assert self.hass.states.all() == []
def test_on_action(self): def test_on_action(self):
"""Test on action."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',
@ -276,6 +282,7 @@ class TestTemplateSwitch:
assert 1 == len(self.calls) assert 1 == len(self.calls)
def test_off_action(self): def test_off_action(self):
"""Test off action."""
assert switch.setup(self.hass, { assert switch.setup(self.hass, {
'switch': { 'switch': {
'platform': 'template', 'platform': 'template',

View File

@ -1,9 +1,4 @@
""" """The tests for the Alexa component."""
tests.components.test_alexa
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Home Assistant Alexa component does what it should do.
"""
# pylint: disable=protected-access,too-many-public-methods # pylint: disable=protected-access,too-many-public-methods
import unittest import unittest
import json import json
@ -29,7 +24,7 @@ calls = []
def setUpModule(): # pylint: disable=invalid-name def setUpModule(): # pylint: disable=invalid-name
""" Initalize a Home Assistant server for testing this module. """ """Initialize a Home Assistant server for testing this module."""
global hass global hass
hass = get_test_home_assistant() hass = get_test_home_assistant()
@ -90,7 +85,7 @@ def setUpModule(): # pylint: disable=invalid-name
def tearDownModule(): # pylint: disable=invalid-name def tearDownModule(): # pylint: disable=invalid-name
""" Stops the Home Assistant server. """ """Stop the Home Assistant server."""
hass.stop() hass.stop()
@ -100,12 +95,14 @@ def _req(data={}):
class TestAlexa(unittest.TestCase): class TestAlexa(unittest.TestCase):
""" Test Alexa. """ """Test Alexa."""
def tearDown(self): def tearDown(self):
"""Stop everything that was started."""
hass.pool.block_till_done() hass.pool.block_till_done()
def test_launch_request(self): def test_launch_request(self):
"""Test the launch of a request."""
data = { data = {
'version': '1.0', 'version': '1.0',
'session': { 'session': {
@ -131,6 +128,7 @@ class TestAlexa(unittest.TestCase):
self.assertIn('outputSpeech', resp['response']) self.assertIn('outputSpeech', resp['response'])
def test_intent_request_with_slots(self): def test_intent_request_with_slots(self):
"""Test a request with slots."""
data = { data = {
'version': '1.0', 'version': '1.0',
'session': { 'session': {
@ -172,6 +170,7 @@ class TestAlexa(unittest.TestCase):
self.assertEqual('You told us your sign is virgo.', text) self.assertEqual('You told us your sign is virgo.', text)
def test_intent_request_with_slots_but_no_value(self): def test_intent_request_with_slots_but_no_value(self):
"""Test a request with slots but no value."""
data = { data = {
'version': '1.0', 'version': '1.0',
'session': { 'session': {
@ -212,6 +211,7 @@ class TestAlexa(unittest.TestCase):
self.assertEqual('You told us your sign is .', text) self.assertEqual('You told us your sign is .', text)
def test_intent_request_without_slots(self): def test_intent_request_without_slots(self):
"""Test a request without slots."""
data = { data = {
'version': '1.0', 'version': '1.0',
'session': { 'session': {
@ -258,6 +258,7 @@ class TestAlexa(unittest.TestCase):
self.assertEqual('You are both home, you silly', text) self.assertEqual('You are both home, you silly', text)
def test_intent_request_calling_service(self): def test_intent_request_calling_service(self):
"""Test a request for calling a service."""
data = { data = {
'version': '1.0', 'version': '1.0',
'session': { 'session': {
@ -291,6 +292,7 @@ class TestAlexa(unittest.TestCase):
self.assertEqual(1, call.data.get('hello')) self.assertEqual(1, call.data.get('hello'))
def test_session_ended_request(self): def test_session_ended_request(self):
"""Test the request for ending the session."""
data = { data = {
'version': '1.0', 'version': '1.0',
'session': { 'session': {

View File

@ -1,9 +1,4 @@
""" """The tests for the Home Assistant HTTP component."""
tests.components.test_api
~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Home Assistant HTTP component does what it should do.
"""
# pylint: disable=protected-access,too-many-public-methods # pylint: disable=protected-access,too-many-public-methods
from contextlib import closing from contextlib import closing
import json import json
@ -28,12 +23,12 @@ hass = None
def _url(path=""): def _url(path=""):
""" Helper method to generate urls. """ """Helper method to generate URLs."""
return HTTP_BASE_URL + path return HTTP_BASE_URL + path
def setUpModule(): # pylint: disable=invalid-name def setUpModule(): # pylint: disable=invalid-name
""" Initializes a Home Assistant server. """ """Initialize a Home Assistant server."""
global hass global hass
hass = get_test_home_assistant() hass = get_test_home_assistant()
@ -52,23 +47,26 @@ def setUpModule(): # pylint: disable=invalid-name
def tearDownModule(): # pylint: disable=invalid-name def tearDownModule(): # pylint: disable=invalid-name
""" Stops the Home Assistant server. """ """Stop the Home Assistant server."""
hass.stop() hass.stop()
class TestAPI(unittest.TestCase): class TestAPI(unittest.TestCase):
""" Test the API. """ """Test the API."""
def tearDown(self): def tearDown(self):
"""Stop everything that was started."""
hass.pool.block_till_done() hass.pool.block_till_done()
# TODO move back to http component and test with use_auth. # TODO move back to http component and test with use_auth.
def test_access_denied_without_password(self): def test_access_denied_without_password(self):
"""Test access without password."""
req = requests.get(_url(const.URL_API)) req = requests.get(_url(const.URL_API))
self.assertEqual(401, req.status_code) self.assertEqual(401, req.status_code)
def test_access_denied_with_wrong_password(self): def test_access_denied_with_wrong_password(self):
"""Test ascces with wrong password."""
req = requests.get( req = requests.get(
_url(const.URL_API), _url(const.URL_API),
headers={const.HTTP_HEADER_HA_AUTH: 'wrongpassword'}) headers={const.HTTP_HEADER_HA_AUTH: 'wrongpassword'})
@ -76,12 +74,14 @@ class TestAPI(unittest.TestCase):
self.assertEqual(401, req.status_code) self.assertEqual(401, req.status_code)
def test_access_with_password_in_url(self): def test_access_with_password_in_url(self):
"""Test access with password in URL."""
req = requests.get( req = requests.get(
"{}?api_password={}".format(_url(const.URL_API), API_PASSWORD)) "{}?api_password={}".format(_url(const.URL_API), API_PASSWORD))
self.assertEqual(200, req.status_code) self.assertEqual(200, req.status_code)
def test_access_via_session(self): def test_access_via_session(self):
"""Test access wia session."""
session = requests.Session() session = requests.Session()
req = session.get(_url(const.URL_API), headers=HA_HEADERS) req = session.get(_url(const.URL_API), headers=HA_HEADERS)
self.assertEqual(200, req.status_code) self.assertEqual(200, req.status_code)
@ -90,7 +90,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual(200, req.status_code) self.assertEqual(200, req.status_code)
def test_api_list_state_entities(self): def test_api_list_state_entities(self):
""" Test if the debug interface allows us to list state entities. """ """Test if the debug interface allows us to list state entities."""
req = requests.get(_url(const.URL_API_STATES), req = requests.get(_url(const.URL_API_STATES),
headers=HA_HEADERS) headers=HA_HEADERS)
@ -99,7 +99,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual(hass.states.all(), remote_data) self.assertEqual(hass.states.all(), remote_data)
def test_api_get_state(self): def test_api_get_state(self):
""" Test if the debug interface allows us to get a state. """ """Test if the debug interface allows us to get a state."""
req = requests.get( req = requests.get(
_url(const.URL_API_STATES_ENTITY.format("test.test")), _url(const.URL_API_STATES_ENTITY.format("test.test")),
headers=HA_HEADERS) headers=HA_HEADERS)
@ -113,7 +113,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual(state.attributes, data.attributes) self.assertEqual(state.attributes, data.attributes)
def test_api_get_non_existing_state(self): def test_api_get_non_existing_state(self):
""" Test if the debug interface allows us to get a state. """ """Test if the debug interface allows us to get a state."""
req = requests.get( req = requests.get(
_url(const.URL_API_STATES_ENTITY.format("does_not_exist")), _url(const.URL_API_STATES_ENTITY.format("does_not_exist")),
headers=HA_HEADERS) headers=HA_HEADERS)
@ -121,8 +121,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual(404, req.status_code) self.assertEqual(404, req.status_code)
def test_api_state_change(self): def test_api_state_change(self):
""" Test if we can change the state of an entity that exists. """ """Test if we can change the state of an entity that exists."""
hass.states.set("test.test", "not_to_be_set") hass.states.set("test.test", "not_to_be_set")
requests.post(_url(const.URL_API_STATES_ENTITY.format("test.test")), requests.post(_url(const.URL_API_STATES_ENTITY.format("test.test")),
@ -134,9 +133,7 @@ class TestAPI(unittest.TestCase):
# pylint: disable=invalid-name # pylint: disable=invalid-name
def test_api_state_change_of_non_existing_entity(self): def test_api_state_change_of_non_existing_entity(self):
""" Test if the API allows us to change a state of """Test if changing a state of a non existing entity is possible."""
a non existing entity. """
new_state = "debug_state_change" new_state = "debug_state_change"
req = requests.post( req = requests.post(
@ -153,8 +150,7 @@ class TestAPI(unittest.TestCase):
# pylint: disable=invalid-name # pylint: disable=invalid-name
def test_api_state_change_with_bad_data(self): def test_api_state_change_with_bad_data(self):
""" Test if API sends appropriate error if we omit state. """ """Test if API sends appropriate error if we omit state."""
req = requests.post( req = requests.post(
_url(const.URL_API_STATES_ENTITY.format( _url(const.URL_API_STATES_ENTITY.format(
"test_entity.that_does_not_exist")), "test_entity.that_does_not_exist")),
@ -165,11 +161,11 @@ class TestAPI(unittest.TestCase):
# pylint: disable=invalid-name # pylint: disable=invalid-name
def test_api_fire_event_with_no_data(self): def test_api_fire_event_with_no_data(self):
""" Test if the API allows us to fire an event. """ """Test if the API allows us to fire an event."""
test_value = [] test_value = []
def listener(event): def listener(event):
""" Helper method that will verify our event got called. """ """Helper method that will verify our event got called."""
test_value.append(1) test_value.append(1)
hass.bus.listen_once("test.event_no_data", listener) hass.bus.listen_once("test.event_no_data", listener)
@ -184,12 +180,14 @@ class TestAPI(unittest.TestCase):
# pylint: disable=invalid-name # pylint: disable=invalid-name
def test_api_fire_event_with_data(self): def test_api_fire_event_with_data(self):
""" Test if the API allows us to fire an event. """ """Test if the API allows us to fire an event."""
test_value = [] test_value = []
def listener(event): def listener(event):
""" Helper method that will verify that our event got called and """Helper method that will verify that our event got called.
that test if our data came through. """
Also test if our data came through.
"""
if "test" in event.data: if "test" in event.data:
test_value.append(1) test_value.append(1)
@ -206,11 +204,11 @@ class TestAPI(unittest.TestCase):
# pylint: disable=invalid-name # pylint: disable=invalid-name
def test_api_fire_event_with_invalid_json(self): def test_api_fire_event_with_invalid_json(self):
""" Test if the API allows us to fire an event. """ """Test if the API allows us to fire an event."""
test_value = [] test_value = []
def listener(event): def listener(event):
""" Helper method that will verify our event got called. """ """Helper method that will verify our event got called."""
test_value.append(1) test_value.append(1)
hass.bus.listen_once("test_event_bad_data", listener) hass.bus.listen_once("test_event_bad_data", listener)
@ -237,16 +235,19 @@ class TestAPI(unittest.TestCase):
self.assertEqual(0, len(test_value)) self.assertEqual(0, len(test_value))
def test_api_get_config(self): def test_api_get_config(self):
"""Test the return of the configuration."""
req = requests.get(_url(const.URL_API_CONFIG), req = requests.get(_url(const.URL_API_CONFIG),
headers=HA_HEADERS) headers=HA_HEADERS)
self.assertEqual(hass.config.as_dict(), req.json()) self.assertEqual(hass.config.as_dict(), req.json())
def test_api_get_components(self): def test_api_get_components(self):
"""Test the return of the components."""
req = requests.get(_url(const.URL_API_COMPONENTS), req = requests.get(_url(const.URL_API_COMPONENTS),
headers=HA_HEADERS) headers=HA_HEADERS)
self.assertEqual(hass.config.components, req.json()) self.assertEqual(hass.config.components, req.json())
def test_api_get_error_log(self): def test_api_get_error_log(self):
"""Test the return of the error log."""
test_content = 'Test String' test_content = 'Test String'
with tempfile.NamedTemporaryFile() as log: with tempfile.NamedTemporaryFile() as log:
log.write(test_content.encode('utf-8')) log.write(test_content.encode('utf-8'))
@ -259,7 +260,7 @@ class TestAPI(unittest.TestCase):
self.assertIsNone(req.headers.get('expires')) self.assertIsNone(req.headers.get('expires'))
def test_api_get_event_listeners(self): def test_api_get_event_listeners(self):
""" Test if we can get the list of events being listened for. """ """Test if we can get the list of events being listened for."""
req = requests.get(_url(const.URL_API_EVENTS), req = requests.get(_url(const.URL_API_EVENTS),
headers=HA_HEADERS) headers=HA_HEADERS)
@ -272,7 +273,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual(0, len(local)) self.assertEqual(0, len(local))
def test_api_get_services(self): def test_api_get_services(self):
""" Test if we can get a dict describing current services. """ """Test if we can get a dict describing current services."""
req = requests.get(_url(const.URL_API_SERVICES), req = requests.get(_url(const.URL_API_SERVICES),
headers=HA_HEADERS) headers=HA_HEADERS)
@ -284,11 +285,11 @@ class TestAPI(unittest.TestCase):
self.assertEqual(local, serv_domain["services"]) self.assertEqual(local, serv_domain["services"])
def test_api_call_service_no_data(self): def test_api_call_service_no_data(self):
""" Test if the API allows us to call a service. """ """Test if the API allows us to call a service."""
test_value = [] test_value = []
def listener(service_call): def listener(service_call):
""" Helper method that will verify that our service got called. """ """Helper method that will verify that our service got called."""
test_value.append(1) test_value.append(1)
hass.services.register("test_domain", "test_service", listener) hass.services.register("test_domain", "test_service", listener)
@ -303,12 +304,14 @@ class TestAPI(unittest.TestCase):
self.assertEqual(1, len(test_value)) self.assertEqual(1, len(test_value))
def test_api_call_service_with_data(self): def test_api_call_service_with_data(self):
""" Test if the API allows us to call a service. """ """Test if the API allows us to call a service."""
test_value = [] test_value = []
def listener(service_call): def listener(service_call):
""" Helper method that will verify that our service got called and """Helper method that will verify that our service got called.
that test if our data came through. """
Also test if our data came through.
"""
if "test" in service_call.data: if "test" in service_call.data:
test_value.append(1) test_value.append(1)
@ -325,7 +328,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual(1, len(test_value)) self.assertEqual(1, len(test_value))
def test_api_template(self): def test_api_template(self):
""" Test template API. """ """Test the template API."""
hass.states.set('sensor.temperature', 10) hass.states.set('sensor.temperature', 10)
req = requests.post( req = requests.post(
@ -337,7 +340,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual('10', req.text) self.assertEqual('10', req.text)
def test_api_template_error(self): def test_api_template_error(self):
""" Test template API. """ """Test the template API."""
hass.states.set('sensor.temperature', 10) hass.states.set('sensor.temperature', 10)
req = requests.post( req = requests.post(
@ -349,8 +352,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual(422, req.status_code) self.assertEqual(422, req.status_code)
def test_api_event_forward(self): def test_api_event_forward(self):
""" Test setting up event forwarding. """ """Test setting up event forwarding."""
req = requests.post( req = requests.post(
_url(const.URL_API_EVENT_FORWARD), _url(const.URL_API_EVENT_FORWARD),
headers=HA_HEADERS) headers=HA_HEADERS)
@ -425,6 +427,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual(200, req.status_code) self.assertEqual(200, req.status_code)
def test_stream(self): def test_stream(self):
"""Test the stream."""
listen_count = self._listen_count() listen_count = self._listen_count()
with closing(requests.get(_url(const.URL_API_STREAM), with closing(requests.get(_url(const.URL_API_STREAM),
stream=True, headers=HA_HEADERS)) as req: stream=True, headers=HA_HEADERS)) as req:
@ -442,6 +445,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual('test_event', data['event_type']) self.assertEqual('test_event', data['event_type'])
def test_stream_with_restricted(self): def test_stream_with_restricted(self):
"""Test the stream with restrictions."""
listen_count = self._listen_count() listen_count = self._listen_count()
with closing(requests.get(_url(const.URL_API_STREAM), with closing(requests.get(_url(const.URL_API_STREAM),
data=json.dumps({ data=json.dumps({
@ -466,6 +470,7 @@ class TestAPI(unittest.TestCase):
self.assertEqual('test_event3', data['event_type']) self.assertEqual('test_event3', data['event_type'])
def _stream_next_event(self, stream): def _stream_next_event(self, stream):
"""Test the stream for next event."""
data = b'' data = b''
last_new_line = False last_new_line = False
for dat in stream.iter_content(1): for dat in stream.iter_content(1):
@ -479,5 +484,5 @@ class TestAPI(unittest.TestCase):
return conv if conv == 'ping' else json.loads(conv) return conv if conv == 'ping' else json.loads(conv)
def _listen_count(self): def _listen_count(self):
""" Return number of event listeners. """ """Return number of event listeners."""
return sum(hass.bus.listeners.values()) return sum(hass.bus.listeners.values())

View File

@ -1,9 +1,4 @@
""" """The tests for the Configurator component."""
tests.components.test_configurator
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Configurator component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
@ -14,18 +9,18 @@ from tests.common import get_test_home_assistant
class TestConfigurator(unittest.TestCase): class TestConfigurator(unittest.TestCase):
""" Test the chromecast module. """ """Test the Configurator component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_request_least_info(self): def test_request_least_info(self):
""" Test request config with least amount of data. """ """Test request config with least amount of data."""
request_id = configurator.request_config( request_id = configurator.request_config(
self.hass, "Test Request", lambda _: None) self.hass, "Test Request", lambda _: None)
@ -44,8 +39,7 @@ class TestConfigurator(unittest.TestCase):
request_id, state.attributes.get(configurator.ATTR_CONFIGURE_ID)) request_id, state.attributes.get(configurator.ATTR_CONFIGURE_ID))
def test_request_all_info(self): def test_request_all_info(self):
""" Test request config with all possible info. """ """Test request config with all possible info."""
values = [ values = [
"config_description", "config image url", "config_description", "config image url",
"config submit caption", []] "config submit caption", []]
@ -61,18 +55,15 @@ class TestConfigurator(unittest.TestCase):
*values) *values)
states = self.hass.states.all() states = self.hass.states.all()
self.assertEqual(1, len(states)) self.assertEqual(1, len(states))
state = states[0] state = states[0]
self.assertEqual(configurator.STATE_CONFIGURE, state.state) self.assertEqual(configurator.STATE_CONFIGURE, state.state)
self.assertEqual(exp_attr, state.attributes) self.assertEqual(exp_attr, state.attributes)
def test_callback_called_on_configure(self): def test_callback_called_on_configure(self):
""" Test if our callback gets called when configure service called. """ """Test if our callback gets called when configure service called."""
calls = [] calls = []
request_id = configurator.request_config( request_id = configurator.request_config(
self.hass, "Test Request", lambda _: calls.append(1)) self.hass, "Test Request", lambda _: calls.append(1))
@ -81,41 +72,33 @@ class TestConfigurator(unittest.TestCase):
{configurator.ATTR_CONFIGURE_ID: request_id}) {configurator.ATTR_CONFIGURE_ID: request_id})
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertEqual(1, len(calls), "Callback not called") self.assertEqual(1, len(calls), "Callback not called")
def test_state_change_on_notify_errors(self): def test_state_change_on_notify_errors(self):
""" Test state change on notify errors. """ """Test state change on notify errors."""
request_id = configurator.request_config( request_id = configurator.request_config(
self.hass, "Test Request", lambda _: None) self.hass, "Test Request", lambda _: None)
error = "Oh no bad bad bad" error = "Oh no bad bad bad"
configurator.notify_errors(request_id, error) configurator.notify_errors(request_id, error)
state = self.hass.states.all()[0] state = self.hass.states.all()[0]
self.assertEqual(error, state.attributes.get(configurator.ATTR_ERRORS)) self.assertEqual(error, state.attributes.get(configurator.ATTR_ERRORS))
def test_notify_errors_fail_silently_on_bad_request_id(self): def test_notify_errors_fail_silently_on_bad_request_id(self):
""" Test if notify errors fails silently with a bad request id. """ """Test if notify errors fails silently with a bad request id."""
configurator.notify_errors(2015, "Try this error") configurator.notify_errors(2015, "Try this error")
def test_request_done_works(self): def test_request_done_works(self):
""" Test if calling request done works. """ """Test if calling request done works."""
request_id = configurator.request_config( request_id = configurator.request_config(
self.hass, "Test Request", lambda _: None) self.hass, "Test Request", lambda _: None)
configurator.request_done(request_id) configurator.request_done(request_id)
self.assertEqual(1, len(self.hass.states.all())) self.assertEqual(1, len(self.hass.states.all()))
self.hass.bus.fire(EVENT_TIME_CHANGED) self.hass.bus.fire(EVENT_TIME_CHANGED)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertEqual(0, len(self.hass.states.all())) self.assertEqual(0, len(self.hass.states.all()))
def test_request_done_fail_silently_on_bad_request_id(self): def test_request_done_fail_silently_on_bad_request_id(self):
""" Test that request_done fails silently with a bad request id. """ """Test that request_done fails silently with a bad request id."""
configurator.request_done(2016) configurator.request_done(2016)

View File

@ -1,9 +1,4 @@
""" """The tests for the Conversation component."""
tests.components.test_conversation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Conversation component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -16,10 +11,10 @@ from tests.common import get_test_home_assistant
class TestConversation(unittest.TestCase): class TestConversation(unittest.TestCase):
""" Test the conversation component. """ """Test the conversation component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
""" Start up ha for testing """ """Setup things to be run when tests are started."""
self.ent_id = 'light.kitchen_lights' self.ent_id = 'light.kitchen_lights'
self.hass = get_test_home_assistant(3) self.hass = get_test_home_assistant(3)
self.hass.states.set(self.ent_id, 'on') self.hass.states.set(self.ent_id, 'on')
@ -28,11 +23,11 @@ class TestConversation(unittest.TestCase):
conversation.setup(self.hass, {conversation.DOMAIN: {}})) conversation.setup(self.hass, {conversation.DOMAIN: {}}))
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_turn_on(self): def test_turn_on(self):
""" Setup and perform good turn on requests """ """Setup and perform good turn on requests."""
calls = [] calls = []
def record_call(service): def record_call(service):
@ -50,7 +45,7 @@ class TestConversation(unittest.TestCase):
self.assertEqual([self.ent_id], call.data[ATTR_ENTITY_ID]) self.assertEqual([self.ent_id], call.data[ATTR_ENTITY_ID])
def test_turn_off(self): def test_turn_off(self):
""" Setup and perform good turn off requests """ """Setup and perform good turn off requests."""
calls = [] calls = []
def record_call(service): def record_call(service):
@ -70,7 +65,7 @@ class TestConversation(unittest.TestCase):
@patch('homeassistant.components.conversation.logging.Logger.error') @patch('homeassistant.components.conversation.logging.Logger.error')
@patch('homeassistant.core.ServiceRegistry.call') @patch('homeassistant.core.ServiceRegistry.call')
def test_bad_request_format(self, mock_logger, mock_call): def test_bad_request_format(self, mock_logger, mock_call):
""" Setup and perform a badly formatted request """ """Setup and perform a badly formatted request."""
event_data = { event_data = {
conversation.ATTR_TEXT: conversation.ATTR_TEXT:
'what is the answer to the ultimate question of life, ' + 'what is the answer to the ultimate question of life, ' +
@ -83,7 +78,7 @@ class TestConversation(unittest.TestCase):
@patch('homeassistant.components.conversation.logging.Logger.error') @patch('homeassistant.components.conversation.logging.Logger.error')
@patch('homeassistant.core.ServiceRegistry.call') @patch('homeassistant.core.ServiceRegistry.call')
def test_bad_request_entity(self, mock_logger, mock_call): def test_bad_request_entity(self, mock_logger, mock_call):
""" Setup and perform requests with bad entity id """ """Setup and perform requests with bad entity id."""
event_data = {conversation.ATTR_TEXT: 'turn something off'} event_data = {conversation.ATTR_TEXT: 'turn something off'}
self.assertTrue(self.hass.services.call( self.assertTrue(self.hass.services.call(
conversation.DOMAIN, 'process', event_data, True)) conversation.DOMAIN, 'process', event_data, True))
@ -93,7 +88,7 @@ class TestConversation(unittest.TestCase):
@patch('homeassistant.components.conversation.logging.Logger.error') @patch('homeassistant.components.conversation.logging.Logger.error')
@patch('homeassistant.core.ServiceRegistry.call') @patch('homeassistant.core.ServiceRegistry.call')
def test_bad_request_command(self, mock_logger, mock_call): def test_bad_request_command(self, mock_logger, mock_call):
""" Setup and perform requests with bad command """ """Setup and perform requests with bad command."""
event_data = {conversation.ATTR_TEXT: 'turn kitchen lights over'} event_data = {conversation.ATTR_TEXT: 'turn kitchen lights over'}
self.assertTrue(self.hass.services.call( self.assertTrue(self.hass.services.call(
conversation.DOMAIN, 'process', event_data, True)) conversation.DOMAIN, 'process', event_data, True))
@ -103,7 +98,7 @@ class TestConversation(unittest.TestCase):
@patch('homeassistant.components.conversation.logging.Logger.error') @patch('homeassistant.components.conversation.logging.Logger.error')
@patch('homeassistant.core.ServiceRegistry.call') @patch('homeassistant.core.ServiceRegistry.call')
def test_bad_request_notext(self, mock_logger, mock_call): def test_bad_request_notext(self, mock_logger, mock_call):
""" Setup and perform requests with bad command with no text """ """Setup and perform requests with bad command with no text."""
event_data = {} event_data = {}
self.assertTrue(self.hass.services.call( self.assertTrue(self.hass.services.call(
conversation.DOMAIN, 'process', event_data, True)) conversation.DOMAIN, 'process', event_data, True))

View File

@ -1,9 +1,4 @@
""" """The tests for the Demo component."""
tests.test_component_demo
~~~~~~~~~~~~~~~~~~~~~~~~~
Tests demo component.
"""
import json import json
import os import os
import unittest import unittest
@ -17,14 +12,15 @@ from tests.common import mock_http_component, get_test_home_assistant
@patch('homeassistant.components.sun.setup') @patch('homeassistant.components.sun.setup')
class TestDemo(unittest.TestCase): class TestDemo(unittest.TestCase):
""" Test the demo module. """ """Test the Demo component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
mock_http_component(self.hass) mock_http_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
try: try:
@ -33,19 +29,19 @@ class TestDemo(unittest.TestCase):
pass pass
def test_if_demo_state_shows_by_default(self, mock_sun_setup): def test_if_demo_state_shows_by_default(self, mock_sun_setup):
""" Test if demo state shows if we give no configuration. """ """Test if demo state shows if we give no configuration."""
demo.setup(self.hass, {demo.DOMAIN: {}}) demo.setup(self.hass, {demo.DOMAIN: {}})
self.assertIsNotNone(self.hass.states.get('a.Demo_Mode')) self.assertIsNotNone(self.hass.states.get('a.Demo_Mode'))
def test_hiding_demo_state(self, mock_sun_setup): def test_hiding_demo_state(self, mock_sun_setup):
""" Test if you can hide the demo card. """ """Test if you can hide the demo card."""
demo.setup(self.hass, {demo.DOMAIN: {'hide_demo_state': 1}}) demo.setup(self.hass, {demo.DOMAIN: {'hide_demo_state': 1}})
self.assertIsNone(self.hass.states.get('a.Demo_Mode')) self.assertIsNone(self.hass.states.get('a.Demo_Mode'))
def test_all_entities_can_be_loaded_over_json(self, mock_sun_setup): def test_all_entities_can_be_loaded_over_json(self, mock_sun_setup):
""" Test if you can hide the demo card. """ """Test if you can hide the demo card."""
demo.setup(self.hass, {demo.DOMAIN: {'hide_demo_state': 1}}) demo.setup(self.hass, {demo.DOMAIN: {'hide_demo_state': 1}})
try: try:

View File

@ -1,4 +1,4 @@
"""Tests device sun light trigger component.""" """The tests device sun light trigger component."""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import os import os
import unittest import unittest
@ -37,9 +37,10 @@ def tearDownModule(): # pylint: disable=invalid-name
class TestDeviceSunLightTrigger(unittest.TestCase): class TestDeviceSunLightTrigger(unittest.TestCase):
""" Test the device sun light trigger module. """ """Test the device sun light trigger module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
event_decorators.HASS = self.hass event_decorators.HASS = self.hass
@ -63,30 +64,27 @@ class TestDeviceSunLightTrigger(unittest.TestCase):
self.hass, {sun.DOMAIN: {sun.CONF_ELEVATION: 0}})) self.hass, {sun.DOMAIN: {sun.CONF_ELEVATION: 0}}))
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
event_decorators.HASS = None event_decorators.HASS = None
def test_lights_on_when_sun_sets(self): def test_lights_on_when_sun_sets(self):
""" Test lights go on when there is someone home and the sun sets. """ """Test lights go on when there is someone home and the sun sets."""
self.assertTrue(device_sun_light_trigger.setup( self.assertTrue(device_sun_light_trigger.setup(
self.hass, {device_sun_light_trigger.DOMAIN: {}})) self.hass, {device_sun_light_trigger.DOMAIN: {}}))
ensure_sun_risen(self.hass) ensure_sun_risen(self.hass)
light.turn_off(self.hass) light.turn_off(self.hass)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
ensure_sun_set(self.hass) ensure_sun_set(self.hass)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertTrue(light.is_on(self.hass)) self.assertTrue(light.is_on(self.hass))
def test_lights_turn_off_when_everyone_leaves(self): def test_lights_turn_off_when_everyone_leaves(self):
""" Test lights turn off when everyone leaves the house. """ """Test lights turn off when everyone leaves the house."""
light.turn_on(self.hass) light.turn_on(self.hass)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -102,9 +100,8 @@ class TestDeviceSunLightTrigger(unittest.TestCase):
self.assertFalse(light.is_on(self.hass)) self.assertFalse(light.is_on(self.hass))
def test_lights_turn_on_when_coming_home_after_sun_set(self): def test_lights_turn_on_when_coming_home_after_sun_set(self):
""" Test lights turn on when coming home after sun set. """ """Test lights turn on when coming home after sun set."""
light.turn_off(self.hass) light.turn_off(self.hass)
ensure_sun_set(self.hass) ensure_sun_set(self.hass)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -116,5 +113,4 @@ class TestDeviceSunLightTrigger(unittest.TestCase):
device_tracker.ENTITY_ID_FORMAT.format('device_2'), STATE_HOME) device_tracker.ENTITY_ID_FORMAT.format('device_2'), STATE_HOME)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertTrue(light.is_on(self.hass)) self.assertTrue(light.is_on(self.hass))

View File

@ -1,9 +1,4 @@
""" """The tests for Home Assistant frontend."""
tests.test_component_http
~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Home Assistant HTTP component does what it should do.
"""
# pylint: disable=protected-access,too-many-public-methods # pylint: disable=protected-access,too-many-public-methods
import re import re
import unittest import unittest
@ -25,12 +20,12 @@ hass = None
def _url(path=""): def _url(path=""):
""" Helper method to generate urls. """ """Helper method to generate URLs."""
return HTTP_BASE_URL + path return HTTP_BASE_URL + path
def setUpModule(): # pylint: disable=invalid-name def setUpModule(): # pylint: disable=invalid-name
""" Initalizes a Home Assistant server. """ """Initialize a Home Assistant server."""
global hass global hass
hass = get_test_home_assistant() hass = get_test_home_assistant()
@ -49,18 +44,19 @@ def setUpModule(): # pylint: disable=invalid-name
def tearDownModule(): # pylint: disable=invalid-name def tearDownModule(): # pylint: disable=invalid-name
""" Stops the Home Assistant server. """ """Stop everything that was started."""
hass.stop() hass.stop()
class TestFrontend(unittest.TestCase): class TestFrontend(unittest.TestCase):
""" Test the frontend. """ """Test the frontend."""
def tearDown(self): def tearDown(self):
"""Stop everything that was started."""
hass.pool.block_till_done() hass.pool.block_till_done()
def test_frontend_and_static(self): def test_frontend_and_static(self):
""" Tests if we can get the frontend. """ """Test if we can get the frontend."""
req = requests.get(_url("")) req = requests.get(_url(""))
self.assertEqual(200, req.status_code) self.assertEqual(200, req.status_code)
@ -77,6 +73,7 @@ class TestFrontend(unittest.TestCase):
self.assertEqual(200, req.status_code) self.assertEqual(200, req.status_code)
def test_auto_filling_in_api_password(self): def test_auto_filling_in_api_password(self):
"""Test for auto filling of API password."""
req = requests.get( req = requests.get(
_url("?{}={}".format(http.DATA_API_PASSWORD, API_PASSWORD))) _url("?{}={}".format(http.DATA_API_PASSWORD, API_PASSWORD)))
@ -87,7 +84,9 @@ class TestFrontend(unittest.TestCase):
self.assertIsNotNone(auth_text) self.assertIsNotNone(auth_text)
def test_404(self): def test_404(self):
"""Test for HTTP 404 error."""
self.assertEqual(404, requests.get(_url("/not-existing")).status_code) self.assertEqual(404, requests.get(_url("/not-existing")).status_code)
def test_we_cannot_POST_to_root(self): def test_we_cannot_POST_to_root(self):
"""Test that POST is not allow to root."""
self.assertEqual(405, requests.post(_url("")).status_code) self.assertEqual(405, requests.post(_url("")).status_code)

View File

@ -1,9 +1,4 @@
""" """The tests for the Graphite component."""
tests.components.test_graphite
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests graphite feeder.
"""
import socket import socket
import unittest import unittest
from unittest import mock from unittest import mock
@ -19,23 +14,28 @@ from tests.common import get_test_home_assistant
class TestGraphite(unittest.TestCase): class TestGraphite(unittest.TestCase):
"""Test the Graphite component."""
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.config.latitude = 32.87336 self.hass.config.latitude = 32.87336
self.hass.config.longitude = 117.22743 self.hass.config.longitude = 117.22743
self.gf = graphite.GraphiteFeeder(self.hass, 'foo', 123, 'ha') self.gf = graphite.GraphiteFeeder(self.hass, 'foo', 123, 'ha')
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
@mock.patch('homeassistant.components.graphite.GraphiteFeeder') @mock.patch('homeassistant.components.graphite.GraphiteFeeder')
def test_minimal_config(self, mock_gf): def test_minimal_config(self, mock_gf):
"""Test setup with minimal configuration."""
self.assertTrue(graphite.setup(self.hass, {})) self.assertTrue(graphite.setup(self.hass, {}))
mock_gf.assert_called_once_with(self.hass, 'localhost', 2003, 'ha') mock_gf.assert_called_once_with(self.hass, 'localhost', 2003, 'ha')
@mock.patch('homeassistant.components.graphite.GraphiteFeeder') @mock.patch('homeassistant.components.graphite.GraphiteFeeder')
def test_full_config(self, mock_gf): def test_full_config(self, mock_gf):
"""Test setup with full configuration."""
config = { config = {
'graphite': { 'graphite': {
'host': 'foo', 'host': 'foo',
@ -48,6 +48,7 @@ class TestGraphite(unittest.TestCase):
@mock.patch('homeassistant.components.graphite.GraphiteFeeder') @mock.patch('homeassistant.components.graphite.GraphiteFeeder')
def test_config_bad_port(self, mock_gf): def test_config_bad_port(self, mock_gf):
"""Test setup with invalid port."""
config = { config = {
'graphite': { 'graphite': {
'host': 'foo', 'host': 'foo',
@ -58,6 +59,7 @@ class TestGraphite(unittest.TestCase):
self.assertFalse(mock_gf.called) self.assertFalse(mock_gf.called)
def test_subscribe(self): def test_subscribe(self):
"""Test the subscription."""
fake_hass = mock.MagicMock() fake_hass = mock.MagicMock()
gf = graphite.GraphiteFeeder(fake_hass, 'foo', 123, 'ha') gf = graphite.GraphiteFeeder(fake_hass, 'foo', 123, 'ha')
fake_hass.bus.listen_once.has_calls([ fake_hass.bus.listen_once.has_calls([
@ -68,22 +70,26 @@ class TestGraphite(unittest.TestCase):
EVENT_STATE_CHANGED, gf.event_listener) EVENT_STATE_CHANGED, gf.event_listener)
def test_start(self): def test_start(self):
"""Test the start."""
with mock.patch.object(self.gf, 'start') as mock_start: with mock.patch.object(self.gf, 'start') as mock_start:
self.gf.start_listen('event') self.gf.start_listen('event')
mock_start.assert_called_once_with() mock_start.assert_called_once_with()
def test_shutdown(self): def test_shutdown(self):
"""Test the shutdown."""
with mock.patch.object(self.gf, '_queue') as mock_queue: with mock.patch.object(self.gf, '_queue') as mock_queue:
self.gf.shutdown('event') self.gf.shutdown('event')
mock_queue.put.assert_called_once_with(self.gf._quit_object) mock_queue.put.assert_called_once_with(self.gf._quit_object)
def test_event_listener(self): def test_event_listener(self):
"""Test the event listener."""
with mock.patch.object(self.gf, '_queue') as mock_queue: with mock.patch.object(self.gf, '_queue') as mock_queue:
self.gf.event_listener('foo') self.gf.event_listener('foo')
mock_queue.put.assert_called_once_with('foo') mock_queue.put.assert_called_once_with('foo')
@mock.patch('time.time') @mock.patch('time.time')
def test_report_attributes(self, mock_time): def test_report_attributes(self, mock_time):
"""Test the reporting with attributes."""
mock_time.return_value = 12345 mock_time.return_value = 12345
attrs = {'foo': 1, attrs = {'foo': 1,
'bar': 2.0, 'bar': 2.0,
@ -104,6 +110,7 @@ class TestGraphite(unittest.TestCase):
@mock.patch('time.time') @mock.patch('time.time')
def test_report_with_string_state(self, mock_time): def test_report_with_string_state(self, mock_time):
"""Test the reporting with strings."""
mock_time.return_value = 12345 mock_time.return_value = 12345
expected = [ expected = [
'ha.entity.foo 1.000000 12345', 'ha.entity.foo 1.000000 12345',
@ -117,6 +124,7 @@ class TestGraphite(unittest.TestCase):
@mock.patch('time.time') @mock.patch('time.time')
def test_report_with_binary_state(self, mock_time): def test_report_with_binary_state(self, mock_time):
"""Test the reporting with binary state."""
mock_time.return_value = 12345 mock_time.return_value = 12345
state = ha.State('domain.entity', STATE_ON, {'foo': 1.0}) state = ha.State('domain.entity', STATE_ON, {'foo': 1.0})
with mock.patch.object(self.gf, '_send_to_graphite') as mock_send: with mock.patch.object(self.gf, '_send_to_graphite') as mock_send:
@ -136,6 +144,7 @@ class TestGraphite(unittest.TestCase):
@mock.patch('time.time') @mock.patch('time.time')
def test_send_to_graphite_errors(self, mock_time): def test_send_to_graphite_errors(self, mock_time):
"""Test the sending with errors."""
mock_time.return_value = 12345 mock_time.return_value = 12345
state = ha.State('domain.entity', STATE_ON, {'foo': 1.0}) state = ha.State('domain.entity', STATE_ON, {'foo': 1.0})
with mock.patch.object(self.gf, '_send_to_graphite') as mock_send: with mock.patch.object(self.gf, '_send_to_graphite') as mock_send:
@ -146,6 +155,7 @@ class TestGraphite(unittest.TestCase):
@mock.patch('socket.socket') @mock.patch('socket.socket')
def test_send_to_graphite(self, mock_socket): def test_send_to_graphite(self, mock_socket):
"""Test the sending of data."""
self.gf._send_to_graphite('foo') self.gf._send_to_graphite('foo')
mock_socket.assert_called_once_with(socket.AF_INET, mock_socket.assert_called_once_with(socket.AF_INET,
socket.SOCK_STREAM) socket.SOCK_STREAM)
@ -156,6 +166,7 @@ class TestGraphite(unittest.TestCase):
sock.close.assert_called_once_with() sock.close.assert_called_once_with()
def test_run_stops(self): def test_run_stops(self):
"""Test the stops."""
with mock.patch.object(self.gf, '_queue') as mock_queue: with mock.patch.object(self.gf, '_queue') as mock_queue:
mock_queue.get.return_value = self.gf._quit_object mock_queue.get.return_value = self.gf._quit_object
self.assertEqual(None, self.gf.run()) self.assertEqual(None, self.gf.run())
@ -163,6 +174,7 @@ class TestGraphite(unittest.TestCase):
mock_queue.task_done.assert_called_once_with() mock_queue.task_done.assert_called_once_with()
def test_run(self): def test_run(self):
"""Test the running."""
runs = [] runs = []
event = mock.MagicMock(event_type=EVENT_STATE_CHANGED, event = mock.MagicMock(event_type=EVENT_STATE_CHANGED,
data={'entity_id': 'entity', data={'entity_id': 'entity',

View File

@ -1,9 +1,4 @@
""" """The tests for the Group components."""
tests.test_component_group
~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests the group compoments.
"""
# pylint: disable=protected-access,too-many-public-methods # pylint: disable=protected-access,too-many-public-methods
import unittest import unittest
@ -16,18 +11,18 @@ from tests.common import get_test_home_assistant
class TestComponentsGroup(unittest.TestCase): class TestComponentsGroup(unittest.TestCase):
""" Tests homeassistant.components.group module. """ """Test Group component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
""" Init needed objects. """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_setup_group_with_mixed_groupable_states(self): def test_setup_group_with_mixed_groupable_states(self):
""" Try to setup a group with mixed groupable states """ """Try to setup a group with mixed groupable states."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
self.hass.states.set('device_tracker.Paulus', STATE_HOME) self.hass.states.set('device_tracker.Paulus', STATE_HOME)
group.Group( group.Group(
@ -40,7 +35,7 @@ class TestComponentsGroup(unittest.TestCase):
group.ENTITY_ID_FORMAT.format('person_and_light')).state) group.ENTITY_ID_FORMAT.format('person_and_light')).state)
def test_setup_group_with_a_non_existing_state(self): def test_setup_group_with_a_non_existing_state(self):
""" Try to setup a group with a non existing state """ """Try to setup a group with a non existing state."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
grp = group.Group( grp = group.Group(
@ -50,6 +45,7 @@ class TestComponentsGroup(unittest.TestCase):
self.assertEqual(STATE_ON, grp.state) self.assertEqual(STATE_ON, grp.state)
def test_setup_group_with_non_groupable_states(self): def test_setup_group_with_non_groupable_states(self):
"""Test setup with groups which are not groupable."""
self.hass.states.set('cast.living_room', "Plex") self.hass.states.set('cast.living_room', "Plex")
self.hass.states.set('cast.bedroom', "Netflix") self.hass.states.set('cast.bedroom', "Netflix")
@ -60,13 +56,13 @@ class TestComponentsGroup(unittest.TestCase):
self.assertEqual(STATE_UNKNOWN, grp.state) self.assertEqual(STATE_UNKNOWN, grp.state)
def test_setup_empty_group(self): def test_setup_empty_group(self):
""" Try to setup an empty group. """ """Try to setup an empty group."""
grp = group.Group(self.hass, 'nothing', []) grp = group.Group(self.hass, 'nothing', [])
self.assertEqual(STATE_UNKNOWN, grp.state) self.assertEqual(STATE_UNKNOWN, grp.state)
def test_monitor_group(self): def test_monitor_group(self):
""" Test if the group keeps track of states. """ """Test if the group keeps track of states."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(
@ -80,9 +76,7 @@ class TestComponentsGroup(unittest.TestCase):
self.assertTrue(group_state.attributes.get(group.ATTR_AUTO)) self.assertTrue(group_state.attributes.get(group.ATTR_AUTO))
def test_group_turns_off_if_all_off(self): def test_group_turns_off_if_all_off(self):
""" """Test if turn off if the last device that was on turns off."""
Test if the group turns off if the last device that was on turns off.
"""
self.hass.states.set('light.Bowl', STATE_OFF) self.hass.states.set('light.Bowl', STATE_OFF)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(
@ -94,9 +88,7 @@ class TestComponentsGroup(unittest.TestCase):
self.assertEqual(STATE_OFF, group_state.state) self.assertEqual(STATE_OFF, group_state.state)
def test_group_turns_on_if_all_are_off_and_one_turns_on(self): def test_group_turns_on_if_all_are_off_and_one_turns_on(self):
""" """Test if turn on if all devices were turned off and one turns on."""
Test if group turns on if all devices were turned off and one turns on.
"""
self.hass.states.set('light.Bowl', STATE_OFF) self.hass.states.set('light.Bowl', STATE_OFF)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(
@ -110,7 +102,7 @@ class TestComponentsGroup(unittest.TestCase):
self.assertEqual(STATE_ON, group_state.state) self.assertEqual(STATE_ON, group_state.state)
def test_is_on(self): def test_is_on(self):
""" Test is_on method. """ """Test is_on method."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(
@ -125,7 +117,7 @@ class TestComponentsGroup(unittest.TestCase):
self.assertFalse(group.is_on(self.hass, 'non.existing')) self.assertFalse(group.is_on(self.hass, 'non.existing'))
def test_expand_entity_ids(self): def test_expand_entity_ids(self):
""" Test expand_entity_ids method. """ """Test expand_entity_ids method."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(
@ -136,7 +128,7 @@ class TestComponentsGroup(unittest.TestCase):
self.hass, [test_group.entity_id]))) self.hass, [test_group.entity_id])))
def test_expand_entity_ids_does_not_return_duplicates(self): def test_expand_entity_ids_does_not_return_duplicates(self):
""" Test that expand_entity_ids does not return duplicates. """ """Test that expand_entity_ids does not return duplicates."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(
@ -153,11 +145,11 @@ class TestComponentsGroup(unittest.TestCase):
self.hass, ['light.bowl', test_group.entity_id]))) self.hass, ['light.bowl', test_group.entity_id])))
def test_expand_entity_ids_ignores_non_strings(self): def test_expand_entity_ids_ignores_non_strings(self):
""" Test that non string elements in lists are ignored. """ """Test that non string elements in lists are ignored."""
self.assertEqual([], group.expand_entity_ids(self.hass, [5, True])) self.assertEqual([], group.expand_entity_ids(self.hass, [5, True]))
def test_get_entity_ids(self): def test_get_entity_ids(self):
""" Test get_entity_ids method. """ """Test get_entity_ids method."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(
@ -168,7 +160,7 @@ class TestComponentsGroup(unittest.TestCase):
sorted(group.get_entity_ids(self.hass, test_group.entity_id))) sorted(group.get_entity_ids(self.hass, test_group.entity_id)))
def test_get_entity_ids_with_domain_filter(self): def test_get_entity_ids_with_domain_filter(self):
""" Test if get_entity_ids works with a domain_filter. """ """Test if get_entity_ids works with a domain_filter."""
self.hass.states.set('switch.AC', STATE_OFF) self.hass.states.set('switch.AC', STATE_OFF)
mixed_group = group.Group( mixed_group = group.Group(
@ -180,16 +172,19 @@ class TestComponentsGroup(unittest.TestCase):
self.hass, mixed_group.entity_id, domain_filter="switch")) self.hass, mixed_group.entity_id, domain_filter="switch"))
def test_get_entity_ids_with_non_existing_group_name(self): def test_get_entity_ids_with_non_existing_group_name(self):
""" Tests get_entity_ids with a non existing group. """ """Test get_entity_ids with a non existing group."""
self.assertEqual([], group.get_entity_ids(self.hass, 'non_existing')) self.assertEqual([], group.get_entity_ids(self.hass, 'non_existing'))
def test_get_entity_ids_with_non_group_state(self): def test_get_entity_ids_with_non_group_state(self):
""" Tests get_entity_ids with a non group state. """ """Test get_entity_ids with a non group state."""
self.assertEqual([], group.get_entity_ids(self.hass, 'switch.AC')) self.assertEqual([], group.get_entity_ids(self.hass, 'switch.AC'))
def test_group_being_init_before_first_tracked_state_is_set_to_on(self): def test_group_being_init_before_first_tracked_state_is_set_to_on(self):
""" Test if the group turns on if no states existed and now a state it is """Test if the groups turn on.
tracking is being added as ON. """
If no states existed and now a state it is tracking is being added
as ON.
"""
test_group = group.Group( test_group = group.Group(
self.hass, 'test group', ['light.not_there_1']) self.hass, 'test group', ['light.not_there_1'])
@ -201,8 +196,11 @@ class TestComponentsGroup(unittest.TestCase):
self.assertEqual(STATE_ON, group_state.state) self.assertEqual(STATE_ON, group_state.state)
def test_group_being_init_before_first_tracked_state_is_set_to_off(self): def test_group_being_init_before_first_tracked_state_is_set_to_off(self):
""" Test if the group turns off if no states existed and now a state it is """Test if the group turns off.
tracking is being added as OFF. """
If no states existed and now a state it is tracking is being added
as OFF.
"""
test_group = group.Group( test_group = group.Group(
self.hass, 'test group', ['light.not_there_1']) self.hass, 'test group', ['light.not_there_1'])
@ -214,7 +212,7 @@ class TestComponentsGroup(unittest.TestCase):
self.assertEqual(STATE_OFF, group_state.state) self.assertEqual(STATE_OFF, group_state.state)
def test_setup(self): def test_setup(self):
""" Test setup method. """ """Test setup method."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(
@ -256,13 +254,14 @@ class TestComponentsGroup(unittest.TestCase):
self.assertIsNone(group_state.attributes.get(ATTR_HIDDEN)) self.assertIsNone(group_state.attributes.get(ATTR_HIDDEN))
def test_groups_get_unique_names(self): def test_groups_get_unique_names(self):
""" Two groups with same name should both have a unique entity id. """ """Two groups with same name should both have a unique entity id."""
grp1 = group.Group(self.hass, 'Je suis Charlie') grp1 = group.Group(self.hass, 'Je suis Charlie')
grp2 = group.Group(self.hass, 'Je suis Charlie') grp2 = group.Group(self.hass, 'Je suis Charlie')
self.assertNotEqual(grp1.entity_id, grp2.entity_id) self.assertNotEqual(grp1.entity_id, grp2.entity_id)
def test_expand_entity_ids_expands_nested_groups(self): def test_expand_entity_ids_expands_nested_groups(self):
"""Test if entity ids epands to nested groups."""
group.Group(self.hass, 'light', ['light.test_1', 'light.test_2']) group.Group(self.hass, 'light', ['light.test_1', 'light.test_2'])
group.Group(self.hass, 'switch', ['switch.test_1', 'switch.test_2']) group.Group(self.hass, 'switch', ['switch.test_1', 'switch.test_2'])
group.Group(self.hass, 'group_of_groups', ['group.light', group.Group(self.hass, 'group_of_groups', ['group.light',
@ -274,6 +273,7 @@ class TestComponentsGroup(unittest.TestCase):
['group.group_of_groups']))) ['group.group_of_groups'])))
def test_set_assumed_state_based_on_tracked(self): def test_set_assumed_state_based_on_tracked(self):
"""Test assumed state."""
self.hass.states.set('light.Bowl', STATE_ON) self.hass.states.set('light.Bowl', STATE_ON)
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
test_group = group.Group( test_group = group.Group(

View File

@ -1,9 +1,4 @@
""" """The tests the History component."""
tests.components.test_history
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests the history component.
"""
# pylint: disable=protected-access,too-many-public-methods # pylint: disable=protected-access,too-many-public-methods
from datetime import timedelta from datetime import timedelta
import os import os
@ -19,14 +14,14 @@ from tests.common import (
class TestComponentHistory(unittest.TestCase): class TestComponentHistory(unittest.TestCase):
""" Tests homeassistant.components.history module. """ """Test History component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
""" Init needed objects. """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant(1) self.hass = get_test_home_assistant(1)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
db_path = self.hass.config.path(recorder.DB_FILE) db_path = self.hass.config.path(recorder.DB_FILE)
@ -34,22 +29,23 @@ class TestComponentHistory(unittest.TestCase):
os.remove(db_path) os.remove(db_path)
def init_recorder(self): def init_recorder(self):
"""Initialize the recorder."""
recorder.setup(self.hass, {}) recorder.setup(self.hass, {})
self.hass.start() self.hass.start()
self.wait_recording_done() self.wait_recording_done()
def wait_recording_done(self): def wait_recording_done(self):
""" Block till recording is done. """ """Block till recording is done."""
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
recorder._INSTANCE.block_till_done() recorder._INSTANCE.block_till_done()
def test_setup(self): def test_setup(self):
""" Test setup method of history. """ """Test setup method of history."""
mock_http_component(self.hass) mock_http_component(self.hass)
self.assertTrue(history.setup(self.hass, {})) self.assertTrue(history.setup(self.hass, {}))
def test_last_5_states(self): def test_last_5_states(self):
""" Test retrieving the last 5 states. """ """Test retrieving the last 5 states."""
self.init_recorder() self.init_recorder()
states = [] states = []
@ -67,7 +63,7 @@ class TestComponentHistory(unittest.TestCase):
list(reversed(states)), history.last_5_states(entity_id)) list(reversed(states)), history.last_5_states(entity_id))
def test_get_states(self): def test_get_states(self):
""" Test getting states at a specific point in time. """ """Test getting states at a specific point in time."""
self.init_recorder() self.init_recorder()
states = [] states = []
@ -109,6 +105,7 @@ class TestComponentHistory(unittest.TestCase):
states[0], history.get_state(future, states[0].entity_id)) states[0], history.get_state(future, states[0].entity_id))
def test_state_changes_during_period(self): def test_state_changes_during_period(self):
"""Test state change during period."""
self.init_recorder() self.init_recorder()
entity_id = 'media_player.test' entity_id = 'media_player.test'
@ -145,14 +142,12 @@ class TestComponentHistory(unittest.TestCase):
self.assertEqual(states, hist[entity_id]) self.assertEqual(states, hist[entity_id])
def test_get_significant_states(self): def test_get_significant_states(self):
"""test that only significant states are returned with """Test that only significant states are returned.
get_significant_states.
We inject a bunch of state updates from media player, zone and We inject a bunch of state updates from media player, zone and
thermostat. We should get back every thermostat change that thermostat. We should get back every thermostat change that
includes an attribute change, but only the state updates for includes an attribute change, but only the state updates for
media player (attribute changes are not significant and not returned). media player (attribute changes are not significant and not returned).
""" """
self.init_recorder() self.init_recorder()
mp = 'media_player.test' mp = 'media_player.test'
@ -186,10 +181,10 @@ class TestComponentHistory(unittest.TestCase):
with patch('homeassistant.components.recorder.dt_util.utcnow', with patch('homeassistant.components.recorder.dt_util.utcnow',
return_value=two): return_value=two):
# this state will be skipped only different in time # This state will be skipped only different in time
set_state(mp, 'YouTube', set_state(mp, 'YouTube',
attributes={'media_title': str(sentinel.mt3)}) attributes={'media_title': str(sentinel.mt3)})
# this state will be skipped because domain blacklisted # This state will be skipped because domain blacklisted
set_state(zone, 'zoning') set_state(zone, 'zoning')
set_state(script_nc, 'off') set_state(script_nc, 'off')
states[script_c].append( states[script_c].append(
@ -202,7 +197,7 @@ class TestComponentHistory(unittest.TestCase):
states[mp].append( states[mp].append(
set_state(mp, 'Netflix', set_state(mp, 'Netflix',
attributes={'media_title': str(sentinel.mt4)})) attributes={'media_title': str(sentinel.mt4)}))
# attributes changed even though state is the same # Attributes changed even though state is the same
states[therm].append( states[therm].append(
set_state(therm, 21, attributes={'current_temperature': 20})) set_state(therm, 21, attributes={'current_temperature': 20}))

View File

@ -1,9 +1,4 @@
""" """The tests for the InfluxDB component."""
tests.components.test_influxdb
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests influxdb component.
"""
import copy import copy
import unittest import unittest
from unittest import mock from unittest import mock
@ -15,8 +10,11 @@ from homeassistant.const import STATE_ON, STATE_OFF, EVENT_STATE_CHANGED
class TestInfluxDB(unittest.TestCase): class TestInfluxDB(unittest.TestCase):
"""Test the InfluxDB component."""
@mock.patch('influxdb.InfluxDBClient') @mock.patch('influxdb.InfluxDBClient')
def test_setup_config_full(self, mock_client): def test_setup_config_full(self, mock_client):
"""Test the setup with full configuration."""
config = { config = {
'influxdb': { 'influxdb': {
'host': 'host', 'host': 'host',
@ -37,6 +35,7 @@ class TestInfluxDB(unittest.TestCase):
@mock.patch('influxdb.InfluxDBClient') @mock.patch('influxdb.InfluxDBClient')
def test_setup_config_defaults(self, mock_client): def test_setup_config_defaults(self, mock_client):
"""Test the setup with default configuration."""
config = { config = {
'influxdb': { 'influxdb': {
'host': 'host', 'host': 'host',
@ -52,6 +51,7 @@ class TestInfluxDB(unittest.TestCase):
@mock.patch('influxdb.InfluxDBClient') @mock.patch('influxdb.InfluxDBClient')
def test_setup_missing_keys(self, mock_client): def test_setup_missing_keys(self, mock_client):
"""Test the setup with missing keys."""
config = { config = {
'influxdb': { 'influxdb': {
'host': 'host', 'host': 'host',
@ -67,6 +67,7 @@ class TestInfluxDB(unittest.TestCase):
@mock.patch('influxdb.InfluxDBClient') @mock.patch('influxdb.InfluxDBClient')
def test_setup_query_fail(self, mock_client): def test_setup_query_fail(self, mock_client):
"""Test the setup for query failures."""
config = { config = {
'influxdb': { 'influxdb': {
'host': 'host', 'host': 'host',
@ -80,6 +81,7 @@ class TestInfluxDB(unittest.TestCase):
self.assertFalse(influxdb.setup(hass, config)) self.assertFalse(influxdb.setup(hass, config))
def _setup(self, mock_influx): def _setup(self, mock_influx):
"""Setup the client."""
self.mock_client = mock_influx.return_value self.mock_client = mock_influx.return_value
config = { config = {
'influxdb': { 'influxdb': {
@ -95,6 +97,7 @@ class TestInfluxDB(unittest.TestCase):
@mock.patch('influxdb.InfluxDBClient') @mock.patch('influxdb.InfluxDBClient')
def test_event_listener(self, mock_influx): def test_event_listener(self, mock_influx):
"""Test the event listener."""
self._setup(mock_influx) self._setup(mock_influx)
valid = {'1': 1, valid = {'1': 1,
@ -127,6 +130,7 @@ class TestInfluxDB(unittest.TestCase):
@mock.patch('influxdb.InfluxDBClient') @mock.patch('influxdb.InfluxDBClient')
def test_event_listener_no_units(self, mock_influx): def test_event_listener_no_units(self, mock_influx):
"""Test the event listener for missing units."""
self._setup(mock_influx) self._setup(mock_influx)
for unit in (None, ''): for unit in (None, ''):
@ -158,6 +162,7 @@ class TestInfluxDB(unittest.TestCase):
@mock.patch('influxdb.InfluxDBClient') @mock.patch('influxdb.InfluxDBClient')
def test_event_listener_fail_write(self, mock_influx): def test_event_listener_fail_write(self, mock_influx):
"""Test the event listener for write failures."""
self._setup(mock_influx) self._setup(mock_influx)
state = mock.MagicMock(state=1, state = mock.MagicMock(state=1,
@ -173,6 +178,7 @@ class TestInfluxDB(unittest.TestCase):
@mock.patch('influxdb.InfluxDBClient') @mock.patch('influxdb.InfluxDBClient')
def test_event_listener_blacklist(self, mock_influx): def test_event_listener_blacklist(self, mock_influx):
"""Test the event listener against a blacklist."""
self._setup(mock_influx) self._setup(mock_influx)
for entity_id in ('ok', 'blacklisted'): for entity_id in ('ok', 'blacklisted'):

View File

@ -1,9 +1,4 @@
""" """The testd for Core components."""
tests.components.test_init
~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests core compoments.
"""
# pylint: disable=protected-access,too-many-public-methods # pylint: disable=protected-access,too-many-public-methods
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -17,10 +12,10 @@ from tests.common import get_test_home_assistant
class TestComponentsCore(unittest.TestCase): class TestComponentsCore(unittest.TestCase):
""" Tests homeassistant.components module. """ """Test homeassistant.components module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
""" Init needed objects. """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.assertTrue(comps.setup(self.hass, {})) self.assertTrue(comps.setup(self.hass, {}))
@ -28,17 +23,17 @@ class TestComponentsCore(unittest.TestCase):
self.hass.states.set('light.Ceiling', STATE_OFF) self.hass.states.set('light.Ceiling', STATE_OFF)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_is_on(self): def test_is_on(self):
""" Test is_on method. """ """Test is_on method."""
self.assertTrue(comps.is_on(self.hass, 'light.Bowl')) self.assertTrue(comps.is_on(self.hass, 'light.Bowl'))
self.assertFalse(comps.is_on(self.hass, 'light.Ceiling')) self.assertFalse(comps.is_on(self.hass, 'light.Ceiling'))
self.assertTrue(comps.is_on(self.hass)) self.assertTrue(comps.is_on(self.hass))
def test_turn_on(self): def test_turn_on(self):
""" Test turn_on method. """ """Test turn_on method."""
runs = [] runs = []
self.hass.services.register( self.hass.services.register(
'light', SERVICE_TURN_ON, lambda x: runs.append(1)) 'light', SERVICE_TURN_ON, lambda x: runs.append(1))
@ -50,7 +45,7 @@ class TestComponentsCore(unittest.TestCase):
self.assertEqual(1, len(runs)) self.assertEqual(1, len(runs))
def test_turn_off(self): def test_turn_off(self):
""" Test turn_off method. """ """Test turn_off method."""
runs = [] runs = []
self.hass.services.register( self.hass.services.register(
'light', SERVICE_TURN_OFF, lambda x: runs.append(1)) 'light', SERVICE_TURN_OFF, lambda x: runs.append(1))
@ -62,7 +57,7 @@ class TestComponentsCore(unittest.TestCase):
self.assertEqual(1, len(runs)) self.assertEqual(1, len(runs))
def test_toggle(self): def test_toggle(self):
""" Test toggle method. """ """Test toggle method."""
runs = [] runs = []
self.hass.services.register( self.hass.services.register(
'light', SERVICE_TOGGLE, lambda x: runs.append(1)) 'light', SERVICE_TOGGLE, lambda x: runs.append(1))
@ -75,6 +70,7 @@ class TestComponentsCore(unittest.TestCase):
@patch('homeassistant.core.ServiceRegistry.call') @patch('homeassistant.core.ServiceRegistry.call')
def test_turn_on_to_not_block_for_domains_without_service(self, mock_call): def test_turn_on_to_not_block_for_domains_without_service(self, mock_call):
"""Test if turn_on is blocking domain with no service."""
self.hass.services.register('light', SERVICE_TURN_ON, lambda x: x) self.hass.services.register('light', SERVICE_TURN_ON, lambda x: x)
# We can't test if our service call results in services being called # We can't test if our service call results in services being called

View File

@ -1,9 +1,4 @@
""" """The tests for the input_boolean component."""
tests.components.test_input_boolean
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests input_boolean component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
@ -15,13 +10,14 @@ from tests.common import get_test_home_assistant
class TestInputBoolean(unittest.TestCase): class TestInputBoolean(unittest.TestCase):
""" Test the input boolean module. """ """Test the input boolean module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_config(self): def test_config(self):
@ -42,7 +38,7 @@ class TestInputBoolean(unittest.TestCase):
})) }))
def test_methods(self): def test_methods(self):
""" Test is_on, turn_on, turn_off methods. """ """Test is_on, turn_on, turn_off methods."""
self.assertTrue(input_boolean.setup(self.hass, { self.assertTrue(input_boolean.setup(self.hass, {
'input_boolean': { 'input_boolean': {
'test_1': None, 'test_1': None,
@ -68,6 +64,7 @@ class TestInputBoolean(unittest.TestCase):
input_boolean.is_on(self.hass, entity_id)) input_boolean.is_on(self.hass, entity_id))
def test_config_options(self): def test_config_options(self):
"""Test configuration options."""
count_start = len(self.hass.states.entity_ids()) count_start = len(self.hass.states.entity_ids())
self.assertTrue(input_boolean.setup(self.hass, { self.assertTrue(input_boolean.setup(self.hass, {

View File

@ -1,9 +1,4 @@
""" """The tests for the Input select component."""
tests.components.test_input_select
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests input_select component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
@ -15,13 +10,14 @@ from tests.common import get_test_home_assistant
class TestInputSelect(unittest.TestCase): class TestInputSelect(unittest.TestCase):
""" Test the input select module. """ """Test the input select component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_config(self): def test_config(self):
@ -56,7 +52,7 @@ class TestInputSelect(unittest.TestCase):
})) }))
def test_select_option(self): def test_select_option(self):
""" Test select_option methods. """ """Test select_option methods."""
self.assertTrue(input_select.setup(self.hass, { self.assertTrue(input_select.setup(self.hass, {
'input_select': { 'input_select': {
'test_1': { 'test_1': {
@ -85,6 +81,7 @@ class TestInputSelect(unittest.TestCase):
self.assertEqual('another option', state.state) self.assertEqual('another option', state.state)
def test_config_options(self): def test_config_options(self):
"""Test configuration options."""
count_start = len(self.hass.states.entity_ids()) count_start = len(self.hass.states.entity_ids())
test_2_options = [ test_2_options = [

View File

@ -1,9 +1,4 @@
""" """The tests for the Introduction component."""
tests.components.test_introduction
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test introduction.
"""
import unittest import unittest
from homeassistant.components import introduction from homeassistant.components import introduction
@ -12,15 +7,16 @@ from tests.common import get_test_home_assistant
class TestIntroduction(unittest.TestCase): class TestIntroduction(unittest.TestCase):
""" Test Introduction. """ """Test Introduction."""
def setUp(self): def setUp(self):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): def tearDown(self):
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_setup(self): def test_setup(self):
""" Test Introduction setup """ """Test introduction setup."""
self.assertTrue(introduction.setup(self.hass, {})) self.assertTrue(introduction.setup(self.hass, {}))

View File

@ -1,9 +1,4 @@
""" """The tests for the logbook component."""
tests.components.test_logbook
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests the logbook component.
"""
# pylint: disable=protected-access,too-many-public-methods # pylint: disable=protected-access,too-many-public-methods
import unittest import unittest
from datetime import timedelta from datetime import timedelta
@ -18,18 +13,20 @@ from tests.common import mock_http_component, get_test_home_assistant
class TestComponentHistory(unittest.TestCase): class TestComponentHistory(unittest.TestCase):
""" Tests homeassistant.components.history module. """ """Test the History component."""
def setUp(self): def setUp(self):
""" Test setup method. """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
mock_http_component(self.hass) mock_http_component(self.hass)
self.assertTrue(logbook.setup(self.hass, {})) self.assertTrue(logbook.setup(self.hass, {}))
def tearDown(self): def tearDown(self):
"""Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_service_call_create_logbook_entry(self): def test_service_call_create_logbook_entry(self):
"""Test if service call create log book entry."""
calls = [] calls = []
def event_listener(event): def event_listener(event):
@ -55,6 +52,7 @@ class TestComponentHistory(unittest.TestCase):
logbook.ATTR_ENTITY_ID)) logbook.ATTR_ENTITY_ID))
def test_service_call_create_log_book_entry_no_message(self): def test_service_call_create_log_book_entry_no_message(self):
"""Test if service call create log book entry without message."""
calls = [] calls = []
def event_listener(event): def event_listener(event):
@ -67,7 +65,7 @@ class TestComponentHistory(unittest.TestCase):
self.assertEqual(0, len(calls)) self.assertEqual(0, len(calls))
def test_humanify_filter_sensor(self): def test_humanify_filter_sensor(self):
""" Test humanify filter too frequent sensor values. """ """Test humanify filter too frequent sensor values."""
entity_id = 'sensor.bla' entity_id = 'sensor.bla'
pointA = dt_util.strip_microseconds(dt_util.utcnow().replace(minute=2)) pointA = dt_util.strip_microseconds(dt_util.utcnow().replace(minute=2))
@ -88,6 +86,7 @@ class TestComponentHistory(unittest.TestCase):
entries[1], pointC, 'bla', domain='sensor', entity_id=entity_id) entries[1], pointC, 'bla', domain='sensor', entity_id=entity_id)
def test_entry_to_dict(self): def test_entry_to_dict(self):
"""Test conversion of entry to dict."""
entry = logbook.Entry( entry = logbook.Entry(
dt_util.utcnow(), 'Alarm', 'is triggered', 'switch', 'test_switch' dt_util.utcnow(), 'Alarm', 'is triggered', 'switch', 'test_switch'
) )
@ -98,8 +97,10 @@ class TestComponentHistory(unittest.TestCase):
self.assertEqual('test_switch', data.get(logbook.ATTR_ENTITY_ID)) self.assertEqual('test_switch', data.get(logbook.ATTR_ENTITY_ID))
def test_home_assistant_start_stop_grouped(self): def test_home_assistant_start_stop_grouped(self):
""" Tests if home assistant start and stop events are grouped if """Test if HA start and stop events are grouped.
occuring in the same minute. """
Events that are occuring in the same minute.
"""
entries = list(logbook.humanify(( entries = list(logbook.humanify((
ha.Event(EVENT_HOMEASSISTANT_STOP), ha.Event(EVENT_HOMEASSISTANT_STOP),
ha.Event(EVENT_HOMEASSISTANT_START), ha.Event(EVENT_HOMEASSISTANT_START),
@ -111,7 +112,7 @@ class TestComponentHistory(unittest.TestCase):
domain=ha.DOMAIN) domain=ha.DOMAIN)
def test_process_custom_logbook_entries(self): def test_process_custom_logbook_entries(self):
""" Tests if custom log book entries get added as an entry. """ """Test if custom log book entries get added as an entry."""
name = 'Nice name' name = 'Nice name'
message = 'has a custom entry' message = 'has a custom entry'
entity_id = 'sun.sun' entity_id = 'sun.sun'
@ -131,7 +132,7 @@ class TestComponentHistory(unittest.TestCase):
def assert_entry(self, entry, when=None, name=None, message=None, def assert_entry(self, entry, when=None, name=None, message=None,
domain=None, entity_id=None): domain=None, entity_id=None):
""" Asserts an entry is what is expected """ """Assert an entry is what is expected."""
if when: if when:
self.assertEqual(when, entry.when) self.assertEqual(when, entry.when)
@ -148,8 +149,7 @@ class TestComponentHistory(unittest.TestCase):
self.assertEqual(entity_id, entry.entity_id) self.assertEqual(entity_id, entry.entity_id)
def create_state_changed_event(self, event_time_fired, entity_id, state): def create_state_changed_event(self, event_time_fired, entity_id, state):
""" Create state changed event. """ """Create state changed event."""
# Logbook only cares about state change events that # Logbook only cares about state change events that
# contain an old state but will not actually act on it. # contain an old state but will not actually act on it.
state = ha.State(entity_id, state).as_dict() state = ha.State(entity_id, state).as_dict()

View File

@ -1,9 +1,4 @@
""" """The tests for the Logger component."""
tests.components.test_logger
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests logger component.
"""
from collections import namedtuple from collections import namedtuple
import logging import logging
import unittest import unittest
@ -14,19 +9,19 @@ RECORD = namedtuple('record', ('name', 'levelno'))
class TestUpdater(unittest.TestCase): class TestUpdater(unittest.TestCase):
""" Test logger component. """ """Test logger component."""
def setUp(self): def setUp(self):
""" Create default config """ """Setup things to be run when tests are started."""
self.log_config = {'logger': self.log_config = {'logger':
{'default': 'warning', 'logs': {'test': 'info'}}} {'default': 'warning', 'logs': {'test': 'info'}}}
def tearDown(self): def tearDown(self):
""" Reset logs """ """Stop everything that was started."""
del logging.root.handlers[-1] del logging.root.handlers[-1]
def test_logger_setup(self): def test_logger_setup(self):
""" Uses logger to create a logging filter """ """Use logger to create a logging filter."""
logger.setup(None, self.log_config) logger.setup(None, self.log_config)
self.assertTrue(len(logging.root.handlers) > 0) self.assertTrue(len(logging.root.handlers) > 0)
@ -39,23 +34,23 @@ class TestUpdater(unittest.TestCase):
self.assertEqual(log_filter['logs']['test'], logging.INFO) self.assertEqual(log_filter['logs']['test'], logging.INFO)
def test_logger_test_filters(self): def test_logger_test_filters(self):
""" Tests resulting filter operation """ """Test resulting filter operation."""
logger.setup(None, self.log_config) logger.setup(None, self.log_config)
log_filter = logging.root.handlers[-1].filters[0] log_filter = logging.root.handlers[-1].filters[0]
# blocked default record # Blocked default record
record = RECORD('asdf', logging.DEBUG) record = RECORD('asdf', logging.DEBUG)
self.assertFalse(log_filter.filter(record)) self.assertFalse(log_filter.filter(record))
# allowed default record # Allowed default record
record = RECORD('asdf', logging.WARNING) record = RECORD('asdf', logging.WARNING)
self.assertTrue(log_filter.filter(record)) self.assertTrue(log_filter.filter(record))
# blocked named record # Blocked named record
record = RECORD('test', logging.DEBUG) record = RECORD('test', logging.DEBUG)
self.assertFalse(log_filter.filter(record)) self.assertFalse(log_filter.filter(record))
# allowed named record # Allowed named record
record = RECORD('test', logging.INFO) record = RECORD('test', logging.INFO)
self.assertTrue(log_filter.filter(record)) self.assertTrue(log_filter.filter(record))

View File

@ -1,9 +1,4 @@
""" """The tests for the MQTT component."""
tests.components.test_mqtt
~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests MQTT component.
"""
from collections import namedtuple from collections import namedtuple
import unittest import unittest
from unittest import mock from unittest import mock
@ -19,26 +14,30 @@ from tests.common import (
class TestMQTT(unittest.TestCase): class TestMQTT(unittest.TestCase):
""" Test the MQTT module. """ """Test the MQTT component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant(1) self.hass = get_test_home_assistant(1)
mock_mqtt_component(self.hass) mock_mqtt_component(self.hass)
self.calls = [] self.calls = []
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def record_calls(self, *args): def record_calls(self, *args):
"""Helper for recording calls."""
self.calls.append(args) self.calls.append(args)
def test_client_starts_on_home_assistant_start(self): def test_client_starts_on_home_assistant_start(self):
""""Test if client start on HA launch."""
self.hass.bus.fire(EVENT_HOMEASSISTANT_START) self.hass.bus.fire(EVENT_HOMEASSISTANT_START)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertTrue(mqtt.MQTT_CLIENT.start.called) self.assertTrue(mqtt.MQTT_CLIENT.start.called)
def test_client_stops_on_home_assistant_start(self): def test_client_stops_on_home_assistant_start(self):
"""Test if client stops on HA launch."""
self.hass.bus.fire(EVENT_HOMEASSISTANT_START) self.hass.bus.fire(EVENT_HOMEASSISTANT_START)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.hass.bus.fire(EVENT_HOMEASSISTANT_STOP) self.hass.bus.fire(EVENT_HOMEASSISTANT_STOP)
@ -46,9 +45,11 @@ class TestMQTT(unittest.TestCase):
self.assertTrue(mqtt.MQTT_CLIENT.stop.called) self.assertTrue(mqtt.MQTT_CLIENT.stop.called)
def test_setup_fails_if_no_broker_config(self): def test_setup_fails_if_no_broker_config(self):
"""Test for setup failure if broker configuration is missing."""
self.assertFalse(mqtt.setup(self.hass, {mqtt.DOMAIN: {}})) self.assertFalse(mqtt.setup(self.hass, {mqtt.DOMAIN: {}}))
def test_setup_fails_if_no_connect_broker(self): def test_setup_fails_if_no_connect_broker(self):
"""Test for setup failure if connection to broker is missing."""
with mock.patch('homeassistant.components.mqtt.MQTT', with mock.patch('homeassistant.components.mqtt.MQTT',
side_effect=socket.error()): side_effect=socket.error()):
self.assertFalse(mqtt.setup(self.hass, {mqtt.DOMAIN: { self.assertFalse(mqtt.setup(self.hass, {mqtt.DOMAIN: {
@ -56,6 +57,7 @@ class TestMQTT(unittest.TestCase):
}})) }}))
def test_publish_calls_service(self): def test_publish_calls_service(self):
"""Test the publishing of call to services."""
self.hass.bus.listen_once(EVENT_CALL_SERVICE, self.record_calls) self.hass.bus.listen_once(EVENT_CALL_SERVICE, self.record_calls)
mqtt.publish(self.hass, 'test-topic', 'test-payload') mqtt.publish(self.hass, 'test-topic', 'test-payload')
@ -71,6 +73,7 @@ class TestMQTT(unittest.TestCase):
self.calls[0][0].data['service_data'][mqtt.ATTR_PAYLOAD]) self.calls[0][0].data['service_data'][mqtt.ATTR_PAYLOAD])
def test_service_call_without_topic_does_not_publish(self): def test_service_call_without_topic_does_not_publish(self):
"""Test the service call if topic is missing."""
self.hass.bus.fire(EVENT_CALL_SERVICE, { self.hass.bus.fire(EVENT_CALL_SERVICE, {
ATTR_DOMAIN: mqtt.DOMAIN, ATTR_DOMAIN: mqtt.DOMAIN,
ATTR_SERVICE: mqtt.SERVICE_PUBLISH ATTR_SERVICE: mqtt.SERVICE_PUBLISH
@ -79,7 +82,8 @@ class TestMQTT(unittest.TestCase):
self.assertTrue(not mqtt.MQTT_CLIENT.publish.called) self.assertTrue(not mqtt.MQTT_CLIENT.publish.called)
def test_service_call_with_template_payload_renders_template(self): def test_service_call_with_template_payload_renders_template(self):
""" """Test the service call with rendered template.
If 'payload_template' is provided and 'payload' is not, then render it. If 'payload_template' is provided and 'payload' is not, then render it.
""" """
mqtt.publish_template(self.hass, "test/topic", "{{ 1+1 }}") mqtt.publish_template(self.hass, "test/topic", "{{ 1+1 }}")
@ -88,7 +92,8 @@ class TestMQTT(unittest.TestCase):
self.assertEqual(mqtt.MQTT_CLIENT.publish.call_args[0][1], "2") self.assertEqual(mqtt.MQTT_CLIENT.publish.call_args[0][1], "2")
def test_service_call_with_payload_doesnt_render_template(self): def test_service_call_with_payload_doesnt_render_template(self):
""" """Test the service call with unrendered template.
If a 'payload' is provided then use that instead of 'payload_template'. If a 'payload' is provided then use that instead of 'payload_template'.
""" """
payload = "not a template" payload = "not a template"
@ -104,7 +109,8 @@ class TestMQTT(unittest.TestCase):
self.assertEqual(mqtt.MQTT_CLIENT.publish.call_args[0][1], payload) self.assertEqual(mqtt.MQTT_CLIENT.publish.call_args[0][1], payload)
def test_service_call_without_payload_or_payload_template(self): def test_service_call_without_payload_or_payload_template(self):
""" """Test the service call without payload or payload template.
If neither 'payload' or 'payload_template' is provided then fail. If neither 'payload' or 'payload_template' is provided then fail.
""" """
# Call the service directly because the helper functions require you to # Call the service directly because the helper functions require you to
@ -115,6 +121,7 @@ class TestMQTT(unittest.TestCase):
self.assertFalse(mqtt.MQTT_CLIENT.publish.called) self.assertFalse(mqtt.MQTT_CLIENT.publish.called)
def test_subscribe_topic(self): def test_subscribe_topic(self):
"""Test the subscription of a topic."""
mqtt.subscribe(self.hass, 'test-topic', self.record_calls) mqtt.subscribe(self.hass, 'test-topic', self.record_calls)
fire_mqtt_message(self.hass, 'test-topic', 'test-payload') fire_mqtt_message(self.hass, 'test-topic', 'test-payload')
@ -125,6 +132,7 @@ class TestMQTT(unittest.TestCase):
self.assertEqual('test-payload', self.calls[0][1]) self.assertEqual('test-payload', self.calls[0][1])
def test_subscribe_topic_not_match(self): def test_subscribe_topic_not_match(self):
"""Test if subscribed topic is not a match."""
mqtt.subscribe(self.hass, 'test-topic', self.record_calls) mqtt.subscribe(self.hass, 'test-topic', self.record_calls)
fire_mqtt_message(self.hass, 'another-test-topic', 'test-payload') fire_mqtt_message(self.hass, 'another-test-topic', 'test-payload')
@ -133,6 +141,7 @@ class TestMQTT(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_subscribe_topic_level_wildcard(self): def test_subscribe_topic_level_wildcard(self):
"""Test the subscription of wildcard topics."""
mqtt.subscribe(self.hass, 'test-topic/+/on', self.record_calls) mqtt.subscribe(self.hass, 'test-topic/+/on', self.record_calls)
fire_mqtt_message(self.hass, 'test-topic/bier/on', 'test-payload') fire_mqtt_message(self.hass, 'test-topic/bier/on', 'test-payload')
@ -143,6 +152,7 @@ class TestMQTT(unittest.TestCase):
self.assertEqual('test-payload', self.calls[0][1]) self.assertEqual('test-payload', self.calls[0][1])
def test_subscribe_topic_level_wildcard_no_subtree_match(self): def test_subscribe_topic_level_wildcard_no_subtree_match(self):
"""Test the subscription of wildcard topics."""
mqtt.subscribe(self.hass, 'test-topic/+/on', self.record_calls) mqtt.subscribe(self.hass, 'test-topic/+/on', self.record_calls)
fire_mqtt_message(self.hass, 'test-topic/bier', 'test-payload') fire_mqtt_message(self.hass, 'test-topic/bier', 'test-payload')
@ -151,6 +161,7 @@ class TestMQTT(unittest.TestCase):
self.assertEqual(0, len(self.calls)) self.assertEqual(0, len(self.calls))
def test_subscribe_topic_subtree_wildcard_subtree_topic(self): def test_subscribe_topic_subtree_wildcard_subtree_topic(self):
"""Test the subscription of wildcard topics."""
mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls) mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls)
fire_mqtt_message(self.hass, 'test-topic/bier/on', 'test-payload') fire_mqtt_message(self.hass, 'test-topic/bier/on', 'test-payload')
@ -161,6 +172,7 @@ class TestMQTT(unittest.TestCase):
self.assertEqual('test-payload', self.calls[0][1]) self.assertEqual('test-payload', self.calls[0][1])
def test_subscribe_topic_subtree_wildcard_root_topic(self): def test_subscribe_topic_subtree_wildcard_root_topic(self):
"""Test the subscription of wildcard topics."""
mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls) mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls)
fire_mqtt_message(self.hass, 'test-topic', 'test-payload') fire_mqtt_message(self.hass, 'test-topic', 'test-payload')
@ -171,6 +183,7 @@ class TestMQTT(unittest.TestCase):
self.assertEqual('test-payload', self.calls[0][1]) self.assertEqual('test-payload', self.calls[0][1])
def test_subscribe_topic_subtree_wildcard_no_match(self): def test_subscribe_topic_subtree_wildcard_no_match(self):
"""Test the subscription of wildcard topics."""
mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls) mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls)
fire_mqtt_message(self.hass, 'another-test-topic', 'test-payload') fire_mqtt_message(self.hass, 'another-test-topic', 'test-payload')
@ -180,9 +193,10 @@ class TestMQTT(unittest.TestCase):
class TestMQTTCallbacks(unittest.TestCase): class TestMQTTCallbacks(unittest.TestCase):
""" Test the MQTT callbacks. """ """Test the MQTT callbacks."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant(1) self.hass = get_test_home_assistant(1)
# mock_mqtt_component(self.hass) # mock_mqtt_component(self.hass)
@ -195,13 +209,15 @@ class TestMQTTCallbacks(unittest.TestCase):
self.hass.config.components.append(mqtt.DOMAIN) self.hass.config.components.append(mqtt.DOMAIN)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_receiving_mqtt_message_fires_hass_event(self): def test_receiving_mqtt_message_fires_hass_event(self):
"""Test if receiving triggers an event."""
calls = [] calls = []
def record(event): def record(event):
"""Helper to record calls."""
calls.append(event) calls.append(event)
self.hass.bus.listen_once(mqtt.EVENT_MQTT_MESSAGE_RECEIVED, record) self.hass.bus.listen_once(mqtt.EVENT_MQTT_MESSAGE_RECEIVED, record)
@ -219,6 +235,7 @@ class TestMQTTCallbacks(unittest.TestCase):
self.assertEqual(message.qos, last_event.data['qos']) self.assertEqual(message.qos, last_event.data['qos'])
def test_mqtt_failed_connection_results_in_disconnect(self): def test_mqtt_failed_connection_results_in_disconnect(self):
"""Test if connection failure leads to disconnect."""
for result_code in range(1, 6): for result_code in range(1, 6):
mqtt.MQTT_CLIENT._mqttc = mock.MagicMock() mqtt.MQTT_CLIENT._mqttc = mock.MagicMock()
mqtt.MQTT_CLIENT._mqtt_on_connect(None, {'topics': {}}, 0, mqtt.MQTT_CLIENT._mqtt_on_connect(None, {'topics': {}}, 0,
@ -226,6 +243,7 @@ class TestMQTTCallbacks(unittest.TestCase):
self.assertTrue(mqtt.MQTT_CLIENT._mqttc.disconnect.called) self.assertTrue(mqtt.MQTT_CLIENT._mqttc.disconnect.called)
def test_mqtt_subscribes_topics_on_connect(self): def test_mqtt_subscribes_topics_on_connect(self):
"""Test subscription to topic on connect."""
from collections import OrderedDict from collections import OrderedDict
prev_topics = OrderedDict() prev_topics = OrderedDict()
prev_topics['topic/test'] = 1, prev_topics['topic/test'] = 1,
@ -251,11 +269,13 @@ class TestMQTTCallbacks(unittest.TestCase):
}, mqtt.MQTT_CLIENT.progress) }, mqtt.MQTT_CLIENT.progress)
def test_mqtt_disconnect_tries_no_reconnect_on_stop(self): def test_mqtt_disconnect_tries_no_reconnect_on_stop(self):
"""Test the disconnect tries."""
mqtt.MQTT_CLIENT._mqtt_on_disconnect(None, None, 0) mqtt.MQTT_CLIENT._mqtt_on_disconnect(None, None, 0)
self.assertFalse(mqtt.MQTT_CLIENT._mqttc.reconnect.called) self.assertFalse(mqtt.MQTT_CLIENT._mqttc.reconnect.called)
@mock.patch('homeassistant.components.mqtt.time.sleep') @mock.patch('homeassistant.components.mqtt.time.sleep')
def test_mqtt_disconnect_tries_reconnect(self, mock_sleep): def test_mqtt_disconnect_tries_reconnect(self, mock_sleep):
"""Test the re-connect tries."""
mqtt.MQTT_CLIENT.topics = { mqtt.MQTT_CLIENT.topics = {
'test/topic': 1, 'test/topic': 1,
'test/progress': None 'test/progress': None

View File

@ -1,9 +1,4 @@
""" """The tests for the MQTT eventstream component."""
tests.components.test_mqtt_eventstream
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests MQTT eventstream component.
"""
import json import json
import unittest import unittest
from unittest.mock import ANY, patch from unittest.mock import ANY, patch
@ -24,19 +19,20 @@ from tests.common import (
class TestMqttEventStream(unittest.TestCase): class TestMqttEventStream(unittest.TestCase):
""" Test the MQTT eventstream module. """ """Test the MQTT eventstream module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
super(TestMqttEventStream, self).setUp() super(TestMqttEventStream, self).setUp()
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.mock_mqtt = mock_mqtt_component(self.hass) self.mock_mqtt = mock_mqtt_component(self.hass)
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def add_eventstream(self, sub_topic=None, pub_topic=None): def add_eventstream(self, sub_topic=None, pub_topic=None):
""" Add a mqtt_eventstream component to the hass. """ """Add a mqtt_eventstream component."""
config = {} config = {}
if sub_topic: if sub_topic:
config['subscribe_topic'] = sub_topic config['subscribe_topic'] = sub_topic
@ -45,9 +41,11 @@ class TestMqttEventStream(unittest.TestCase):
return eventstream.setup(self.hass, {eventstream.DOMAIN: config}) return eventstream.setup(self.hass, {eventstream.DOMAIN: config})
def test_setup_succeeds(self): def test_setup_succeeds(self):
""""Test the success of the setup."""
self.assertTrue(self.add_eventstream()) self.assertTrue(self.add_eventstream())
def test_setup_with_pub(self): def test_setup_with_pub(self):
""""Test the setup with subscription."""
# Should start off with no listeners for all events # Should start off with no listeners for all events
self.assertEqual(self.hass.bus.listeners.get('*'), None) self.assertEqual(self.hass.bus.listeners.get('*'), None)
@ -59,6 +57,7 @@ class TestMqttEventStream(unittest.TestCase):
@patch('homeassistant.components.mqtt.subscribe') @patch('homeassistant.components.mqtt.subscribe')
def test_subscribe(self, mock_sub): def test_subscribe(self, mock_sub):
""""Test the subscription."""
sub_topic = 'foo' sub_topic = 'foo'
self.assertTrue(self.add_eventstream(sub_topic=sub_topic)) self.assertTrue(self.add_eventstream(sub_topic=sub_topic))
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -69,6 +68,7 @@ class TestMqttEventStream(unittest.TestCase):
@patch('homeassistant.components.mqtt.publish') @patch('homeassistant.components.mqtt.publish')
@patch('homeassistant.core.dt_util.datetime_to_str') @patch('homeassistant.core.dt_util.datetime_to_str')
def test_state_changed_event_sends_message(self, mock_datetime, mock_pub): def test_state_changed_event_sends_message(self, mock_datetime, mock_pub):
""""Test the sending of a new message if event changed."""
now = '00:19:19 11-01-2016' now = '00:19:19 11-01-2016'
e_id = 'fake.entity' e_id = 'fake.entity'
pub_topic = 'bar' pub_topic = 'bar'
@ -110,6 +110,7 @@ class TestMqttEventStream(unittest.TestCase):
@patch('homeassistant.components.mqtt.publish') @patch('homeassistant.components.mqtt.publish')
def test_time_event_does_not_send_message(self, mock_pub): def test_time_event_does_not_send_message(self, mock_pub):
""""Test the sending of a new message if time event."""
self.assertTrue(self.add_eventstream(pub_topic='bar')) self.assertTrue(self.add_eventstream(pub_topic='bar'))
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -121,6 +122,7 @@ class TestMqttEventStream(unittest.TestCase):
self.assertFalse(mock_pub.called) self.assertFalse(mock_pub.called)
def test_receiving_remote_event_fires_hass_event(self): def test_receiving_remote_event_fires_hass_event(self):
""""Test the receiving of the remotely fired event."""
sub_topic = 'foo' sub_topic = 'foo'
self.assertTrue(self.add_eventstream(sub_topic=sub_topic)) self.assertTrue(self.add_eventstream(sub_topic=sub_topic))
self.hass.pool.block_till_done() self.hass.pool.block_till_done()

View File

@ -1,18 +1,14 @@
""" """The tests for the Proximity component."""
tests.components.test_proximity
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests proximity component.
"""
from homeassistant.components import proximity from homeassistant.components import proximity
from tests.common import get_test_home_assistant from tests.common import get_test_home_assistant
class TestProximity: class TestProximity:
""" Test the Proximity component. """ """Test the Proximity component."""
def setup_method(self, method): def setup_method(self, method):
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.states.set( self.hass.states.set(
'zone.home', 'zoning', 'zone.home', 'zoning',
@ -24,10 +20,11 @@ class TestProximity:
}) })
def teardown_method(self, method): def teardown_method(self, method):
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_proximity(self): def test_proximity(self):
"""Test the proximity."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -53,6 +50,7 @@ class TestProximity:
assert state.state == '0' assert state.state == '0'
def test_no_devices_in_config(self): def test_no_devices_in_config(self):
"""Test for missing devices in configuration."""
assert not proximity.setup(self.hass, { assert not proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -64,6 +62,7 @@ class TestProximity:
}) })
def test_no_tolerance_in_config(self): def test_no_tolerance_in_config(self):
"""Test for missing tolerance in configuration ."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -78,6 +77,7 @@ class TestProximity:
}) })
def test_no_ignored_zones_in_config(self): def test_no_ignored_zones_in_config(self):
"""Test for ignored zones in configuration."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -90,6 +90,7 @@ class TestProximity:
}) })
def test_no_zone_in_config(self): def test_no_zone_in_config(self):
"""Test for missing zone in configuration."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'ignored_zones': { 'ignored_zones': {
@ -104,6 +105,7 @@ class TestProximity:
}) })
def test_device_tracker_test1_in_zone(self): def test_device_tracker_test1_in_zone(self):
"""Test for tracker in zone."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -131,6 +133,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'arrived' assert state.attributes.get('dir_of_travel') == 'arrived'
def test_device_trackers_in_zone(self): def test_device_trackers_in_zone(self):
"""Test for trackers in zone."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -168,6 +171,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'arrived' assert state.attributes.get('dir_of_travel') == 'arrived'
def test_device_tracker_test1_away(self): def test_device_tracker_test1_away(self):
"""Test for tracker state away."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -194,6 +198,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'unknown' assert state.attributes.get('dir_of_travel') == 'unknown'
def test_device_tracker_test1_awayfurther(self): def test_device_tracker_test1_awayfurther(self):
"""Test for tracker state away further."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -230,6 +235,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'away_from' assert state.attributes.get('dir_of_travel') == 'away_from'
def test_device_tracker_test1_awaycloser(self): def test_device_tracker_test1_awaycloser(self):
"""Test for tracker state away closer."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -266,6 +272,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'towards' assert state.attributes.get('dir_of_travel') == 'towards'
def test_all_device_trackers_in_ignored_zone(self): def test_all_device_trackers_in_ignored_zone(self):
"""Test for tracker in ignored zone."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -290,6 +297,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'not set' assert state.attributes.get('dir_of_travel') == 'not set'
def test_device_tracker_test1_no_coordinates(self): def test_device_tracker_test1_no_coordinates(self):
"""Test for tracker with no coordinates."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -314,6 +322,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'not set' assert state.attributes.get('dir_of_travel') == 'not set'
def test_device_tracker_test1_awayfurther_than_test2_first_test1(self): def test_device_tracker_test1_awayfurther_than_test2_first_test1(self):
"""Test for tracker ordering."""
self.hass.states.set( self.hass.states.set(
'device_tracker.test1', 'not_home', 'device_tracker.test1', 'not_home',
{ {
@ -363,6 +372,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'unknown' assert state.attributes.get('dir_of_travel') == 'unknown'
def test_device_tracker_test1_awayfurther_than_test2_first_test2(self): def test_device_tracker_test1_awayfurther_than_test2_first_test2(self):
"""Test for tracker ordering."""
self.hass.states.set( self.hass.states.set(
'device_tracker.test1', 'not_home', 'device_tracker.test1', 'not_home',
{ {
@ -412,6 +422,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'unknown' assert state.attributes.get('dir_of_travel') == 'unknown'
def test_device_tracker_test1_awayfurther_test2_in_ignored_zone(self): def test_device_tracker_test1_awayfurther_test2_in_ignored_zone(self):
"""Test for tracker states."""
self.hass.states.set( self.hass.states.set(
'device_tracker.test1', 'not_home', 'device_tracker.test1', 'not_home',
{ {
@ -450,6 +461,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'unknown' assert state.attributes.get('dir_of_travel') == 'unknown'
def test_device_tracker_test1_awayfurther_test2_first(self): def test_device_tracker_test1_awayfurther_test2_first(self):
"""Test for tracker state."""
self.hass.states.set( self.hass.states.set(
'device_tracker.test1', 'not_home', 'device_tracker.test1', 'not_home',
{ {
@ -519,6 +531,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'unknown' assert state.attributes.get('dir_of_travel') == 'unknown'
def test_device_tracker_test1_awayfurther_a_bit(self): def test_device_tracker_test1_awayfurther_a_bit(self):
"""Test for tracker states."""
assert proximity.setup(self.hass, { assert proximity.setup(self.hass, {
'proximity': { 'proximity': {
'zone': 'home', 'zone': 'home',
@ -556,6 +569,7 @@ class TestProximity:
assert state.attributes.get('dir_of_travel') == 'stationary' assert state.attributes.get('dir_of_travel') == 'stationary'
def test_device_tracker_test1_nearest_after_test2_in_ignored_zone(self): def test_device_tracker_test1_nearest_after_test2_in_ignored_zone(self):
"""Test for tracker states."""
self.hass.states.set( self.hass.states.set(
'device_tracker.test1', 'not_home', 'device_tracker.test1', 'not_home',
{ {

View File

@ -1,9 +1,4 @@
""" """The tests for the Recorder component."""
tests.components.test_recorder
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Recorder component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
import os import os
@ -15,22 +10,23 @@ from tests.common import get_test_home_assistant
class TestRecorder(unittest.TestCase): class TestRecorder(unittest.TestCase):
""" Test the chromecast module. """ """Test the chromecast module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
recorder.setup(self.hass, {}) recorder.setup(self.hass, {})
self.hass.start() self.hass.start()
recorder._INSTANCE.block_till_done() recorder._INSTANCE.block_till_done()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
recorder._INSTANCE.block_till_done() recorder._INSTANCE.block_till_done()
os.remove(self.hass.config.path(recorder.DB_FILE)) os.remove(self.hass.config.path(recorder.DB_FILE))
def test_saving_state(self): def test_saving_state(self):
""" Tests saving and restoring a state. """ """Test saving and restoring a state."""
entity_id = 'test.recorder' entity_id = 'test.recorder'
state = 'restoring_from_db' state = 'restoring_from_db'
attributes = {'test_attr': 5, 'test_attr_10': 'nice'} attributes = {'test_attr': 5, 'test_attr_10': 'nice'}
@ -46,14 +42,14 @@ class TestRecorder(unittest.TestCase):
self.assertEqual(self.hass.states.get(entity_id), states[0]) self.assertEqual(self.hass.states.get(entity_id), states[0])
def test_saving_event(self): def test_saving_event(self):
""" Tests saving and restoring an event. """ """Test saving and restoring an event."""
event_type = 'EVENT_TEST' event_type = 'EVENT_TEST'
event_data = {'test_attr': 5, 'test_attr_10': 'nice'} event_data = {'test_attr': 5, 'test_attr_10': 'nice'}
events = [] events = []
def event_listener(event): def event_listener(event):
""" Records events from eventbus. """ """Record events from eventbus."""
if event.event_type == event_type: if event.event_type == event_type:
events.append(event) events.append(event)

View File

@ -1,9 +1,4 @@
""" """Th tests for the Rfxtrx component."""
tests.components.test_rfxtrx
~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Rfxtrx component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
import time import time
@ -18,21 +13,21 @@ from tests.common import get_test_home_assistant
@pytest.mark.skipif(True, reason='Does not clean up properly, takes 100% CPU') @pytest.mark.skipif(True, reason='Does not clean up properly, takes 100% CPU')
class TestRFXTRX(unittest.TestCase): class TestRFXTRX(unittest.TestCase):
""" Test the sun module. """ """Test the Rfxtrx component."""
def setUp(self): def setUp(self):
""" setup hass """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant(0) self.hass = get_test_home_assistant(0)
def tearDown(self): def tearDown(self):
""" Stop down stuff we started. """ """Stop everything that was started."""
rfxtrx.RECEIVED_EVT_SUBSCRIBERS = [] rfxtrx.RECEIVED_EVT_SUBSCRIBERS = []
rfxtrx.RFX_DEVICES = {} rfxtrx.RFX_DEVICES = {}
rfxtrx.RFXOBJECT = None rfxtrx.RFXOBJECT = None
self.hass.stop() self.hass.stop()
def test_default_config(self): def test_default_config(self):
""" Test config """ """Test configuration."""
self.assertTrue(rfxtrx.setup(self.hass, { self.assertTrue(rfxtrx.setup(self.hass, {
'rfxtrx': { 'rfxtrx': {
'device': '/dev/serial/by-id/usb' + 'device': '/dev/serial/by-id/usb' +
@ -44,7 +39,7 @@ class TestRFXTRX(unittest.TestCase):
devices = [] devices = []
def add_dev_callback(devs): def add_dev_callback(devs):
""" callback to add device """ """Add a callback to add devices."""
for dev in devs: for dev in devs:
devices.append(dev) devices.append(dev)
@ -57,7 +52,7 @@ class TestRFXTRX(unittest.TestCase):
self.assertEquals(len(devices), 2) self.assertEquals(len(devices), 2)
def test_config_failing(self): def test_config_failing(self):
""" Test config """ """Test configuration."""
self.assertFalse(rfxtrx.setup(self.hass, { self.assertFalse(rfxtrx.setup(self.hass, {
'rfxtrx': {} 'rfxtrx': {}
})) }))

View File

@ -1,9 +1,4 @@
""" """The tests for the Scene component."""
tests.components.test_scene
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests scene component.
"""
import unittest import unittest
from homeassistant import loader from homeassistant import loader
@ -13,19 +8,20 @@ from tests.common import get_test_home_assistant
class TestScene(unittest.TestCase): class TestScene(unittest.TestCase):
""" Test scene component. """ """Test the scene component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_config_yaml_alias_anchor(self): def test_config_yaml_alias_anchor(self):
""" """Test the usage of YAML aliases and anchors.
Tests the usage of YAML aliases and anchors. The following test scene
configuration is equivalent to: The following test scene configuration is equivalent to:
scene: scene:
- name: test - name: test
@ -77,6 +73,7 @@ class TestScene(unittest.TestCase):
light_2.last_call('turn_on')[1].get('brightness')) light_2.last_call('turn_on')[1].get('brightness'))
def test_activate_scene(self): def test_activate_scene(self):
"""Test active scene."""
test_light = loader.get_component('light.test') test_light = loader.get_component('light.test')
test_light.init() test_light.init()

View File

@ -1,9 +1,4 @@
""" """The tests for the Script component."""
tests.components.test_script
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests script component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
from datetime import timedelta from datetime import timedelta
import unittest import unittest
@ -18,16 +13,18 @@ ENTITY_ID = 'script.test'
class TestScript(unittest.TestCase): class TestScript(unittest.TestCase):
""" Test the switch module. """ """Test the Script component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_setup_with_missing_sequence(self): def test_setup_with_missing_sequence(self):
"""Test setup with missing sequence."""
self.assertTrue(script.setup(self.hass, { self.assertTrue(script.setup(self.hass, {
'script': { 'script': {
'test': {} 'test': {}
@ -37,6 +34,7 @@ class TestScript(unittest.TestCase):
self.assertEqual(0, len(self.hass.states.entity_ids('script'))) self.assertEqual(0, len(self.hass.states.entity_ids('script')))
def test_setup_with_invalid_object_id(self): def test_setup_with_invalid_object_id(self):
"""Test setup with invalid objects."""
self.assertTrue(script.setup(self.hass, { self.assertTrue(script.setup(self.hass, {
'script': { 'script': {
'test hello world': { 'test hello world': {
@ -48,6 +46,7 @@ class TestScript(unittest.TestCase):
self.assertEqual(0, len(self.hass.states.entity_ids('script'))) self.assertEqual(0, len(self.hass.states.entity_ids('script')))
def test_setup_with_dict_as_sequence(self): def test_setup_with_dict_as_sequence(self):
"""Test setup with dict as sequence."""
self.assertTrue(script.setup(self.hass, { self.assertTrue(script.setup(self.hass, {
'script': { 'script': {
'test': { 'test': {
@ -61,10 +60,12 @@ class TestScript(unittest.TestCase):
self.assertEqual(0, len(self.hass.states.entity_ids('script'))) self.assertEqual(0, len(self.hass.states.entity_ids('script')))
def test_firing_event(self): def test_firing_event(self):
"""Test the firing of events."""
event = 'test_event' event = 'test_event'
calls = [] calls = []
def record_event(event): def record_event(event):
"""Add recorded event to set."""
calls.append(event) calls.append(event)
self.hass.bus.listen(event, record_event) self.hass.bus.listen(event, record_event)
@ -92,9 +93,11 @@ class TestScript(unittest.TestCase):
self.hass.states.get(ENTITY_ID).attributes.get('can_cancel')) self.hass.states.get(ENTITY_ID).attributes.get('can_cancel'))
def test_calling_service_old(self): def test_calling_service_old(self):
"""Test the calling of an old service."""
calls = [] calls = []
def record_call(service): def record_call(service):
"""Add recorded event to set."""
calls.append(service) calls.append(service)
self.hass.services.register('test', 'script', record_call) self.hass.services.register('test', 'script', record_call)
@ -119,9 +122,11 @@ class TestScript(unittest.TestCase):
self.assertEqual('world', calls[0].data.get('hello')) self.assertEqual('world', calls[0].data.get('hello'))
def test_calling_service(self): def test_calling_service(self):
"""Test the calling of a service."""
calls = [] calls = []
def record_call(service): def record_call(service):
"""Add recorded event to set."""
calls.append(service) calls.append(service)
self.hass.services.register('test', 'script', record_call) self.hass.services.register('test', 'script', record_call)
@ -146,10 +151,12 @@ class TestScript(unittest.TestCase):
self.assertEqual('world', calls[0].data.get('hello')) self.assertEqual('world', calls[0].data.get('hello'))
def test_delay(self): def test_delay(self):
"""Test the delay."""
event = 'test_event' event = 'test_event'
calls = [] calls = []
def record_event(event): def record_event(event):
"""Add recorded event to set."""
calls.append(event) calls.append(event)
self.hass.bus.listen(event, record_event) self.hass.bus.listen(event, record_event)
@ -191,10 +198,12 @@ class TestScript(unittest.TestCase):
self.assertEqual(2, len(calls)) self.assertEqual(2, len(calls))
def test_cancel_while_delay(self): def test_cancel_while_delay(self):
"""Test the cancelling while the delay is present."""
event = 'test_event' event = 'test_event'
calls = [] calls = []
def record_event(event): def record_event(event):
"""Add recorded event to set."""
calls.append(event) calls.append(event)
self.hass.bus.listen(event, record_event) self.hass.bus.listen(event, record_event)
@ -233,14 +242,12 @@ class TestScript(unittest.TestCase):
self.assertEqual(0, len(calls)) self.assertEqual(0, len(calls))
def test_turn_on_service(self): def test_turn_on_service(self):
""" """Verify that the turn_on service."""
Verifies that the turn_on service for a script only turns on scripts
that are not currently running.
"""
event = 'test_event' event = 'test_event'
calls = [] calls = []
def record_event(event): def record_event(event):
"""Add recorded event to set."""
calls.append(event) calls.append(event)
self.hass.bus.listen(event, record_event) self.hass.bus.listen(event, record_event)
@ -264,16 +271,18 @@ class TestScript(unittest.TestCase):
self.assertTrue(script.is_on(self.hass, ENTITY_ID)) self.assertTrue(script.is_on(self.hass, ENTITY_ID))
self.assertEqual(0, len(calls)) self.assertEqual(0, len(calls))
# calling turn_on a second time should not advance the script # Calling turn_on a second time should not advance the script
script.turn_on(self.hass, ENTITY_ID) script.turn_on(self.hass, ENTITY_ID)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertEqual(0, len(calls)) self.assertEqual(0, len(calls))
def test_toggle_service(self): def test_toggle_service(self):
"""Test the toggling of a service."""
event = 'test_event' event = 'test_event'
calls = [] calls = []
def record_event(event): def record_event(event):
"""Add recorded event to set."""
calls.append(event) calls.append(event)
self.hass.bus.listen(event, record_event) self.hass.bus.listen(event, record_event)

View File

@ -1,9 +1,4 @@
""" """The tests for the Shell command component."""
tests.components.test_shell_command
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Shell command component.
"""
import os import os
import tempfile import tempfile
import unittest import unittest
@ -16,17 +11,18 @@ from tests.common import get_test_home_assistant
class TestShellCommand(unittest.TestCase): class TestShellCommand(unittest.TestCase):
""" Test the demo module. """ """Test the Shell command component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_executing_service(self): def test_executing_service(self):
""" Test if able to call a configured service. """ """Test if able to call a configured service."""
with tempfile.TemporaryDirectory() as tempdirname: with tempfile.TemporaryDirectory() as tempdirname:
path = os.path.join(tempdirname, 'called.txt') path = os.path.join(tempdirname, 'called.txt')
self.assertTrue(shell_command.setup(self.hass, { self.assertTrue(shell_command.setup(self.hass, {
@ -41,13 +37,13 @@ class TestShellCommand(unittest.TestCase):
self.assertTrue(os.path.isfile(path)) self.assertTrue(os.path.isfile(path))
def test_config_not_dict(self): def test_config_not_dict(self):
""" Test if config is not a dict. """ """Test if config is not a dict."""
self.assertFalse(shell_command.setup(self.hass, { self.assertFalse(shell_command.setup(self.hass, {
'shell_command': ['some', 'weird', 'list'] 'shell_command': ['some', 'weird', 'list']
})) }))
def test_config_not_valid_service_names(self): def test_config_not_valid_service_names(self):
""" Test if config contains invalid service names. """ """Test if config contains invalid service names."""
self.assertFalse(shell_command.setup(self.hass, { self.assertFalse(shell_command.setup(self.hass, {
'shell_command': { 'shell_command': {
'this is invalid because space': 'touch bla.txt' 'this is invalid because space': 'touch bla.txt'
@ -57,6 +53,7 @@ class TestShellCommand(unittest.TestCase):
side_effect=SubprocessError) side_effect=SubprocessError)
@patch('homeassistant.components.shell_command._LOGGER.error') @patch('homeassistant.components.shell_command._LOGGER.error')
def test_subprocess_raising_error(self, mock_call, mock_error): def test_subprocess_raising_error(self, mock_call, mock_error):
"""Test subprocess."""
with tempfile.TemporaryDirectory() as tempdirname: with tempfile.TemporaryDirectory() as tempdirname:
path = os.path.join(tempdirname, 'called.txt') path = os.path.join(tempdirname, 'called.txt')
self.assertTrue(shell_command.setup(self.hass, { self.assertTrue(shell_command.setup(self.hass, {

View File

@ -1,9 +1,4 @@
""" """The tests for the Splunk component."""
tests.components.test_splunk
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests splunk component.
"""
import unittest import unittest
from unittest import mock from unittest import mock
@ -12,7 +7,10 @@ from homeassistant.const import STATE_ON, STATE_OFF, EVENT_STATE_CHANGED
class TestSplunk(unittest.TestCase): class TestSplunk(unittest.TestCase):
"""Test the Splunk component."""
def test_setup_config_full(self): def test_setup_config_full(self):
"""Test setup with all data."""
config = { config = {
'splunk': { 'splunk': {
'host': 'host', 'host': 'host',
@ -28,6 +26,7 @@ class TestSplunk(unittest.TestCase):
hass.bus.listen.call_args_list[0][0][0]) hass.bus.listen.call_args_list[0][0][0])
def test_setup_config_defaults(self): def test_setup_config_defaults(self):
"""Test setup with defaults."""
config = { config = {
'splunk': { 'splunk': {
'host': 'host', 'host': 'host',
@ -41,6 +40,7 @@ class TestSplunk(unittest.TestCase):
hass.bus.listen.call_args_list[0][0][0]) hass.bus.listen.call_args_list[0][0][0])
def _setup(self, mock_requests): def _setup(self, mock_requests):
"""Test the setup."""
self.mock_post = mock_requests.post self.mock_post = mock_requests.post
self.mock_request_exception = Exception self.mock_request_exception = Exception
mock_requests.exceptions.RequestException = self.mock_request_exception mock_requests.exceptions.RequestException = self.mock_request_exception
@ -57,6 +57,7 @@ class TestSplunk(unittest.TestCase):
@mock.patch.object(splunk, 'requests') @mock.patch.object(splunk, 'requests')
@mock.patch('json.dumps') @mock.patch('json.dumps')
def test_event_listener(self, mock_dump, mock_requests): def test_event_listener(self, mock_dump, mock_requests):
"""Test event listener."""
mock_dump.side_effect = lambda x: x mock_dump.side_effect = lambda x: x
self._setup(mock_requests) self._setup(mock_requests)

View File

@ -1,9 +1,4 @@
""" """The tests for the StatsD feeder."""
tests.components.test_statsd
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests StatsD feeder.
"""
import unittest import unittest
from unittest import mock from unittest import mock
@ -13,9 +8,12 @@ from homeassistant.const import STATE_ON, STATE_OFF, EVENT_STATE_CHANGED
class TestStatsd(unittest.TestCase): class TestStatsd(unittest.TestCase):
"""Test the StatsD component."""
@mock.patch('statsd.Connection') @mock.patch('statsd.Connection')
@mock.patch('statsd.Gauge') @mock.patch('statsd.Gauge')
def test_statsd_setup_full(self, mock_gauge, mock_connection): def test_statsd_setup_full(self, mock_gauge, mock_connection):
"""Test setup with all data."""
config = { config = {
'statsd': { 'statsd': {
'host': 'host', 'host': 'host',
@ -38,6 +36,7 @@ class TestStatsd(unittest.TestCase):
@mock.patch('statsd.Connection') @mock.patch('statsd.Connection')
@mock.patch('statsd.Gauge') @mock.patch('statsd.Gauge')
def test_statsd_setup_defaults(self, mock_gauge, mock_connection): def test_statsd_setup_defaults(self, mock_gauge, mock_connection):
"""Test setup with defaults."""
config = { config = {
'statsd': { 'statsd': {
'host': 'host', 'host': 'host',
@ -57,6 +56,7 @@ class TestStatsd(unittest.TestCase):
@mock.patch('statsd.Connection') @mock.patch('statsd.Connection')
@mock.patch('statsd.Gauge') @mock.patch('statsd.Gauge')
def test_event_listener(self, mock_gauge, mock_connection): def test_event_listener(self, mock_gauge, mock_connection):
"""Test event listener."""
config = { config = {
'statsd': { 'statsd': {
'host': 'host', 'host': 'host',

View File

@ -1,9 +1,4 @@
""" """The tests for the Sun component."""
tests.components.test_sun
~~~~~~~~~~~~~~~~~~~~~~~~~
Tests Sun component.
"""
# pylint: disable=too-many-public-methods,protected-access # pylint: disable=too-many-public-methods,protected-access
import unittest import unittest
from datetime import timedelta from datetime import timedelta
@ -18,24 +13,25 @@ from tests.common import get_test_home_assistant
class TestSun(unittest.TestCase): class TestSun(unittest.TestCase):
""" Test the sun module. """ """Test the sun module."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_is_on(self): def test_is_on(self):
""" Test is_on method. """ """Test is_on method."""
self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON) self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON)
self.assertTrue(sun.is_on(self.hass)) self.assertTrue(sun.is_on(self.hass))
self.hass.states.set(sun.ENTITY_ID, sun.STATE_BELOW_HORIZON) self.hass.states.set(sun.ENTITY_ID, sun.STATE_BELOW_HORIZON)
self.assertFalse(sun.is_on(self.hass)) self.assertFalse(sun.is_on(self.hass))
def test_setting_rising(self): def test_setting_rising(self):
""" Test retrieving sun setting and rising. """ """Test retrieving sun setting and rising."""
latitude = 32.87336 latitude = 32.87336
longitude = 117.22743 longitude = 117.22743
@ -76,7 +72,7 @@ class TestSun(unittest.TestCase):
self.assertIsNone(sun.next_setting(self.hass, 'non.existing')) self.assertIsNone(sun.next_setting(self.hass, 'non.existing'))
def test_state_change(self): def test_state_change(self):
""" Test if the state changes at next setting/rising. """ """Test if the state changes at next setting/rising."""
self.hass.config.latitude = '32.87336' self.hass.config.latitude = '32.87336'
self.hass.config.longitude = '117.22743' self.hass.config.longitude = '117.22743'
sun.setup(self.hass, {sun.DOMAIN: {sun.CONF_ELEVATION: 0}}) sun.setup(self.hass, {sun.DOMAIN: {sun.CONF_ELEVATION: 0}})

View File

@ -1,9 +1,4 @@
""" """The tests for the Updater component."""
tests.components.test_updater
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests updater component.
"""
import unittest import unittest
from unittest.mock import patch from unittest.mock import patch
@ -18,17 +13,19 @@ NEW_VERSION = '10000.0'
class TestUpdater(unittest.TestCase): class TestUpdater(unittest.TestCase):
""" Test the demo lock. """ """Test the Updater component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop everything that was started."""
self.hass.stop() self.hass.stop()
@patch('homeassistant.components.updater.get_newest_version') @patch('homeassistant.components.updater.get_newest_version')
def test_new_version_shows_entity_on_start(self, mock_get_newest_version): def test_new_version_shows_entity_on_start(self, mock_get_newest_version):
"""Test if new entity is created if new version is available."""
mock_get_newest_version.return_value = NEW_VERSION mock_get_newest_version.return_value = NEW_VERSION
self.assertTrue(updater.setup(self.hass, { self.assertTrue(updater.setup(self.hass, {
@ -40,6 +37,7 @@ class TestUpdater(unittest.TestCase):
@patch('homeassistant.components.updater.get_newest_version') @patch('homeassistant.components.updater.get_newest_version')
def test_no_entity_on_same_version(self, mock_get_newest_version): def test_no_entity_on_same_version(self, mock_get_newest_version):
"""Test if no entity is created if same version."""
mock_get_newest_version.return_value = CURRENT_VERSION mock_get_newest_version.return_value = CURRENT_VERSION
self.assertTrue(updater.setup(self.hass, { self.assertTrue(updater.setup(self.hass, {
@ -60,14 +58,12 @@ class TestUpdater(unittest.TestCase):
@patch('homeassistant.components.updater.requests.get') @patch('homeassistant.components.updater.requests.get')
def test_errors_while_fetching_new_version(self, mock_get): def test_errors_while_fetching_new_version(self, mock_get):
"""Test for errors while fetching the new version."""
mock_get.side_effect = requests.RequestException mock_get.side_effect = requests.RequestException
self.assertIsNone(updater.get_newest_version()) self.assertIsNone(updater.get_newest_version())
mock_get.side_effect = ValueError mock_get.side_effect = ValueError
self.assertIsNone(updater.get_newest_version()) self.assertIsNone(updater.get_newest_version())
mock_get.side_effect = KeyError mock_get.side_effect = KeyError
self.assertIsNone(updater.get_newest_version()) self.assertIsNone(updater.get_newest_version())

View File

@ -1,9 +1,4 @@
""" """The tests for the weblink component."""
tests.components.test_weblink
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests weblink component.
"""
import unittest import unittest
from homeassistant.components import weblink from homeassistant.components import weblink
@ -12,16 +7,18 @@ from tests.common import get_test_home_assistant
class TestComponentWeblink(unittest.TestCase): class TestComponentWeblink(unittest.TestCase):
""" Tests homeassistant.components.history module. """ """Test the Weblink component."""
def setUp(self): def setUp(self):
""" Test setup method. """ """Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): def tearDown(self):
"""Stop everything that was started."""
self.hass.stop() self.hass.stop()
def test_entities_get_created(self): def test_entities_get_created(self):
"""Test if new entity is created."""
self.assertTrue(weblink.setup(self.hass, { self.assertTrue(weblink.setup(self.hass, {
weblink.DOMAIN: { weblink.DOMAIN: {
'entities': [ 'entities': [

View File

@ -1,9 +1,4 @@
""" """Test zone component."""
tests.components.test_zone
~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests zone component.
"""
import unittest import unittest
from homeassistant.components import zone from homeassistant.components import zone
@ -12,16 +7,18 @@ from tests.common import get_test_home_assistant
class TestComponentZone(unittest.TestCase): class TestComponentZone(unittest.TestCase):
""" Test the zone component. """ """Test the zone component."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_setup(self): def test_setup(self):
"""Test setup."""
info = { info = {
'name': 'Test Zone', 'name': 'Test Zone',
'latitude': 32.880837, 'latitude': 32.880837,
@ -41,6 +38,7 @@ class TestComponentZone(unittest.TestCase):
assert info['passive'] == state.attributes['passive'] assert info['passive'] == state.attributes['passive']
def test_active_zone_skips_passive_zones(self): def test_active_zone_skips_passive_zones(self):
"""Test active and passive zones."""
assert zone.setup(self.hass, { assert zone.setup(self.hass, {
'zone': [ 'zone': [
{ {
@ -71,6 +69,7 @@ class TestComponentZone(unittest.TestCase):
assert 'zone.active_zone' == active.entity_id assert 'zone.active_zone' == active.entity_id
def test_active_zone_prefers_smaller_zone_if_same_distance(self): def test_active_zone_prefers_smaller_zone_if_same_distance(self):
"""Test zone size preferences."""
latitude = 32.880600 latitude = 32.880600
longitude = -117.237561 longitude = -117.237561
assert zone.setup(self.hass, { assert zone.setup(self.hass, {
@ -108,6 +107,7 @@ class TestComponentZone(unittest.TestCase):
assert 'zone.smallest_zone' == active.entity_id assert 'zone.smallest_zone' == active.entity_id
def test_in_zone_works_for_passive_zones(self): def test_in_zone_works_for_passive_zones(self):
"""Test working in passive zones."""
latitude = 32.880600 latitude = 32.880600
longitude = -117.237561 longitude = -117.237561
assert zone.setup(self.hass, { assert zone.setup(self.hass, {

View File

@ -0,0 +1 @@
"""The tests for Thermostat platforms."""

View File

@ -1,9 +1,4 @@
""" """The tests for the heat control thermostat."""
tests.components.thermostat.test_heat_control
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests heat control thermostat.
"""
import unittest import unittest
from homeassistant.const import ( from homeassistant.const import (
@ -28,9 +23,10 @@ target_temp = 42.0
class TestThermostatHeatControl(unittest.TestCase): class TestThermostatHeatControl(unittest.TestCase):
""" Test the Heat Control thermostat. """ """Test the Heat Control thermostat."""
def setUp(self): # pylint: disable=invalid-name def setUp(self): # pylint: disable=invalid-name
"""Setup things to be run when tests are started."""
self.hass = get_test_home_assistant() self.hass = get_test_home_assistant()
self.hass.config.temperature_unit = TEMP_CELCIUS self.hass.config.temperature_unit = TEMP_CELCIUS
thermostat.setup(self.hass, {'thermostat': { thermostat.setup(self.hass, {'thermostat': {
@ -41,19 +37,22 @@ class TestThermostatHeatControl(unittest.TestCase):
}}) }})
def tearDown(self): # pylint: disable=invalid-name def tearDown(self): # pylint: disable=invalid-name
""" Stop down stuff we started. """ """Stop down everything that was started."""
self.hass.stop() self.hass.stop()
def test_setup_defaults_to_unknown(self): def test_setup_defaults_to_unknown(self):
"""Test the setting of defaults to unknown."""
self.assertEqual('unknown', self.hass.states.get(entity).state) self.assertEqual('unknown', self.hass.states.get(entity).state)
def test_default_setup_params(self): def test_default_setup_params(self):
"""Test the setup with default parameters."""
state = self.hass.states.get(entity) state = self.hass.states.get(entity)
self.assertEqual(7, state.attributes.get('min_temp')) self.assertEqual(7, state.attributes.get('min_temp'))
self.assertEqual(35, state.attributes.get('max_temp')) self.assertEqual(35, state.attributes.get('max_temp'))
self.assertEqual(None, state.attributes.get('temperature')) self.assertEqual(None, state.attributes.get('temperature'))
def test_custom_setup_params(self): def test_custom_setup_params(self):
"""Test the setup with custom parameters."""
thermostat.setup(self.hass, {'thermostat': { thermostat.setup(self.hass, {'thermostat': {
'platform': 'heat_control', 'platform': 'heat_control',
'name': 'test', 'name': 'test',
@ -70,11 +69,13 @@ class TestThermostatHeatControl(unittest.TestCase):
self.assertEqual(str(target_temp), self.hass.states.get(entity).state) self.assertEqual(str(target_temp), self.hass.states.get(entity).state)
def test_set_target_temp(self): def test_set_target_temp(self):
"""Test the setting of the target temperature."""
thermostat.set_temperature(self.hass, 30) thermostat.set_temperature(self.hass, 30)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
self.assertEqual('30.0', self.hass.states.get(entity).state) self.assertEqual('30.0', self.hass.states.get(entity).state)
def test_set_target_temp_turns_on_heater(self): def test_set_target_temp_turns_on_heater(self):
"""Test if target temperature turn heater on."""
self._setup_switch(False) self._setup_switch(False)
self._setup_sensor(25) self._setup_sensor(25)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -87,6 +88,7 @@ class TestThermostatHeatControl(unittest.TestCase):
self.assertEqual(ent_switch, call.data['entity_id']) self.assertEqual(ent_switch, call.data['entity_id'])
def test_set_target_temp_turns_off_heater(self): def test_set_target_temp_turns_off_heater(self):
"""Test if target temperature turn heater off."""
self._setup_switch(True) self._setup_switch(True)
self._setup_sensor(30) self._setup_sensor(30)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -99,6 +101,7 @@ class TestThermostatHeatControl(unittest.TestCase):
self.assertEqual(ent_switch, call.data['entity_id']) self.assertEqual(ent_switch, call.data['entity_id'])
def test_set_temp_change_turns_on_heater(self): def test_set_temp_change_turns_on_heater(self):
"""Test if temperature change turn heater on."""
self._setup_switch(False) self._setup_switch(False)
thermostat.set_temperature(self.hass, 30) thermostat.set_temperature(self.hass, 30)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -111,6 +114,7 @@ class TestThermostatHeatControl(unittest.TestCase):
self.assertEqual(ent_switch, call.data['entity_id']) self.assertEqual(ent_switch, call.data['entity_id'])
def test_temp_change_turns_off_heater(self): def test_temp_change_turns_off_heater(self):
"""Test if temperature change turn heater off."""
self._setup_switch(True) self._setup_switch(True)
thermostat.set_temperature(self.hass, 25) thermostat.set_temperature(self.hass, 25)
self.hass.pool.block_till_done() self.hass.pool.block_till_done()
@ -123,18 +127,18 @@ class TestThermostatHeatControl(unittest.TestCase):
self.assertEqual(ent_switch, call.data['entity_id']) self.assertEqual(ent_switch, call.data['entity_id'])
def _setup_sensor(self, temp, unit=TEMP_CELCIUS): def _setup_sensor(self, temp, unit=TEMP_CELCIUS):
""" Setup the test sensor. """ """Setup the test sensor."""
self.hass.states.set(ent_sensor, temp, { self.hass.states.set(ent_sensor, temp, {
ATTR_UNIT_OF_MEASUREMENT: unit ATTR_UNIT_OF_MEASUREMENT: unit
}) })
def _setup_switch(self, is_on): def _setup_switch(self, is_on):
""" Setup the test switch. """ """Setup the test switch."""
self.hass.states.set(ent_switch, STATE_ON if is_on else STATE_OFF) self.hass.states.set(ent_switch, STATE_ON if is_on else STATE_OFF)
self.calls = [] self.calls = []
def log_call(call): def log_call(call):
""" Log service calls. """ """Log service calls."""
self.calls.append(call) self.calls.append(call)
self.hass.services.register('switch', SERVICE_TURN_ON, log_call) self.hass.services.register('switch', SERVICE_TURN_ON, log_call)

View File

@ -1,9 +1,4 @@
""" """The test the Honeywell thermostat module."""
tests.components.thermostat.honeywell
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tests the Honeywell thermostat module.
"""
import socket import socket
import unittest import unittest
from unittest import mock from unittest import mock
@ -16,10 +11,13 @@ import homeassistant.components.thermostat.honeywell as honeywell
class TestHoneywell(unittest.TestCase): class TestHoneywell(unittest.TestCase):
"""A test class for Honeywell themostats."""
@mock.patch('somecomfort.SomeComfort') @mock.patch('somecomfort.SomeComfort')
@mock.patch('homeassistant.components.thermostat.' @mock.patch('homeassistant.components.thermostat.'
'honeywell.HoneywellUSThermostat') 'honeywell.HoneywellUSThermostat')
def test_setup_us(self, mock_ht, mock_sc): def test_setup_us(self, mock_ht, mock_sc):
"""Test for the US setup."""
config = { config = {
CONF_USERNAME: 'user', CONF_USERNAME: 'user',
CONF_PASSWORD: 'pass', CONF_PASSWORD: 'pass',
@ -50,6 +48,7 @@ class TestHoneywell(unittest.TestCase):
@mock.patch('somecomfort.SomeComfort') @mock.patch('somecomfort.SomeComfort')
def test_setup_us_failures(self, mock_sc): def test_setup_us_failures(self, mock_sc):
"""Test the US setup."""
hass = mock.MagicMock() hass = mock.MagicMock()
add_devices = mock.MagicMock() add_devices = mock.MagicMock()
config = { config = {
@ -72,6 +71,7 @@ class TestHoneywell(unittest.TestCase):
@mock.patch('homeassistant.components.thermostat.' @mock.patch('homeassistant.components.thermostat.'
'honeywell.HoneywellUSThermostat') 'honeywell.HoneywellUSThermostat')
def _test_us_filtered_devices(self, mock_ht, mock_sc, loc=None, dev=None): def _test_us_filtered_devices(self, mock_ht, mock_sc, loc=None, dev=None):
"""Test for US filtered thermostats."""
config = { config = {
CONF_USERNAME: 'user', CONF_USERNAME: 'user',
CONF_PASSWORD: 'pass', CONF_PASSWORD: 'pass',
@ -107,18 +107,21 @@ class TestHoneywell(unittest.TestCase):
return mock_ht.call_args_list, mock_sc return mock_ht.call_args_list, mock_sc
def test_us_filtered_thermostat_1(self): def test_us_filtered_thermostat_1(self):
"""Test for US filtered thermostats."""
result, client = self._test_us_filtered_devices( result, client = self._test_us_filtered_devices(
dev=mock.sentinel.loc1dev1) dev=mock.sentinel.loc1dev1)
devices = [x[0][1].deviceid for x in result] devices = [x[0][1].deviceid for x in result]
self.assertEqual([mock.sentinel.loc1dev1], devices) self.assertEqual([mock.sentinel.loc1dev1], devices)
def test_us_filtered_thermostat_2(self): def test_us_filtered_thermostat_2(self):
"""Test for US filtered location."""
result, client = self._test_us_filtered_devices( result, client = self._test_us_filtered_devices(
dev=mock.sentinel.loc2dev1) dev=mock.sentinel.loc2dev1)
devices = [x[0][1].deviceid for x in result] devices = [x[0][1].deviceid for x in result]
self.assertEqual([mock.sentinel.loc2dev1], devices) self.assertEqual([mock.sentinel.loc2dev1], devices)
def test_us_filtered_location_1(self): def test_us_filtered_location_1(self):
"""Test for US filtered locations."""
result, client = self._test_us_filtered_devices( result, client = self._test_us_filtered_devices(
loc=mock.sentinel.loc1) loc=mock.sentinel.loc1)
devices = [x[0][1].deviceid for x in result] devices = [x[0][1].deviceid for x in result]
@ -126,6 +129,7 @@ class TestHoneywell(unittest.TestCase):
mock.sentinel.loc1dev2], devices) mock.sentinel.loc1dev2], devices)
def test_us_filtered_location_2(self): def test_us_filtered_location_2(self):
"""Test for US filtered locations."""
result, client = self._test_us_filtered_devices( result, client = self._test_us_filtered_devices(
loc=mock.sentinel.loc2) loc=mock.sentinel.loc2)
devices = [x[0][1].deviceid for x in result] devices = [x[0][1].deviceid for x in result]
@ -135,6 +139,7 @@ class TestHoneywell(unittest.TestCase):
@mock.patch('homeassistant.components.thermostat.honeywell.' @mock.patch('homeassistant.components.thermostat.honeywell.'
'RoundThermostat') 'RoundThermostat')
def test_eu_setup_full_config(self, mock_round, mock_evo): def test_eu_setup_full_config(self, mock_round, mock_evo):
"""Test the EU setup wwith complete configuration."""
config = { config = {
CONF_USERNAME: 'user', CONF_USERNAME: 'user',
CONF_PASSWORD: 'pass', CONF_PASSWORD: 'pass',
@ -159,6 +164,7 @@ class TestHoneywell(unittest.TestCase):
@mock.patch('homeassistant.components.thermostat.honeywell.' @mock.patch('homeassistant.components.thermostat.honeywell.'
'RoundThermostat') 'RoundThermostat')
def test_eu_setup_partial_config(self, mock_round, mock_evo): def test_eu_setup_partial_config(self, mock_round, mock_evo):
"""Test the EU setup with partial configuration."""
config = { config = {
CONF_USERNAME: 'user', CONF_USERNAME: 'user',
CONF_PASSWORD: 'pass', CONF_PASSWORD: 'pass',
@ -179,6 +185,7 @@ class TestHoneywell(unittest.TestCase):
@mock.patch('homeassistant.components.thermostat.honeywell.' @mock.patch('homeassistant.components.thermostat.honeywell.'
'RoundThermostat') 'RoundThermostat')
def test_eu_setup_bad_temp(self, mock_round, mock_evo): def test_eu_setup_bad_temp(self, mock_round, mock_evo):
"""Test the EU setup with invalid temperature."""
config = { config = {
CONF_USERNAME: 'user', CONF_USERNAME: 'user',
CONF_PASSWORD: 'pass', CONF_PASSWORD: 'pass',
@ -191,6 +198,7 @@ class TestHoneywell(unittest.TestCase):
@mock.patch('homeassistant.components.thermostat.honeywell.' @mock.patch('homeassistant.components.thermostat.honeywell.'
'RoundThermostat') 'RoundThermostat')
def test_eu_setup_error(self, mock_round, mock_evo): def test_eu_setup_error(self, mock_round, mock_evo):
"""Test the EU setup with errors."""
config = { config = {
CONF_USERNAME: 'user', CONF_USERNAME: 'user',
CONF_PASSWORD: 'pass', CONF_PASSWORD: 'pass',
@ -204,8 +212,12 @@ class TestHoneywell(unittest.TestCase):
class TestHoneywellRound(unittest.TestCase): class TestHoneywellRound(unittest.TestCase):
"""A test class for Honeywell Round thermostats."""
def setup_method(self, method): def setup_method(self, method):
"""Test the setup method."""
def fake_temperatures(force_refresh=None): def fake_temperatures(force_refresh=None):
"""Create fake temperatures."""
temps = [ temps = [
{'id': '1', 'temp': 20, 'setpoint': 21, {'id': '1', 'temp': 20, 'setpoint': 21,
'thermostat': 'main', 'name': 'House'}, 'thermostat': 'main', 'name': 'House'},
@ -222,6 +234,7 @@ class TestHoneywellRound(unittest.TestCase):
False, 17) False, 17)
def test_attributes(self): def test_attributes(self):
"""Test the attributes."""
self.assertEqual('House', self.round1.name) self.assertEqual('House', self.round1.name)
self.assertEqual(TEMP_CELCIUS, self.round1.unit_of_measurement) self.assertEqual(TEMP_CELCIUS, self.round1.unit_of_measurement)
self.assertEqual(20, self.round1.current_temperature) self.assertEqual(20, self.round1.current_temperature)
@ -235,6 +248,7 @@ class TestHoneywellRound(unittest.TestCase):
self.assertFalse(self.round2.is_away_mode_on) self.assertFalse(self.round2.is_away_mode_on)
def test_away_mode(self): def test_away_mode(self):
"""Test setting the away mode."""
self.assertFalse(self.round1.is_away_mode_on) self.assertFalse(self.round1.is_away_mode_on)
self.round1.turn_away_mode_on() self.round1.turn_away_mode_on()
self.assertTrue(self.round1.is_away_mode_on) self.assertTrue(self.round1.is_away_mode_on)
@ -246,12 +260,16 @@ class TestHoneywellRound(unittest.TestCase):
self.device.cancel_temp_override.assert_called_once_with('House') self.device.cancel_temp_override.assert_called_once_with('House')
def test_set_temperature(self): def test_set_temperature(self):
"""Test setting the temperature."""
self.round1.set_temperature(25) self.round1.set_temperature(25)
self.device.set_temperature.assert_called_once_with('House', 25) self.device.set_temperature.assert_called_once_with('House', 25)
class TestHoneywellUS(unittest.TestCase): class TestHoneywellUS(unittest.TestCase):
"""A test class for Honeywell US thermostats."""
def setup_method(self, method): def setup_method(self, method):
"""Test the setup method."""
self.client = mock.MagicMock() self.client = mock.MagicMock()
self.device = mock.MagicMock() self.device = mock.MagicMock()
self.honeywell = honeywell.HoneywellUSThermostat( self.honeywell = honeywell.HoneywellUSThermostat(
@ -267,21 +285,25 @@ class TestHoneywellUS(unittest.TestCase):
self.device.fan_mode = 'auto' self.device.fan_mode = 'auto'
def test_properties(self): def test_properties(self):
"""Test the properties."""
self.assertTrue(self.honeywell.is_fan_on) self.assertTrue(self.honeywell.is_fan_on)
self.assertEqual('test', self.honeywell.name) self.assertEqual('test', self.honeywell.name)
self.assertEqual(72, self.honeywell.current_temperature) self.assertEqual(72, self.honeywell.current_temperature)
def test_unit_of_measurement(self): def test_unit_of_measurement(self):
"""Test the unit of measurement."""
self.assertEqual(TEMP_FAHRENHEIT, self.honeywell.unit_of_measurement) self.assertEqual(TEMP_FAHRENHEIT, self.honeywell.unit_of_measurement)
self.device.temperature_unit = 'C' self.device.temperature_unit = 'C'
self.assertEqual(TEMP_CELCIUS, self.honeywell.unit_of_measurement) self.assertEqual(TEMP_CELCIUS, self.honeywell.unit_of_measurement)
def test_target_temp(self): def test_target_temp(self):
"""Test the target temperature."""
self.assertEqual(65, self.honeywell.target_temperature) self.assertEqual(65, self.honeywell.target_temperature)
self.device.system_mode = 'cool' self.device.system_mode = 'cool'
self.assertEqual(78, self.honeywell.target_temperature) self.assertEqual(78, self.honeywell.target_temperature)
def test_set_temp(self): def test_set_temp(self):
"""Test setting the temperature."""
self.honeywell.set_temperature(70) self.honeywell.set_temperature(70)
self.assertEqual(70, self.device.setpoint_heat) self.assertEqual(70, self.device.setpoint_heat)
self.assertEqual(70, self.honeywell.target_temperature) self.assertEqual(70, self.honeywell.target_temperature)
@ -293,11 +315,13 @@ class TestHoneywellUS(unittest.TestCase):
self.assertEqual(74, self.honeywell.target_temperature) self.assertEqual(74, self.honeywell.target_temperature)
def test_set_temp_fail(self): def test_set_temp_fail(self):
"""Test if setting the temperature fails."""
self.device.setpoint_heat = mock.MagicMock( self.device.setpoint_heat = mock.MagicMock(
side_effect=somecomfort.SomeComfortError) side_effect=somecomfort.SomeComfortError)
self.honeywell.set_temperature(123) self.honeywell.set_temperature(123)
def test_attributes(self): def test_attributes(self):
"""Test the attributes."""
expected = { expected = {
'fan': 'running', 'fan': 'running',
'fanmode': 'auto', 'fanmode': 'auto',
@ -309,6 +333,7 @@ class TestHoneywellUS(unittest.TestCase):
self.assertEqual(expected, self.honeywell.device_state_attributes) self.assertEqual(expected, self.honeywell.device_state_attributes)
def test_with_no_fan(self): def test_with_no_fan(self):
"""Test if there is on fan."""
self.device.fan_running = False self.device.fan_running = False
self.device.fan_mode = None self.device.fan_mode = None
expected = { expected = {

View File

@ -1,44 +1,38 @@
""" """Provide a mock device scanner."""
config.custom_components.device_tracker.test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Provides a mock device scanner.
"""
def get_scanner(hass, config): def get_scanner(hass, config):
""" Returns a mock scanner. """ """Returns a mock scanner."""
return SCANNER return SCANNER
class MockScanner(object): class MockScanner(object):
""" Mock device scanner. """ """Mock device scanner."""
def __init__(self): def __init__(self):
""" Initialize the MockScanner. """ """Initialize the MockScanner."""
self.devices_home = [] self.devices_home = []
def come_home(self, device): def come_home(self, device):
""" Make a device come home. """ """Make a device come home."""
self.devices_home.append(device) self.devices_home.append(device)
def leave_home(self, device): def leave_home(self, device):
""" Make a device leave the house. """ """Make a device leave the house."""
self.devices_home.remove(device) self.devices_home.remove(device)
def reset(self): def reset(self):
""" Resets which devices are home. """ """Reset which devices are home."""
self.devices_home = [] self.devices_home = []
def scan_devices(self): def scan_devices(self):
""" Returns a list of fake devices. """ """Return a list of fake devices."""
return list(self.devices_home) return list(self.devices_home)
def get_device_name(self, device): def get_device_name(self, device):
""" """Return a name for a mock device.
Returns a name for a mock device.
Returns None for dev1 for testing. Return None for dev1 for testing.
""" """
return None if device == 'DEV1' else device.lower() return None if device == 'DEV1' else device.lower()

Some files were not shown because too many files have changed in this diff Show More