"""The test for the fido sensor platform.""" import asyncio import logging import sys from unittest.mock import MagicMock from homeassistant.bootstrap import async_setup_component from homeassistant.components.sensor import fido from tests.common import assert_setup_component CONTRACT = "123456789" class FidoClientMock(): """Fake Fido client.""" def __init__(self, username, password, timeout=None, httpsession=None): """Fake Fido client init.""" pass def get_phone_numbers(self): """Return Phone numbers.""" return ["1112223344"] def get_data(self): """Return fake fido data.""" return {"balance": 160.12, "1112223344": {"data_remaining": 100.33}} @asyncio.coroutine def fetch_data(self): """Return fake fetching data.""" pass class FidoClientMockError(FidoClientMock): """Fake Fido client error.""" @asyncio.coroutine def fetch_data(self): """Return fake fetching data.""" raise PyFidoErrorMock("Fake Error") class PyFidoErrorMock(Exception): """Fake PyFido Error.""" class PyFidoClientFakeModule(): """Fake pyfido.client module.""" PyFidoError = PyFidoErrorMock class PyFidoFakeModule(): """Fake pyfido module.""" FidoClient = FidoClientMockError def fake_async_add_devices(component, update_before_add=False): """Fake async_add_devices function.""" pass @asyncio.coroutine def test_fido_sensor(loop, hass): """Test the Fido number sensor.""" sys.modules['pyfido'] = MagicMock() sys.modules['pyfido.client'] = MagicMock() sys.modules['pyfido.client.PyFidoError'] = \ PyFidoErrorMock import pyfido.client pyfido.FidoClient = FidoClientMock pyfido.client.PyFidoError = PyFidoErrorMock config = { 'sensor': { 'platform': 'fido', 'name': 'fido', 'username': 'myusername', 'password': 'password', 'monitored_variables': [ 'balance', 'data_remaining', ], } } with assert_setup_component(1): yield from async_setup_component(hass, 'sensor', config) state = hass.states.get('sensor.fido_1112223344_balance') assert state.state == "160.12" assert state.attributes.get('number') == "1112223344" state = hass.states.get('sensor.fido_1112223344_data_remaining') assert state.state == "100.33" @asyncio.coroutine def test_error(hass, caplog): """Test the Fido sensor errors.""" caplog.set_level(logging.ERROR) sys.modules['pyfido'] = PyFidoFakeModule() sys.modules['pyfido.client'] = PyFidoClientFakeModule() config = {} fake_async_add_devices = MagicMock() yield from fido.async_setup_platform(hass, config, fake_async_add_devices) assert fake_async_add_devices.called is False