Add tests for mFi sensors
Note that some of the indirection here is so that I can reuse a few things for mFi switch tests to follow.
This commit is contained in:
parent
d867d26612
commit
895ddc8433
2 changed files with 138 additions and 1 deletions
|
@ -122,7 +122,6 @@ omit =
|
|||
homeassistant/components/sensor/eliqonline.py
|
||||
homeassistant/components/sensor/forecast.py
|
||||
homeassistant/components/sensor/glances.py
|
||||
homeassistant/components/sensor/mfi.py
|
||||
homeassistant/components/sensor/netatmo.py
|
||||
homeassistant/components/sensor/onewire.py
|
||||
homeassistant/components/sensor/openweathermap.py
|
||||
|
|
138
tests/components/sensor/test_mfi.py
Normal file
138
tests/components/sensor/test_mfi.py
Normal file
|
@ -0,0 +1,138 @@
|
|||
"""
|
||||
tests.components.sensor.test_mfi
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Tests mFi sensor.
|
||||
"""
|
||||
import unittest
|
||||
import unittest.mock as mock
|
||||
|
||||
import homeassistant.core as ha
|
||||
import homeassistant.components.sensor as sensor
|
||||
import homeassistant.components.sensor.mfi as mfi
|
||||
from homeassistant.const import TEMP_CELCIUS
|
||||
|
||||
|
||||
class TestMfiSensorSetup(unittest.TestCase):
|
||||
PLATFORM = mfi
|
||||
COMPONENT = sensor
|
||||
THING = 'sensor'
|
||||
GOOD_CONFIG = {
|
||||
'sensor': {
|
||||
'platform': 'mfi',
|
||||
'host': 'foo',
|
||||
'port': 6123,
|
||||
'username': 'user',
|
||||
'password': 'pass',
|
||||
}
|
||||
}
|
||||
|
||||
def setup_method(self, method):
|
||||
self.hass = ha.HomeAssistant()
|
||||
self.hass.config.latitude = 32.87336
|
||||
self.hass.config.longitude = 117.22743
|
||||
|
||||
def teardown_method(self, method):
|
||||
""" Stop down stuff we started. """
|
||||
self.hass.stop()
|
||||
|
||||
def test_setup_missing_config(self):
|
||||
config = {
|
||||
'sensor': {
|
||||
'platform': 'mfi',
|
||||
}
|
||||
}
|
||||
self.assertFalse(self.PLATFORM.setup_platform(self.hass, config, None))
|
||||
|
||||
@mock.patch('mficlient.client')
|
||||
def test_setup_failed_login(self, mock_client):
|
||||
mock_client.FailedToLogin = Exception()
|
||||
mock_client.MFiClient.side_effect = mock_client.FailedToLogin
|
||||
self.assertFalse(
|
||||
self.PLATFORM.setup_platform(self.hass,
|
||||
dict(self.GOOD_CONFIG),
|
||||
None))
|
||||
|
||||
@mock.patch('mficlient.client.MFiClient')
|
||||
def test_setup_minimum(self, mock_client):
|
||||
config = dict(self.GOOD_CONFIG)
|
||||
del config[self.THING]['port']
|
||||
assert self.COMPONENT.setup(self.hass, config)
|
||||
mock_client.assert_called_once_with('foo', 'user', 'pass',
|
||||
port=6443)
|
||||
|
||||
@mock.patch('mficlient.client.MFiClient')
|
||||
def test_setup_with_port(self, mock_client):
|
||||
config = dict(self.GOOD_CONFIG)
|
||||
config[self.THING]['port'] = 6123
|
||||
assert self.COMPONENT.setup(self.hass, config)
|
||||
mock_client.assert_called_once_with('foo', 'user', 'pass',
|
||||
port=6123)
|
||||
|
||||
@mock.patch('mficlient.client.MFiClient')
|
||||
@mock.patch('homeassistant.components.sensor.mfi.MfiSensor')
|
||||
def test_setup_adds_proper_devices(self, mock_sensor, mock_client):
|
||||
ports = {i: mock.MagicMock(model=model)
|
||||
for i, model in enumerate(mfi.SENSOR_MODELS)}
|
||||
ports['bad'] = mock.MagicMock(model='notasensor')
|
||||
print(ports['bad'].model)
|
||||
mock_client.return_value.get_devices.return_value = \
|
||||
[mock.MagicMock(ports=ports)]
|
||||
assert sensor.setup(self.hass, self.GOOD_CONFIG)
|
||||
for ident, port in ports.items():
|
||||
if ident != 'bad':
|
||||
mock_sensor.assert_any_call(port, self.hass)
|
||||
assert mock.call(ports['bad'], self.hass) not in mock_sensor.mock_calls
|
||||
|
||||
|
||||
class TestMfiSensor(unittest.TestCase):
|
||||
def setup_method(self, method):
|
||||
self.hass = ha.HomeAssistant()
|
||||
self.hass.config.latitude = 32.87336
|
||||
self.hass.config.longitude = 117.22743
|
||||
self.port = mock.MagicMock()
|
||||
self.sensor = mfi.MfiSensor(self.port, self.hass)
|
||||
|
||||
def teardown_method(self, method):
|
||||
""" Stop down stuff we started. """
|
||||
self.hass.stop()
|
||||
|
||||
def test_name(self):
|
||||
self.assertEqual(self.port.label, self.sensor.name)
|
||||
|
||||
def test_uom_temp(self):
|
||||
self.port.tag = 'temperature'
|
||||
self.assertEqual(TEMP_CELCIUS, self.sensor.unit_of_measurement)
|
||||
|
||||
def test_uom_power(self):
|
||||
self.port.tag = 'active_pwr'
|
||||
self.assertEqual('Watts', self.sensor.unit_of_measurement)
|
||||
|
||||
def test_uom_digital(self):
|
||||
self.port.model = 'Input Digital'
|
||||
self.assertEqual('State', self.sensor.unit_of_measurement)
|
||||
|
||||
def test_uom_unknown(self):
|
||||
self.port.tag = 'balloons'
|
||||
self.assertEqual('balloons', self.sensor.unit_of_measurement)
|
||||
|
||||
def test_state_digital(self):
|
||||
self.port.model = 'Input Digital'
|
||||
self.port.value = 0
|
||||
self.assertEqual(mfi.STATE_OFF, self.sensor.state)
|
||||
self.port.value = 1
|
||||
self.assertEqual(mfi.STATE_ON, self.sensor.state)
|
||||
self.port.value = 2
|
||||
self.assertEqual(mfi.STATE_ON, self.sensor.state)
|
||||
|
||||
def test_state_digits(self):
|
||||
self.port.tag = 'didyoucheckthedict?'
|
||||
self.port.value = 1.25
|
||||
with mock.patch.dict(mfi.DIGITS, {'didyoucheckthedict?': 1}):
|
||||
self.assertEqual(1.2, self.sensor.state)
|
||||
with mock.patch.dict(mfi.DIGITS, {}):
|
||||
self.assertEqual(1.0, self.sensor.state)
|
||||
|
||||
def test_update(self):
|
||||
self.sensor.update()
|
||||
self.port.refresh.assert_called_once_with()
|
Loading…
Add table
Reference in a new issue