mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 01:38:02 +00:00

* Migrate from entry unique id to emoncms unique id * Use a placeholder for the documentation URL * Use async_set_unique_id in config_flow * use _abort_if_unique_id_configured in config_flow * Avoid single-use variable Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Add async_migrate_entry * Remove commented code * Downgrade version if user add server without uuid * Improve code quality * Move code migrating HA to emoncms uuid to init * Fit doc url in less than 88 chars Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Improve code quality * Only update unique_id with async_update_entry Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Make emoncms_client compulsory to get_feed_list * Improve readability with unique id functions * Rmv test to give more sense to _migrate_unique_id --------- Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
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")
|