Files
core/tests/components/nextcloud/test_init.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

96 lines
2.9 KiB
Python
Raw Normal View History

"""Tests for the Nextcloud init."""
from unittest.mock import Mock, patch
from nextcloudmonitor import (
NextcloudMonitorAuthorizationError,
NextcloudMonitorConnectionError,
NextcloudMonitorError,
NextcloudMonitorRequestError,
)
import pytest
from homeassistant.components.nextcloud.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import CONF_URL, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import init_integration, mock_config_entry
from .const import MOCKED_ENTRY_ID, NC_DATA, VALID_CONFIG
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_async_setup_entry(
hass: HomeAssistant,
) -> None:
"""Test a successful setup entry."""
assert await init_integration(hass, VALID_CONFIG, NC_DATA)
async def test_unique_id_migration(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
) -> None:
"""Test migration of unique ids to stable ones."""
object_id = "my_nc_url_local_system_version"
entity_id = f"{Platform.SENSOR}.{object_id}"
entry = mock_config_entry(VALID_CONFIG)
entry.add_to_hass(hass)
entity = entity_registry.async_get_or_create(
Platform.SENSOR,
DOMAIN,
f"{VALID_CONFIG[CONF_URL]}#nextcloud_system_version",
suggested_object_id=object_id,
config_entry=entry,
)
# test old unique id
assert entity.entity_id == entity_id
assert entity.unique_id == f"{VALID_CONFIG[CONF_URL]}#nextcloud_system_version"
with (
patch(
"homeassistant.components.nextcloud.NextcloudMonitor"
) as mock_nextcloud_monitor,
):
mock_nextcloud_monitor.update = Mock(return_value=True)
mock_nextcloud_monitor.return_value.data = NC_DATA
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
# test migrated unique id
reg_entry = entity_registry.async_get(entity_id)
assert reg_entry.unique_id == f"{MOCKED_ENTRY_ID}#system_version"
@pytest.mark.parametrize(
("exception", "expcted_entry_state"),
[
(NextcloudMonitorAuthorizationError, ConfigEntryState.SETUP_ERROR),
(NextcloudMonitorConnectionError, ConfigEntryState.SETUP_RETRY),
(NextcloudMonitorRequestError, ConfigEntryState.SETUP_RETRY),
],
)
async def test_setup_entry_errors(
hass: HomeAssistant,
exception: NextcloudMonitorError,
expcted_entry_state: ConfigEntryState,
) -> None:
"""Test a successful setup entry."""
entry = mock_config_entry(VALID_CONFIG)
entry.add_to_hass(hass)
with (
patch(
"homeassistant.components.nextcloud.NextcloudMonitor", side_effect=exception
),
):
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
assert entry.state == expcted_entry_state