core/tests/components/demo/test_stt.py

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"}