core/tests/components/lovelace/test_init.py

99 lines
2.9 KiB
Python

"""Test the Lovelace initialization."""
from typing import Any
from unittest.mock import MagicMock, patch
import pytest
from typing_extensions import Generator
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from tests.typing import WebSocketGenerator
@pytest.fixture
def mock_onboarding_not_done() -> Generator[MagicMock]:
"""Mock that Home Assistant is currently onboarding."""
with patch(
"homeassistant.components.onboarding.async_is_onboarded",
return_value=False,
) as mock_onboarding:
yield mock_onboarding
@pytest.fixture
def mock_onboarding_done() -> Generator[MagicMock]:
"""Mock that Home Assistant is currently onboarding."""
with patch(
"homeassistant.components.onboarding.async_is_onboarded",
return_value=True,
) as mock_onboarding:
yield mock_onboarding
@pytest.fixture
def mock_add_onboarding_listener() -> Generator[MagicMock]:
"""Mock that Home Assistant is currently onboarding."""
with patch(
"homeassistant.components.onboarding.async_add_listener",
) as mock_add_onboarding_listener:
yield mock_add_onboarding_listener
async def test_create_dashboards_when_onboarded(
hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
hass_storage: dict[str, Any],
mock_onboarding_done,
) -> None:
"""Test we don't create dashboards when onboarded."""
client = await hass_ws_client(hass)
assert await async_setup_component(hass, "lovelace", {})
# List dashboards
await client.send_json_auto_id({"type": "lovelace/dashboards/list"})
response = await client.receive_json()
assert response["success"]
assert response["result"] == []
async def test_create_dashboards_when_not_onboarded(
hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
hass_storage: dict[str, Any],
mock_add_onboarding_listener,
mock_onboarding_not_done,
) -> None:
"""Test we automatically create dashboards when not onboarded."""
client = await hass_ws_client(hass)
assert await async_setup_component(hass, "lovelace", {})
# Call onboarding listener
mock_add_onboarding_listener.mock_calls[0][1][1]()
await hass.async_block_till_done()
# List dashboards
await client.send_json_auto_id({"type": "lovelace/dashboards/list"})
response = await client.receive_json()
assert response["success"]
assert response["result"] == [
{
"icon": "mdi:map",
"id": "map",
"mode": "storage",
"require_admin": False,
"show_in_sidebar": True,
"title": "Map",
"url_path": "map",
}
]
# List map dashboard config
await client.send_json_auto_id({"type": "lovelace/config", "url_path": "map"})
response = await client.receive_json()
assert response["success"]
assert response["result"] == {"strategy": {"type": "map"}}