hass-core/tests/components/hydroquebec/test_sensor.py
Paulus Schoutsen 4de97abc3a Black
2019-07-31 12:25:30 -07:00

102 lines
2.9 KiB
Python

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