"""The tests for Efergy sensor platform.""" import unittest import requests_mock from homeassistant.setup import setup_component from tests.common import load_fixture, get_test_home_assistant token = '9p6QGJ7dpZfO3fqPTBk1fyEmjV1cGoLT' multi_sensor_token = '9r6QGF7dpZfO3fqPTBl1fyRmjV1cGoLT' ONE_SENSOR_CONFIG = { 'platform': 'efergy', 'app_token': token, 'utc_offset': '300', 'monitored_variables': [{'type': 'amount', 'period': 'day'}, {'type': 'instant_readings'}, {'type': 'budget'}, {'type': 'cost', 'period': 'day', 'currency': '$'}, {'type': 'current_values'} ] } MULTI_SENSOR_CONFIG = { 'platform': 'efergy', 'app_token': multi_sensor_token, 'utc_offset': '300', 'monitored_variables': [ {'type': 'current_values'} ] } def mock_responses(mock): """Mock responses for Efergy.""" base_url = 'https://engage.efergy.com/mobile_proxy/' mock.get( base_url + 'getInstant?token=' + token, text=load_fixture('efergy_instant.json')) mock.get( base_url + 'getEnergy?token=' + token + '&offset=300&period=day', text=load_fixture('efergy_energy.json')) mock.get( base_url + 'getBudget?token=' + token, text=load_fixture('efergy_budget.json')) mock.get( base_url + 'getCost?token=' + token + '&offset=300&period=day', text=load_fixture('efergy_cost.json')) mock.get( base_url + 'getCurrentValuesSummary?token=' + token, text=load_fixture('efergy_current_values_single.json')) mock.get( base_url + 'getCurrentValuesSummary?token=' + multi_sensor_token, text=load_fixture('efergy_current_values_multi.json')) class TestEfergySensor(unittest.TestCase): """Tests the Efergy Sensor platform.""" DEVICES = [] @requests_mock.Mocker() def add_devices(self, devices, mock): """Mock add devices.""" mock_responses(mock) for device in devices: device.update() self.DEVICES.append(device) def setUp(self): """Initialize values for this testcase class.""" self.hass = get_test_home_assistant() self.config = ONE_SENSOR_CONFIG def tearDown(self): # pylint: disable=invalid-name """Stop everything that was started.""" self.hass.stop() @requests_mock.Mocker() def test_single_sensor_readings(self, mock): """Test for successfully setting up the Efergy platform.""" mock_responses(mock) assert setup_component(self.hass, 'sensor', { 'sensor': ONE_SENSOR_CONFIG}) self.assertEqual('38.21', self.hass.states.get('sensor.energy_consumed').state) self.assertEqual('1580', self.hass.states.get('sensor.energy_usage').state) self.assertEqual('ok', self.hass.states.get('sensor.energy_budget').state) self.assertEqual('5.27', self.hass.states.get('sensor.energy_cost').state) self.assertEqual('1628', self.hass.states.get('sensor.efergy_728386').state) @requests_mock.Mocker() def test_multi_sensor_readings(self, mock): """Test for multiple sensors in one household.""" mock_responses(mock) assert setup_component(self.hass, 'sensor', { 'sensor': MULTI_SENSOR_CONFIG}) self.assertEqual('218', self.hass.states.get('sensor.efergy_728386').state) self.assertEqual('1808', self.hass.states.get('sensor.efergy_0').state) self.assertEqual('312', self.hass.states.get('sensor.efergy_728387').state)