""" 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()