mirror of https://github.com/home-assistant/core
86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
"""Tests for instance ID helper."""
|
|
|
|
from json import JSONDecodeError
|
|
from typing import Any
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import instance_id
|
|
|
|
|
|
async def test_get_id_empty(hass: HomeAssistant, hass_storage: dict[str, Any]) -> None:
|
|
"""Get unique ID."""
|
|
uuid = await instance_id.async_get(hass)
|
|
assert uuid is not None
|
|
# Assert it's stored
|
|
assert hass_storage["core.uuid"]["data"]["uuid"] == uuid
|
|
|
|
|
|
async def test_get_id_load_fail(
|
|
hass: HomeAssistant, hass_storage: dict[str, Any], caplog: pytest.LogCaptureFixture
|
|
) -> None:
|
|
"""Migrate existing file with error."""
|
|
hass_storage["core.uuid"] = None # Invalid, will make store.async_load raise
|
|
|
|
uuid = await instance_id.async_get(hass)
|
|
|
|
assert uuid is not None
|
|
|
|
# Assert it's stored
|
|
assert hass_storage["core.uuid"]["data"]["uuid"] == uuid
|
|
|
|
assert (
|
|
"Could not read hass instance ID from 'core.uuid' or '.uuid', a "
|
|
"new instance ID will be generated" in caplog.text
|
|
)
|
|
|
|
|
|
async def test_get_id_migrate(
|
|
hass: HomeAssistant, hass_storage: dict[str, Any]
|
|
) -> None:
|
|
"""Migrate existing file."""
|
|
with (
|
|
patch("homeassistant.util.json.load_json", return_value={"uuid": "1234"}),
|
|
patch("os.path.isfile", return_value=True),
|
|
patch("os.remove") as mock_remove,
|
|
):
|
|
uuid = await instance_id.async_get(hass)
|
|
|
|
assert uuid == "1234"
|
|
|
|
# Assert it's stored
|
|
assert hass_storage["core.uuid"]["data"]["uuid"] == uuid
|
|
|
|
# assert old deleted
|
|
assert len(mock_remove.mock_calls) == 1
|
|
|
|
|
|
async def test_get_id_migrate_fail(
|
|
hass: HomeAssistant, hass_storage: dict[str, Any], caplog: pytest.LogCaptureFixture
|
|
) -> None:
|
|
"""Migrate existing file with error."""
|
|
with (
|
|
patch(
|
|
"homeassistant.util.json.load_json",
|
|
side_effect=JSONDecodeError("test_error", "test", 1),
|
|
),
|
|
patch("os.path.isfile", return_value=True),
|
|
patch("os.remove") as mock_remove,
|
|
):
|
|
uuid = await instance_id.async_get(hass)
|
|
|
|
assert uuid is not None
|
|
|
|
# Assert it's stored
|
|
assert hass_storage["core.uuid"]["data"]["uuid"] == uuid
|
|
|
|
# assert old not deleted
|
|
assert len(mock_remove.mock_calls) == 0
|
|
|
|
assert (
|
|
"Could not read hass instance ID from 'core.uuid' or '.uuid', a "
|
|
"new instance ID will be generated" in caplog.text
|
|
)
|