core/tests/components/rova/test_init.py

88 lines
2.7 KiB
Python
Raw Normal View History

"""Tests for the Rova integration init."""
from unittest.mock import MagicMock
import pytest
from requests import ConnectTimeout
from syrupy import SnapshotAssertion
from homeassistant.components.rova import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, issue_registry as ir
from tests.common import MockConfigEntry
from tests.components.rova import setup_with_selected_platforms
async def test_reload(
hass: HomeAssistant,
mock_rova: MagicMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test reloading the integration."""
await setup_with_selected_platforms(hass, mock_config_entry, [Platform.SENSOR])
assert mock_config_entry.state is ConfigEntryState.LOADED
assert await hass.config_entries.async_unload(mock_config_entry.entry_id)
await hass.async_block_till_done()
assert mock_config_entry.state is ConfigEntryState.NOT_LOADED
async def test_service(
hass: HomeAssistant,
mock_rova: MagicMock,
mock_config_entry: MockConfigEntry,
device_registry: dr.DeviceRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test the Rova service."""
await setup_with_selected_platforms(hass, mock_config_entry, [Platform.SENSOR])
device_entry = device_registry.async_get_device(
identifiers={(DOMAIN, mock_config_entry.unique_id)}
)
assert device_entry is not None
assert device_entry == snapshot
@pytest.mark.parametrize(
"method",
[
"is_rova_area",
"get_calendar_items",
],
)
async def test_retry_after_failure(
hass: HomeAssistant,
mock_rova: MagicMock,
mock_config_entry: MockConfigEntry,
method: str,
) -> None:
"""Test we retry after a failure."""
getattr(mock_rova, method).side_effect = ConnectTimeout
mock_config_entry.add_to_hass(hass)
assert not await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY
async def test_issue_if_not_rova_area(
hass: HomeAssistant,
mock_rova: MagicMock,
mock_config_entry: MockConfigEntry,
issue_registry: ir.IssueRegistry,
) -> None:
"""Test we create an issue if rova does not collect at the given address."""
mock_rova.is_rova_area.return_value = False
mock_config_entry.add_to_hass(hass)
assert not await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
assert mock_config_entry.state is ConfigEntryState.SETUP_ERROR
assert len(issue_registry.issues) == 1