core/tests/components/emoncms/test_init.py

90 lines
2.9 KiB
Python

"""Test Emoncms component setup process."""
from __future__ import annotations
from unittest.mock import AsyncMock
from homeassistant.components.emoncms.const import DOMAIN, FEED_ID, FEED_NAME
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er, issue_registry as ir
from . import setup_integration
from .conftest import EMONCMS_FAILURE, FEEDS
from tests.common import MockConfigEntry
async def test_load_unload_entry(
hass: HomeAssistant,
config_entry: MockConfigEntry,
emoncms_client: AsyncMock,
) -> None:
"""Test load and unload entry."""
await setup_integration(hass, config_entry)
assert config_entry.state is ConfigEntryState.LOADED
await hass.config_entries.async_unload(config_entry.entry_id)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.NOT_LOADED
async def test_failure(
hass: HomeAssistant,
config_entry: MockConfigEntry,
emoncms_client: AsyncMock,
) -> None:
"""Test load failure."""
emoncms_client.async_request.return_value = EMONCMS_FAILURE
config_entry.add_to_hass(hass)
assert not await hass.config_entries.async_setup(config_entry.entry_id)
async def test_migrate_uuid(
hass: HomeAssistant,
config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
emoncms_client: AsyncMock,
) -> None:
"""Test migration from home assistant uuid to emoncms uuid."""
config_entry.add_to_hass(hass)
assert config_entry.unique_id is None
for _, feed in enumerate(FEEDS):
entity_registry.async_get_or_create(
Platform.SENSOR,
DOMAIN,
f"{config_entry.entry_id}-{feed[FEED_ID]}",
config_entry=config_entry,
suggested_object_id=f"{DOMAIN}_{feed[FEED_NAME]}",
)
assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
emoncms_uuid = emoncms_client.async_get_uuid.return_value
assert config_entry.unique_id == emoncms_uuid
entity_entries = er.async_entries_for_config_entry(
entity_registry, config_entry.entry_id
)
for nb, feed in enumerate(FEEDS):
assert entity_entries[nb].unique_id == f"{emoncms_uuid}-{feed[FEED_ID]}"
assert (
entity_entries[nb].previous_unique_id
== f"{config_entry.entry_id}-{feed[FEED_ID]}"
)
async def test_no_uuid(
hass: HomeAssistant,
config_entry: MockConfigEntry,
issue_registry: ir.IssueRegistry,
emoncms_client: AsyncMock,
) -> None:
"""Test an issue is created when the emoncms server does not ship an uuid."""
emoncms_client.async_get_uuid.return_value = None
await setup_integration(hass, config_entry)
assert issue_registry.async_get_issue(domain=DOMAIN, issue_id="migrate database")