mirror of https://github.com/home-assistant/core
90 lines
2.9 KiB
Python
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")
|