"""The test for the hydroquebec sensor platform.""" import asyncio import logging import sys from unittest.mock import MagicMock from homeassistant.bootstrap import async_setup_component from homeassistant.components.hydroquebec import sensor as hydroquebec from tests.common import assert_setup_component CONTRACT = "123456789" class HydroQuebecClientMock: """Fake Hydroquebec client.""" def __init__(self, username, password, contract=None, httpsession=None): """Fake Hydroquebec client init.""" pass def get_data(self, contract): """Return fake hydroquebec data.""" return {CONTRACT: {"balance": 160.12}} def get_contracts(self): """Return fake hydroquebec contracts.""" return [CONTRACT] @asyncio.coroutine def fetch_data(self): """Return fake fetching data.""" pass class HydroQuebecClientMockError(HydroQuebecClientMock): """Fake Hydroquebec client error.""" def get_contracts(self): """Return fake hydroquebec contracts.""" return [] @asyncio.coroutine def fetch_data(self): """Return fake fetching data.""" raise PyHydroQuebecErrorMock("Fake Error") class PyHydroQuebecErrorMock(BaseException): """Fake PyHydroquebec Error.""" class PyHydroQuebecClientFakeModule: """Fake pyfido.client module.""" PyHydroQuebecError = PyHydroQuebecErrorMock class PyHydroQuebecFakeModule: """Fake pyfido module.""" HydroQuebecClient = HydroQuebecClientMockError @asyncio.coroutine def test_hydroquebec_sensor(loop, hass): """Test the Hydroquebec number sensor.""" sys.modules["pyhydroquebec"] = MagicMock() sys.modules["pyhydroquebec.client"] = MagicMock() sys.modules["pyhydroquebec.client.PyHydroQuebecError"] = PyHydroQuebecErrorMock import pyhydroquebec.client pyhydroquebec.HydroQuebecClient = HydroQuebecClientMock pyhydroquebec.client.PyHydroQuebecError = PyHydroQuebecErrorMock config = { "sensor": { "platform": "hydroquebec", "name": "hydro", "contract": CONTRACT, "username": "myusername", "password": "password", "monitored_variables": ["balance"], } } with assert_setup_component(1): yield from async_setup_component(hass, "sensor", config) state = hass.states.get("sensor.hydro_balance") assert state.state == "160.12" assert state.attributes.get("unit_of_measurement") == "CAD" @asyncio.coroutine def test_error(hass, caplog): """Test the Hydroquebec sensor errors.""" caplog.set_level(logging.ERROR) sys.modules["pyhydroquebec"] = PyHydroQuebecFakeModule() sys.modules["pyhydroquebec.client"] = PyHydroQuebecClientFakeModule() config = {} fake_async_add_entities = MagicMock() yield from hydroquebec.async_setup_platform(hass, config, fake_async_add_entities) assert fake_async_add_entities.called is False