"""Tests for cloud tts.""" from unittest.mock import Mock from hass_nabucasa import voice import pytest import voluptuous as vol from homeassistant.components.cloud import const, tts @pytest.fixture() def cloud_with_prefs(cloud_prefs): """Return a cloud mock with prefs.""" return Mock(client=Mock(prefs=cloud_prefs)) def test_default_exists(): """Test our default language exists.""" assert const.DEFAULT_TTS_DEFAULT_VOICE in voice.MAP_VOICE def test_schema(): """Test schema.""" assert "nl-NL" in tts.SUPPORT_LANGUAGES processed = tts.PLATFORM_SCHEMA({"platform": "cloud", "language": "nl-NL"}) assert processed["gender"] == "female" with pytest.raises(vol.Invalid): tts.PLATFORM_SCHEMA( {"platform": "cloud", "language": "non-existing", "gender": "female"} ) with pytest.raises(vol.Invalid): tts.PLATFORM_SCHEMA( {"platform": "cloud", "language": "nl-NL", "gender": "not-supported"} ) # Should not raise tts.PLATFORM_SCHEMA({"platform": "cloud", "language": "nl-NL", "gender": "female"}) tts.PLATFORM_SCHEMA({"platform": "cloud"}) async def test_prefs_default_voice(hass, cloud_with_prefs, cloud_prefs): """Test cloud provider uses the preferences.""" assert cloud_prefs.tts_default_voice == ("en-US", "female") provider_pref = await tts.async_get_engine( Mock(data={const.DOMAIN: cloud_with_prefs}), None, {} ) provider_conf = await tts.async_get_engine( Mock(data={const.DOMAIN: cloud_with_prefs}), {"language": "fr-FR", "gender": "female"}, None, ) assert provider_pref.default_language == "en-US" assert provider_pref.default_options == {"gender": "female"} assert provider_conf.default_language == "fr-FR" assert provider_conf.default_options == {"gender": "female"} await cloud_prefs.async_update(tts_default_voice=("nl-NL", "male")) await hass.async_block_till_done() assert provider_pref.default_language == "nl-NL" assert provider_pref.default_options == {"gender": "male"} assert provider_conf.default_language == "fr-FR" assert provider_conf.default_options == {"gender": "female"} async def test_provider_properties(cloud_with_prefs): """Test cloud provider.""" provider = await tts.async_get_engine( Mock(data={const.DOMAIN: cloud_with_prefs}), None, {} ) assert provider.supported_options == ["gender"] assert "nl-NL" in provider.supported_languages async def test_get_tts_audio(cloud_with_prefs): """Test cloud provider.""" provider = await tts.async_get_engine( Mock(data={const.DOMAIN: cloud_with_prefs}), None, {} ) assert provider.supported_options == ["gender"] assert "nl-NL" in provider.supported_languages