mirror of https://github.com/home-assistant/core
123 lines
3.6 KiB
Python
123 lines
3.6 KiB
Python
"""Common constants and functions for UptimeRobot tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
from typing import Any
|
|
from unittest.mock import patch
|
|
|
|
from pyuptimerobot import (
|
|
APIStatus,
|
|
UptimeRobotAccount,
|
|
UptimeRobotApiError,
|
|
UptimeRobotApiResponse,
|
|
UptimeRobotMonitor,
|
|
)
|
|
|
|
from homeassistant import config_entries
|
|
from homeassistant.components.uptimerobot.const import DOMAIN
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
from homeassistant.const import STATE_ON
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
MOCK_UPTIMEROBOT_API_KEY = "u0242ac120003"
|
|
MOCK_UPTIMEROBOT_API_KEY_READ_ONLY = "ur0242ac120003"
|
|
MOCK_UPTIMEROBOT_EMAIL = "test@test.test"
|
|
MOCK_UPTIMEROBOT_UNIQUE_ID = "1234567890"
|
|
|
|
MOCK_UPTIMEROBOT_ACCOUNT = {
|
|
"email": MOCK_UPTIMEROBOT_EMAIL,
|
|
"user_id": 1234567890,
|
|
"up_monitors": 1,
|
|
}
|
|
MOCK_UPTIMEROBOT_ERROR = {"message": "test error from API."}
|
|
MOCK_UPTIMEROBOT_MONITOR = {
|
|
"id": 1234,
|
|
"friendly_name": "Test monitor",
|
|
"status": 2,
|
|
"type": 1,
|
|
"url": "http://example.com",
|
|
}
|
|
MOCK_UPTIMEROBOT_MONITOR_PAUSED = {
|
|
"id": 1234,
|
|
"friendly_name": "Test monitor",
|
|
"status": 0,
|
|
"type": 1,
|
|
"url": "http://example.com",
|
|
}
|
|
|
|
|
|
MOCK_UPTIMEROBOT_CONFIG_ENTRY_DATA = {
|
|
"domain": DOMAIN,
|
|
"title": MOCK_UPTIMEROBOT_EMAIL,
|
|
"data": {"platform": DOMAIN, "api_key": MOCK_UPTIMEROBOT_API_KEY},
|
|
"unique_id": MOCK_UPTIMEROBOT_UNIQUE_ID,
|
|
"source": config_entries.SOURCE_USER,
|
|
}
|
|
MOCK_UPTIMEROBOT_CONFIG_ENTRY_DATA_KEY_READ_ONLY = {
|
|
"domain": DOMAIN,
|
|
"title": MOCK_UPTIMEROBOT_EMAIL,
|
|
"data": {"platform": DOMAIN, "api_key": MOCK_UPTIMEROBOT_API_KEY_READ_ONLY},
|
|
"unique_id": MOCK_UPTIMEROBOT_UNIQUE_ID,
|
|
"source": config_entries.SOURCE_USER,
|
|
}
|
|
|
|
STATE_UP = "up"
|
|
|
|
UPTIMEROBOT_BINARY_SENSOR_TEST_ENTITY = "binary_sensor.test_monitor"
|
|
UPTIMEROBOT_SENSOR_TEST_ENTITY = "sensor.test_monitor"
|
|
UPTIMEROBOT_SWITCH_TEST_ENTITY = "switch.test_monitor"
|
|
|
|
|
|
class MockApiResponseKey(str, Enum):
|
|
"""Mock API response key."""
|
|
|
|
ACCOUNT = "account"
|
|
ERROR = "error"
|
|
MONITORS = "monitors"
|
|
|
|
|
|
def mock_uptimerobot_api_response(
|
|
data: dict[str, Any]
|
|
| list[UptimeRobotMonitor]
|
|
| UptimeRobotAccount
|
|
| UptimeRobotApiError
|
|
| None = None,
|
|
status: APIStatus = APIStatus.OK,
|
|
key: MockApiResponseKey = MockApiResponseKey.MONITORS,
|
|
) -> UptimeRobotApiResponse:
|
|
"""Mock API response for UptimeRobot."""
|
|
return UptimeRobotApiResponse.from_dict(
|
|
{
|
|
"stat": {"error": APIStatus.FAIL}.get(key, status),
|
|
key: data
|
|
if data is not None
|
|
else {
|
|
"account": MOCK_UPTIMEROBOT_ACCOUNT,
|
|
"error": MOCK_UPTIMEROBOT_ERROR,
|
|
"monitors": [MOCK_UPTIMEROBOT_MONITOR],
|
|
}.get(key, {}),
|
|
}
|
|
)
|
|
|
|
|
|
async def setup_uptimerobot_integration(hass: HomeAssistant) -> MockConfigEntry:
|
|
"""Set up the UptimeRobot integration."""
|
|
mock_entry = MockConfigEntry(**MOCK_UPTIMEROBOT_CONFIG_ENTRY_DATA)
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
with patch(
|
|
"pyuptimerobot.UptimeRobot.async_get_monitors",
|
|
return_value=mock_uptimerobot_api_response(data=[MOCK_UPTIMEROBOT_MONITOR]),
|
|
):
|
|
assert await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert hass.states.get(UPTIMEROBOT_BINARY_SENSOR_TEST_ENTITY).state == STATE_ON
|
|
assert hass.states.get(UPTIMEROBOT_SENSOR_TEST_ENTITY).state == STATE_UP
|
|
assert mock_entry.state is ConfigEntryState.LOADED
|
|
|
|
return mock_entry
|