Files
core/tests/components/uptimerobot/test_sensor.py

86 lines
2.8 KiB
Python

"""Test UptimeRobot sensor."""
from unittest.mock import patch
from pyuptimerobot import UptimeRobotAuthenticationException
from homeassistant.components.sensor import SensorDeviceClass
from homeassistant.components.uptimerobot.const import COORDINATOR_UPDATE_INTERVAL
from homeassistant.const import STATE_UNAVAILABLE
from homeassistant.core import HomeAssistant
from homeassistant.util import dt as dt_util
from .common import (
MOCK_UPTIMEROBOT_MONITOR,
MOCK_UPTIMEROBOT_MONITOR_2,
STATE_UP,
UPTIMEROBOT_SENSOR_TEST_ENTITY,
mock_uptimerobot_api_response,
setup_uptimerobot_integration,
)
from tests.common import async_fire_time_changed
async def test_presentation(hass: HomeAssistant) -> None:
"""Test the presentation of UptimeRobot sensors."""
await setup_uptimerobot_integration(hass)
assert (entity := hass.states.get(UPTIMEROBOT_SENSOR_TEST_ENTITY)) is not None
assert entity.state == STATE_UP
assert entity.attributes["target"] == MOCK_UPTIMEROBOT_MONITOR["url"]
assert entity.attributes["device_class"] == SensorDeviceClass.ENUM
assert entity.attributes["options"] == [
"down",
"not_checked_yet",
"pause",
"seems_down",
"up",
]
async def test_unavailable_on_update_failure(hass: HomeAssistant) -> None:
"""Test entity unavailable on update failure."""
await setup_uptimerobot_integration(hass)
assert (entity := hass.states.get(UPTIMEROBOT_SENSOR_TEST_ENTITY)) is not None
assert entity.state == STATE_UP
with patch(
"pyuptimerobot.UptimeRobot.async_get_monitors",
side_effect=UptimeRobotAuthenticationException,
):
async_fire_time_changed(hass, dt_util.utcnow() + COORDINATOR_UPDATE_INTERVAL)
await hass.async_block_till_done()
assert (entity := hass.states.get(UPTIMEROBOT_SENSOR_TEST_ENTITY)) is not None
assert entity.state == STATE_UNAVAILABLE
async def test_sensor_dynamic(hass: HomeAssistant) -> None:
"""Test sensor dynamically added."""
await setup_uptimerobot_integration(hass)
assert (entity := hass.states.get(UPTIMEROBOT_SENSOR_TEST_ENTITY))
assert entity.state == STATE_UP
entity_id_2 = "sensor.test_monitor_2"
with patch(
"pyuptimerobot.UptimeRobot.async_get_monitors",
return_value=mock_uptimerobot_api_response(
data=[
MOCK_UPTIMEROBOT_MONITOR,
MOCK_UPTIMEROBOT_MONITOR_2,
]
),
):
async_fire_time_changed(hass, dt_util.utcnow() + COORDINATOR_UPDATE_INTERVAL)
await hass.async_block_till_done()
assert (entity := hass.states.get(UPTIMEROBOT_SENSOR_TEST_ENTITY))
assert entity.state == STATE_UP
assert (entity := hass.states.get(entity_id_2))
assert entity.state == STATE_UP