mirror of https://github.com/home-assistant/core
81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
"""The test for the fido sensor platform."""
|
|
|
|
import logging
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from pyfido.client import PyFidoError
|
|
import pytest
|
|
|
|
from homeassistant.components.fido import sensor as fido
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from tests.common import assert_setup_component
|
|
|
|
CONTRACT = "123456789"
|
|
|
|
|
|
class FidoClientMock:
|
|
"""Fake Fido client."""
|
|
|
|
def __init__(self, username, password, timeout=None, httpsession=None) -> None:
|
|
"""Fake Fido client init."""
|
|
|
|
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}}
|
|
|
|
async def fetch_data(self):
|
|
"""Return fake fetching data."""
|
|
|
|
|
|
class FidoClientMockError(FidoClientMock):
|
|
"""Fake Fido client error."""
|
|
|
|
async def fetch_data(self):
|
|
"""Return fake fetching data."""
|
|
raise PyFidoError("Fake Error")
|
|
|
|
|
|
async def test_fido_sensor(hass: HomeAssistant) -> None:
|
|
"""Test the Fido number sensor."""
|
|
with patch("homeassistant.components.fido.sensor.FidoClient", new=FidoClientMock):
|
|
config = {
|
|
"sensor": {
|
|
"platform": "fido",
|
|
"name": "fido",
|
|
"username": "myusername",
|
|
"password": "password",
|
|
"monitored_variables": ["balance", "data_remaining"],
|
|
}
|
|
}
|
|
with assert_setup_component(1):
|
|
await async_setup_component(hass, "sensor", config)
|
|
await hass.async_block_till_done()
|
|
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"
|
|
|
|
|
|
async def test_error(hass: HomeAssistant, caplog: pytest.LogCaptureFixture) -> None:
|
|
"""Test the Fido sensor errors."""
|
|
caplog.set_level(logging.ERROR)
|
|
|
|
config = {
|
|
"platform": "fido",
|
|
"name": "fido",
|
|
"username": "myusername",
|
|
"password": "password",
|
|
"monitored_variables": ["balance", "data_remaining"],
|
|
}
|
|
fake_async_add_entities = MagicMock()
|
|
with patch("homeassistant.components.fido.sensor.FidoClient", FidoClientMockError):
|
|
await fido.async_setup_platform(hass, config, fake_async_add_entities)
|
|
assert fake_async_add_entities.called is False
|