mirror of https://github.com/home-assistant/core
119 lines
3.6 KiB
Python
119 lines
3.6 KiB
Python
"""The tests for the demo stt component."""
|
|
|
|
from http import HTTPStatus
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.demo import DOMAIN as DEMO_DOMAIN
|
|
from homeassistant.const import Platform
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from tests.common import MockConfigEntry
|
|
from tests.typing import ClientSessionGenerator
|
|
|
|
|
|
@pytest.fixture
|
|
async def stt_only(hass: HomeAssistant) -> None:
|
|
"""Enable only the stt platform."""
|
|
with patch(
|
|
"homeassistant.components.demo.COMPONENTS_WITH_CONFIG_ENTRY_DEMO_PLATFORM",
|
|
[Platform.STT],
|
|
):
|
|
yield
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
async def setup_config_entry(hass: HomeAssistant, stt_only) -> None:
|
|
"""Set up demo component from config entry."""
|
|
config_entry = MockConfigEntry(domain=DEMO_DOMAIN)
|
|
config_entry.add_to_hass(hass)
|
|
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
|
|
async def test_demo_settings(hass_client: ClientSessionGenerator) -> None:
|
|
"""Test retrieve settings from demo provider."""
|
|
client = await hass_client()
|
|
|
|
response = await client.get("/api/stt/stt.demo_stt")
|
|
response_data = await response.json()
|
|
|
|
assert response.status == HTTPStatus.OK
|
|
assert response_data == {
|
|
"languages": ["en", "de"],
|
|
"bit_rates": [16],
|
|
"sample_rates": [16000, 44100],
|
|
"formats": ["wav"],
|
|
"codecs": ["pcm"],
|
|
"channels": [2],
|
|
}
|
|
|
|
|
|
async def test_demo_speech_no_metadata(hass_client: ClientSessionGenerator) -> None:
|
|
"""Test retrieve settings from demo provider."""
|
|
client = await hass_client()
|
|
|
|
response = await client.post("/api/stt/stt.demo_stt", data=b"Test")
|
|
assert response.status == HTTPStatus.BAD_REQUEST
|
|
|
|
|
|
async def test_demo_speech_wrong_metadata(hass_client: ClientSessionGenerator) -> None:
|
|
"""Test retrieve settings from demo provider."""
|
|
client = await hass_client()
|
|
|
|
response = await client.post(
|
|
"/api/stt/stt.demo_stt",
|
|
headers={
|
|
"X-Speech-Content": (
|
|
"format=wav; codec=pcm; sample_rate=8000; bit_rate=16; channel=1;"
|
|
" language=de"
|
|
)
|
|
},
|
|
data=b"Test",
|
|
)
|
|
assert response.status == HTTPStatus.UNSUPPORTED_MEDIA_TYPE
|
|
|
|
|
|
async def test_demo_speech(hass_client: ClientSessionGenerator) -> None:
|
|
"""Test retrieve settings from demo provider."""
|
|
client = await hass_client()
|
|
|
|
response = await client.post(
|
|
"/api/stt/stt.demo_stt",
|
|
headers={
|
|
"X-Speech-Content": (
|
|
"format=wav; codec=pcm; sample_rate=16000; bit_rate=16; channel=2;"
|
|
" language=de"
|
|
)
|
|
},
|
|
data=b"Test",
|
|
)
|
|
response_data = await response.json()
|
|
|
|
assert response.status == HTTPStatus.OK
|
|
assert response_data == {"text": "Turn the Kitchen Lights on", "result": "success"}
|
|
|
|
|
|
@pytest.mark.usefixtures("setup_config_entry")
|
|
async def test_config_entry_demo_speech(
|
|
hass_client: ClientSessionGenerator, hass: HomeAssistant
|
|
) -> None:
|
|
"""Test retrieve settings from demo provider from config entry."""
|
|
client = await hass_client()
|
|
|
|
response = await client.post(
|
|
"/api/stt/stt.demo_stt",
|
|
headers={
|
|
"X-Speech-Content": (
|
|
"format=wav; codec=pcm; sample_rate=16000; bit_rate=16; channel=2;"
|
|
" language=de"
|
|
)
|
|
},
|
|
data=b"Test",
|
|
)
|
|
response_data = await response.json()
|
|
|
|
assert response.status == HTTPStatus.OK
|
|
assert response_data == {"text": "Turn the Kitchen Lights on", "result": "success"}
|