2023-04-06 16:55:16 +00:00
|
|
|
"""Websocket tests for Voice Assistant integration."""
|
|
|
|
from typing import Any
|
|
|
|
|
2023-04-13 21:25:38 +00:00
|
|
|
from homeassistant.components.assist_pipeline.const import DOMAIN
|
|
|
|
from homeassistant.components.assist_pipeline.pipeline import (
|
2023-04-06 16:55:16 +00:00
|
|
|
STORAGE_KEY,
|
|
|
|
STORAGE_VERSION,
|
2023-04-17 15:48:02 +00:00
|
|
|
PipelineData,
|
2023-04-06 16:55:16 +00:00
|
|
|
PipelineStorageCollection,
|
|
|
|
)
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from homeassistant.helpers.storage import Store
|
|
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
|
|
|
|
from tests.common import flush_store
|
|
|
|
|
|
|
|
|
|
|
|
async def test_load_datasets(hass: HomeAssistant, init_components) -> None:
|
|
|
|
"""Make sure that we can load/save data correctly."""
|
|
|
|
|
|
|
|
pipelines = [
|
|
|
|
{
|
|
|
|
"conversation_engine": "conversation_engine_1",
|
|
|
|
"language": "language_1",
|
|
|
|
"name": "name_1",
|
|
|
|
"stt_engine": "stt_engine_1",
|
|
|
|
"tts_engine": "tts_engine_1",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"conversation_engine": "conversation_engine_2",
|
|
|
|
"language": "language_2",
|
|
|
|
"name": "name_2",
|
|
|
|
"stt_engine": "stt_engine_2",
|
|
|
|
"tts_engine": "tts_engine_2",
|
|
|
|
},
|
|
|
|
{
|
2023-04-17 18:54:04 +00:00
|
|
|
"conversation_engine": None,
|
2023-04-06 16:55:16 +00:00
|
|
|
"language": "language_3",
|
|
|
|
"name": "name_3",
|
2023-04-17 18:54:04 +00:00
|
|
|
"stt_engine": None,
|
|
|
|
"tts_engine": None,
|
2023-04-06 16:55:16 +00:00
|
|
|
},
|
|
|
|
]
|
|
|
|
pipeline_ids = []
|
|
|
|
|
2023-04-17 15:48:02 +00:00
|
|
|
pipeline_data: PipelineData = hass.data[DOMAIN]
|
|
|
|
store1 = pipeline_data.pipeline_store
|
2023-04-06 16:55:16 +00:00
|
|
|
for pipeline in pipelines:
|
|
|
|
pipeline_ids.append((await store1.async_create_item(pipeline)).id)
|
|
|
|
assert len(store1.data) == 3
|
2023-04-15 14:05:46 +00:00
|
|
|
assert store1.async_get_preferred_item() == list(store1.data)[0]
|
2023-04-06 16:55:16 +00:00
|
|
|
|
|
|
|
await store1.async_delete_item(pipeline_ids[1])
|
|
|
|
assert len(store1.data) == 2
|
|
|
|
|
|
|
|
store2 = PipelineStorageCollection(Store(hass, STORAGE_VERSION, STORAGE_KEY))
|
|
|
|
await flush_store(store1.store)
|
|
|
|
await store2.async_load()
|
|
|
|
|
|
|
|
assert len(store2.data) == 2
|
|
|
|
|
|
|
|
assert store1.data is not store2.data
|
|
|
|
assert store1.data == store2.data
|
2023-04-15 14:05:46 +00:00
|
|
|
assert store1.async_get_preferred_item() == store2.async_get_preferred_item()
|
2023-04-06 16:55:16 +00:00
|
|
|
|
|
|
|
|
|
|
|
async def test_loading_datasets_from_storage(
|
|
|
|
hass: HomeAssistant, hass_storage: dict[str, Any]
|
|
|
|
) -> None:
|
|
|
|
"""Test loading stored datasets on start."""
|
|
|
|
hass_storage[STORAGE_KEY] = {
|
|
|
|
"version": 1,
|
|
|
|
"minor_version": 1,
|
2023-04-13 21:25:38 +00:00
|
|
|
"key": "assist_pipeline.pipelines",
|
2023-04-06 16:55:16 +00:00
|
|
|
"data": {
|
|
|
|
"items": [
|
|
|
|
{
|
|
|
|
"conversation_engine": "conversation_engine_1",
|
|
|
|
"id": "01GX8ZWBAQYWNB1XV3EXEZ75DY",
|
|
|
|
"language": "language_1",
|
|
|
|
"name": "name_1",
|
|
|
|
"stt_engine": "stt_engine_1",
|
|
|
|
"tts_engine": "tts_engine_1",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"conversation_engine": "conversation_engine_2",
|
|
|
|
"id": "01GX8ZWBAQTKFQNK4W7Q4CTRCX",
|
|
|
|
"language": "language_2",
|
|
|
|
"name": "name_2",
|
|
|
|
"stt_engine": "stt_engine_2",
|
|
|
|
"tts_engine": "tts_engine_2",
|
|
|
|
},
|
|
|
|
{
|
2023-04-17 18:54:04 +00:00
|
|
|
"conversation_engine": None,
|
2023-04-06 16:55:16 +00:00
|
|
|
"id": "01GX8ZWBAQSV1HP3WGJPFWEJ8J",
|
|
|
|
"language": "language_3",
|
|
|
|
"name": "name_3",
|
2023-04-17 18:54:04 +00:00
|
|
|
"stt_engine": None,
|
|
|
|
"tts_engine": None,
|
2023-04-06 16:55:16 +00:00
|
|
|
},
|
2023-04-15 14:05:46 +00:00
|
|
|
],
|
|
|
|
"preferred_item": "01GX8ZWBAQYWNB1XV3EXEZ75DY",
|
2023-04-06 16:55:16 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2023-04-13 21:25:38 +00:00
|
|
|
assert await async_setup_component(hass, "assist_pipeline", {})
|
2023-04-06 16:55:16 +00:00
|
|
|
|
2023-04-17 15:48:02 +00:00
|
|
|
pipeline_data: PipelineData = hass.data[DOMAIN]
|
|
|
|
store = pipeline_data.pipeline_store
|
2023-04-06 16:55:16 +00:00
|
|
|
assert len(store.data) == 3
|
2023-04-15 14:05:46 +00:00
|
|
|
assert store.async_get_preferred_item() == "01GX8ZWBAQYWNB1XV3EXEZ75DY"
|