135 lines
4.8 KiB
Python
135 lines
4.8 KiB
Python
"""The tests for the litejet component."""
|
|
import logging
|
|
import unittest
|
|
from unittest import mock
|
|
|
|
from homeassistant import setup
|
|
from homeassistant.components import litejet
|
|
import homeassistant.components.switch as switch
|
|
|
|
from tests.common import get_test_home_assistant
|
|
from tests.components.switch import common
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
ENTITY_SWITCH = "switch.mock_switch_1"
|
|
ENTITY_SWITCH_NUMBER = 1
|
|
ENTITY_OTHER_SWITCH = "switch.mock_switch_2"
|
|
ENTITY_OTHER_SWITCH_NUMBER = 2
|
|
|
|
|
|
class TestLiteJetSwitch(unittest.TestCase):
|
|
"""Test the litejet component."""
|
|
|
|
@mock.patch("homeassistant.components.litejet.LiteJet")
|
|
def setup_method(self, method, mock_pylitejet):
|
|
"""Set up things to be run when tests are started."""
|
|
self.hass = get_test_home_assistant()
|
|
self.hass.start()
|
|
|
|
self.switch_pressed_callbacks = {}
|
|
self.switch_released_callbacks = {}
|
|
|
|
def get_switch_name(number):
|
|
return f"Mock Switch #{number}"
|
|
|
|
def on_switch_pressed(number, callback):
|
|
self.switch_pressed_callbacks[number] = callback
|
|
|
|
def on_switch_released(number, callback):
|
|
self.switch_released_callbacks[number] = callback
|
|
|
|
self.mock_lj = mock_pylitejet.return_value
|
|
self.mock_lj.loads.return_value = range(0)
|
|
self.mock_lj.button_switches.return_value = range(1, 3)
|
|
self.mock_lj.all_switches.return_value = range(1, 6)
|
|
self.mock_lj.scenes.return_value = range(0)
|
|
self.mock_lj.get_switch_name.side_effect = get_switch_name
|
|
self.mock_lj.on_switch_pressed.side_effect = on_switch_pressed
|
|
self.mock_lj.on_switch_released.side_effect = on_switch_released
|
|
|
|
config = {"litejet": {"port": "/dev/serial/by-id/mock-litejet"}}
|
|
if method == self.test_include_switches_False:
|
|
config["litejet"]["include_switches"] = False
|
|
elif method != self.test_include_switches_unspecified:
|
|
config["litejet"]["include_switches"] = True
|
|
|
|
assert setup.setup_component(self.hass, litejet.DOMAIN, config)
|
|
self.hass.block_till_done()
|
|
|
|
def teardown_method(self, method):
|
|
"""Stop everything that was started."""
|
|
self.hass.stop()
|
|
|
|
def switch(self):
|
|
"""Return the switch state."""
|
|
return self.hass.states.get(ENTITY_SWITCH)
|
|
|
|
def other_switch(self):
|
|
"""Return the other switch state."""
|
|
return self.hass.states.get(ENTITY_OTHER_SWITCH)
|
|
|
|
def test_include_switches_unspecified(self):
|
|
"""Test that switches are ignored by default."""
|
|
self.mock_lj.button_switches.assert_not_called()
|
|
self.mock_lj.all_switches.assert_not_called()
|
|
|
|
def test_include_switches_False(self):
|
|
"""Test that switches can be explicitly ignored."""
|
|
self.mock_lj.button_switches.assert_not_called()
|
|
self.mock_lj.all_switches.assert_not_called()
|
|
|
|
def test_on_off(self):
|
|
"""Test turning the switch on and off."""
|
|
assert self.switch().state == "off"
|
|
assert self.other_switch().state == "off"
|
|
|
|
assert not switch.is_on(self.hass, ENTITY_SWITCH)
|
|
|
|
common.turn_on(self.hass, ENTITY_SWITCH)
|
|
self.hass.block_till_done()
|
|
self.mock_lj.press_switch.assert_called_with(ENTITY_SWITCH_NUMBER)
|
|
|
|
common.turn_off(self.hass, ENTITY_SWITCH)
|
|
self.hass.block_till_done()
|
|
self.mock_lj.release_switch.assert_called_with(ENTITY_SWITCH_NUMBER)
|
|
|
|
def test_pressed_event(self):
|
|
"""Test handling an event from LiteJet."""
|
|
# Switch 1
|
|
_LOGGER.info(self.switch_pressed_callbacks[ENTITY_SWITCH_NUMBER])
|
|
self.switch_pressed_callbacks[ENTITY_SWITCH_NUMBER]()
|
|
self.hass.block_till_done()
|
|
|
|
assert switch.is_on(self.hass, ENTITY_SWITCH)
|
|
assert not switch.is_on(self.hass, ENTITY_OTHER_SWITCH)
|
|
assert self.switch().state == "on"
|
|
assert self.other_switch().state == "off"
|
|
|
|
# Switch 2
|
|
self.switch_pressed_callbacks[ENTITY_OTHER_SWITCH_NUMBER]()
|
|
self.hass.block_till_done()
|
|
|
|
assert switch.is_on(self.hass, ENTITY_OTHER_SWITCH)
|
|
assert switch.is_on(self.hass, ENTITY_SWITCH)
|
|
assert self.other_switch().state == "on"
|
|
assert self.switch().state == "on"
|
|
|
|
def test_released_event(self):
|
|
"""Test handling an event from LiteJet."""
|
|
# Initial state is on.
|
|
self.switch_pressed_callbacks[ENTITY_OTHER_SWITCH_NUMBER]()
|
|
self.hass.block_till_done()
|
|
|
|
assert switch.is_on(self.hass, ENTITY_OTHER_SWITCH)
|
|
|
|
# Event indicates it is off now.
|
|
|
|
self.switch_released_callbacks[ENTITY_OTHER_SWITCH_NUMBER]()
|
|
self.hass.block_till_done()
|
|
|
|
assert not switch.is_on(self.hass, ENTITY_OTHER_SWITCH)
|
|
assert not switch.is_on(self.hass, ENTITY_SWITCH)
|
|
assert self.other_switch().state == "off"
|
|
assert self.switch().state == "off"
|