core/tests/helpers/test_instance_id.py

80 lines
2.3 KiB
Python
Raw Normal View History

"""Tests for instance ID helper."""
from json import JSONDecodeError
2023-02-20 10:42:56 +00:00
from typing import Any
2021-01-01 21:31:56 +00:00
from unittest.mock import patch
import pytest
2023-02-20 10:42:56 +00:00
from homeassistant.core import HomeAssistant
from homeassistant.helpers import instance_id
2023-02-20 10:42:56 +00:00
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
)
2023-02-20 10:42:56 +00:00
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
)