mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
Improve TTS cache dir mocking (#93468)
This commit is contained in:
parent
6057aeee2f
commit
68379dd55a
@ -23,15 +23,16 @@ from tests.common import (
|
|||||||
mock_integration,
|
mock_integration,
|
||||||
mock_platform,
|
mock_platform,
|
||||||
)
|
)
|
||||||
from tests.components.tts.conftest import ( # noqa: F401, pylint: disable=unused-import
|
|
||||||
init_cache_dir_side_effect,
|
|
||||||
mock_get_cache_files,
|
|
||||||
mock_init_cache_dir,
|
|
||||||
)
|
|
||||||
|
|
||||||
_TRANSCRIPT = "test transcript"
|
_TRANSCRIPT = "test transcript"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def mock_tts_cache_dir_autouse(mock_tts_cache_dir):
|
||||||
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
|
return mock_tts_cache_dir
|
||||||
|
|
||||||
|
|
||||||
class BaseProvider:
|
class BaseProvider:
|
||||||
"""Mock STT provider."""
|
"""Mock STT provider."""
|
||||||
|
|
||||||
@ -190,9 +191,6 @@ async def init_supporting_components(
|
|||||||
mock_stt_provider_entity: MockSttProviderEntity,
|
mock_stt_provider_entity: MockSttProviderEntity,
|
||||||
mock_tts_provider: MockTTSProvider,
|
mock_tts_provider: MockTTSProvider,
|
||||||
config_flow_fixture,
|
config_flow_fixture,
|
||||||
init_cache_dir_side_effect, # noqa: F811
|
|
||||||
mock_get_cache_files, # noqa: F811
|
|
||||||
mock_init_cache_dir, # noqa: F811
|
|
||||||
):
|
):
|
||||||
"""Initialize relevant components with empty configs."""
|
"""Initialize relevant components with empty configs."""
|
||||||
|
|
||||||
|
@ -8,12 +8,11 @@ from homeassistant.components.cloud import const, prefs
|
|||||||
|
|
||||||
from . import mock_cloud, mock_cloud_prefs
|
from . import mock_cloud, mock_cloud_prefs
|
||||||
|
|
||||||
# Prevent TTS cache from being created
|
|
||||||
from tests.components.tts.conftest import ( # noqa: F401, pylint: disable=unused-import
|
@pytest.fixture(autouse=True)
|
||||||
init_cache_dir_side_effect,
|
def mock_tts_cache_dir_autouse(mock_tts_cache_dir):
|
||||||
mock_get_cache_files,
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
mock_init_cache_dir,
|
return mock_tts_cache_dir
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
|
@ -4,6 +4,14 @@ from unittest.mock import patch
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from tests.components.tts.conftest import ( # noqa: F401, pylint: disable=unused-import
|
||||||
|
init_tts_cache_dir_side_effect_fixture,
|
||||||
|
mock_tts_cache_dir_fixture,
|
||||||
|
mock_tts_get_cache_files_fixture,
|
||||||
|
mock_tts_init_cache_dir_fixture,
|
||||||
|
tts_mutagen_mock_fixture,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session", autouse=True)
|
@pytest.fixture(scope="session", autouse=True)
|
||||||
def patch_zeroconf_multiple_catcher() -> Generator[None, None, None]:
|
def patch_zeroconf_multiple_catcher() -> Generator[None, None, None]:
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
"""The tests for the Google speech platform."""
|
"""The tests for the Google speech platform."""
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from gtts import gTTSError
|
from gtts import gTTSError
|
||||||
@ -18,7 +16,17 @@ from homeassistant.exceptions import HomeAssistantError
|
|||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import async_mock_service
|
from tests.common import async_mock_service
|
||||||
from tests.components.tts.conftest import mutagen_mock # noqa: F401
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def tts_mutagen_mock_fixture_autouse(tts_mutagen_mock):
|
||||||
|
"""Mock writing tags."""
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def mock_tts_cache_dir_autouse(mock_tts_cache_dir):
|
||||||
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
|
return mock_tts_cache_dir
|
||||||
|
|
||||||
|
|
||||||
async def get_media_source_url(hass, media_content_id):
|
async def get_media_source_url(hass, media_content_id):
|
||||||
@ -30,15 +38,6 @@ async def get_media_source_url(hass, media_content_id):
|
|||||||
return resolved.url
|
return resolved.url
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
|
||||||
def cleanup_cache(hass):
|
|
||||||
"""Clean up TTS cache."""
|
|
||||||
yield
|
|
||||||
default_tts = hass.config.path(tts.DEFAULT_CACHE_DIR)
|
|
||||||
if os.path.isdir(default_tts):
|
|
||||||
shutil.rmtree(default_tts)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def calls(hass):
|
async def calls(hass):
|
||||||
"""Mock media player calls."""
|
"""Mock media player calls."""
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
"""The tests for the MaryTTS speech platform."""
|
"""The tests for the MaryTTS speech platform."""
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@ -27,12 +25,9 @@ async def get_media_source_url(hass, media_content_id):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def cleanup_cache(hass):
|
def mock_tts_cache_dir_autouse(mock_tts_cache_dir):
|
||||||
"""Prevent TTS writing."""
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
yield
|
return mock_tts_cache_dir
|
||||||
default_tts = hass.config.path(tts.DEFAULT_CACHE_DIR)
|
|
||||||
if os.path.isdir(default_tts):
|
|
||||||
shutil.rmtree(default_tts)
|
|
||||||
|
|
||||||
|
|
||||||
async def test_setup_component(hass: HomeAssistant) -> None:
|
async def test_setup_component(hass: HomeAssistant) -> None:
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
"""Tests for Microsoft Text-to-Speech."""
|
"""Tests for Microsoft Text-to-Speech."""
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pycsspeechtts import pycsspeechtts
|
from pycsspeechtts import pycsspeechtts
|
||||||
@ -32,12 +30,9 @@ async def get_media_source_url(hass: HomeAssistant, media_content_id):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def cleanup_cache(hass: HomeAssistant):
|
def mock_tts_cache_dir_autouse(mock_tts_cache_dir):
|
||||||
"""Clean up TTS cache."""
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
yield
|
return mock_tts_cache_dir
|
||||||
default_tts = hass.config.path(tts.DEFAULT_CACHE_DIR)
|
|
||||||
if os.path.isdir(default_tts):
|
|
||||||
shutil.rmtree(default_tts)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -38,8 +38,8 @@ def pytest_runtest_makereport(item, call):
|
|||||||
setattr(item, f"rep_{rep.when}", rep)
|
setattr(item, f"rep_{rep.when}", rep)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(name="mock_tts_get_cache_files")
|
||||||
def mock_get_cache_files():
|
def mock_tts_get_cache_files_fixture():
|
||||||
"""Mock the list TTS cache function."""
|
"""Mock the list TTS cache function."""
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.tts._get_cache_files", return_value={}
|
"homeassistant.components.tts._get_cache_files", return_value={}
|
||||||
@ -47,35 +47,37 @@ def mock_get_cache_files():
|
|||||||
yield mock_cache_files
|
yield mock_cache_files
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(name="mock_tts_init_cache_dir")
|
||||||
def mock_init_cache_dir(
|
def mock_tts_init_cache_dir_fixture(
|
||||||
init_cache_dir_side_effect: Any,
|
init_tts_cache_dir_side_effect: Any,
|
||||||
) -> Generator[MagicMock, None, None]:
|
) -> Generator[MagicMock, None, None]:
|
||||||
"""Mock the TTS cache dir in memory."""
|
"""Mock the TTS cache dir in memory."""
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.tts._init_tts_cache_dir",
|
"homeassistant.components.tts._init_tts_cache_dir",
|
||||||
side_effect=init_cache_dir_side_effect,
|
side_effect=init_tts_cache_dir_side_effect,
|
||||||
) as mock_cache_dir:
|
) as mock_cache_dir:
|
||||||
yield mock_cache_dir
|
yield mock_cache_dir
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture(name="init_tts_cache_dir_side_effect")
|
||||||
def init_cache_dir_side_effect() -> Any:
|
def init_tts_cache_dir_side_effect_fixture() -> Any:
|
||||||
"""Return the cache dir."""
|
"""Return the cache dir."""
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(name="mock_tts_cache_dir")
|
||||||
def empty_cache_dir(tmp_path, mock_init_cache_dir, mock_get_cache_files, request):
|
def mock_tts_cache_dir_fixture(
|
||||||
|
tmp_path, mock_tts_init_cache_dir, mock_tts_get_cache_files, request
|
||||||
|
):
|
||||||
"""Mock the TTS cache dir with empty dir."""
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
mock_init_cache_dir.return_value = str(tmp_path)
|
mock_tts_init_cache_dir.return_value = str(tmp_path)
|
||||||
|
|
||||||
# Restore original get cache files behavior, we're working with a real dir.
|
# Restore original get cache files behavior, we're working with a real dir.
|
||||||
mock_get_cache_files.side_effect = _get_cache_files
|
mock_tts_get_cache_files.side_effect = _get_cache_files
|
||||||
|
|
||||||
yield tmp_path
|
yield tmp_path
|
||||||
|
|
||||||
if request.node.rep_call.passed:
|
if not hasattr(request.node, "rep_call") or request.node.rep_call.passed:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Print contents of dir if failed
|
# Print contents of dir if failed
|
||||||
@ -87,8 +89,14 @@ def empty_cache_dir(tmp_path, mock_init_cache_dir, mock_get_cache_files, request
|
|||||||
pytest.fail("Test failed, see log for details")
|
pytest.fail("Test failed, see log for details")
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True, name="mock_tts_cache_dir")
|
||||||
def mutagen_mock():
|
def mock_tts_cache_dir_fixture_autouse(mock_tts_cache_dir):
|
||||||
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
|
return mock_tts_cache_dir
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="tts_mutagen_mock")
|
||||||
|
def tts_mutagen_mock_fixture():
|
||||||
"""Mock writing tags."""
|
"""Mock writing tags."""
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.tts.SpeechManager.write_tags",
|
"homeassistant.components.tts.SpeechManager.write_tags",
|
||||||
@ -97,6 +105,11 @@ def mutagen_mock():
|
|||||||
yield mock_write_tags
|
yield mock_write_tags
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def tts_mutagen_mock_fixture_autouse(tts_mutagen_mock):
|
||||||
|
"""Mock writing tags."""
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
async def internal_url_mock(hass: HomeAssistant) -> None:
|
async def internal_url_mock(hass: HomeAssistant) -> None:
|
||||||
"""Mock internal URL of the instance."""
|
"""Mock internal URL of the instance."""
|
||||||
|
@ -148,12 +148,12 @@ async def test_setup_component(hass: HomeAssistant, setup: str) -> None:
|
|||||||
assert f"{tts.DOMAIN}.test" in hass.config.components
|
assert f"{tts.DOMAIN}.test" in hass.config.components
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("init_cache_dir_side_effect", [OSError(2, "No access")])
|
@pytest.mark.parametrize("init_tts_cache_dir_side_effect", [OSError(2, "No access")])
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"setup", ["mock_setup", "mock_config_entry_setup"], indirect=True
|
"setup", ["mock_setup", "mock_config_entry_setup"], indirect=True
|
||||||
)
|
)
|
||||||
async def test_setup_component_no_access_cache_folder(
|
async def test_setup_component_no_access_cache_folder(
|
||||||
hass: HomeAssistant, mock_init_cache_dir: MagicMock, setup: str
|
hass: HomeAssistant, mock_tts_init_cache_dir: MagicMock, setup: str
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up a TTS platform with defaults."""
|
"""Set up a TTS platform with defaults."""
|
||||||
assert not hass.services.has_service(tts.DOMAIN, "test_say")
|
assert not hass.services.has_service(tts.DOMAIN, "test_say")
|
||||||
@ -187,7 +187,7 @@ async def test_setup_component_no_access_cache_folder(
|
|||||||
)
|
)
|
||||||
async def test_service(
|
async def test_service(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -212,7 +212,7 @@ async def test_service(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert (
|
assert (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
||||||
).is_file()
|
).is_file()
|
||||||
|
|
||||||
@ -248,7 +248,7 @@ async def test_service(
|
|||||||
)
|
)
|
||||||
async def test_service_default_language(
|
async def test_service_default_language(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -271,7 +271,7 @@ async def test_service_default_language(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert (
|
assert (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ (
|
/ (
|
||||||
f"42f18378fd4393d18c8dd11d03fa9563c1e54491_de-de_-_{expected_url_suffix}.mp3"
|
f"42f18378fd4393d18c8dd11d03fa9563c1e54491_de-de_-_{expected_url_suffix}.mp3"
|
||||||
)
|
)
|
||||||
@ -309,7 +309,7 @@ async def test_service_default_language(
|
|||||||
)
|
)
|
||||||
async def test_service_default_special_language(
|
async def test_service_default_special_language(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -332,7 +332,7 @@ async def test_service_default_special_language(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert (
|
assert (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
||||||
).is_file()
|
).is_file()
|
||||||
|
|
||||||
@ -366,7 +366,7 @@ async def test_service_default_special_language(
|
|||||||
)
|
)
|
||||||
async def test_service_language(
|
async def test_service_language(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -389,7 +389,7 @@ async def test_service_language(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert (
|
assert (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_de-de_-_{expected_url_suffix}.mp3"
|
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_de-de_-_{expected_url_suffix}.mp3"
|
||||||
).is_file()
|
).is_file()
|
||||||
|
|
||||||
@ -423,7 +423,7 @@ async def test_service_language(
|
|||||||
)
|
)
|
||||||
async def test_service_wrong_language(
|
async def test_service_wrong_language(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -441,7 +441,7 @@ async def test_service_wrong_language(
|
|||||||
)
|
)
|
||||||
assert len(calls) == 0
|
assert len(calls) == 0
|
||||||
assert not (
|
assert not (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_lang_-_{expected_url_suffix}.mp3"
|
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_lang_-_{expected_url_suffix}.mp3"
|
||||||
).is_file()
|
).is_file()
|
||||||
|
|
||||||
@ -477,7 +477,7 @@ async def test_service_wrong_language(
|
|||||||
)
|
)
|
||||||
async def test_service_options(
|
async def test_service_options(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -502,7 +502,7 @@ async def test_service_options(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert (
|
assert (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ (
|
/ (
|
||||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
"42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
||||||
f"_de-de_{opt_hash}_{expected_url_suffix}.mp3"
|
f"_de-de_{opt_hash}_{expected_url_suffix}.mp3"
|
||||||
@ -561,7 +561,7 @@ class MockEntityWithDefaults(MockTTSEntity):
|
|||||||
)
|
)
|
||||||
async def test_service_default_options(
|
async def test_service_default_options(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -586,7 +586,7 @@ async def test_service_default_options(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert (
|
assert (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ (
|
/ (
|
||||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
"42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
||||||
f"_de-de_{opt_hash}_{expected_url_suffix}.mp3"
|
f"_de-de_{opt_hash}_{expected_url_suffix}.mp3"
|
||||||
@ -629,7 +629,7 @@ async def test_service_default_options(
|
|||||||
)
|
)
|
||||||
async def test_merge_default_service_options(
|
async def test_merge_default_service_options(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -657,7 +657,7 @@ async def test_merge_default_service_options(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert (
|
assert (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ (
|
/ (
|
||||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
"42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
||||||
f"_de-de_{opt_hash}_{expected_url_suffix}.mp3"
|
f"_de-de_{opt_hash}_{expected_url_suffix}.mp3"
|
||||||
@ -696,7 +696,7 @@ async def test_merge_default_service_options(
|
|||||||
)
|
)
|
||||||
async def test_service_wrong_options(
|
async def test_service_wrong_options(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -717,7 +717,7 @@ async def test_service_wrong_options(
|
|||||||
assert len(calls) == 0
|
assert len(calls) == 0
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert not (
|
assert not (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ (
|
/ (
|
||||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
"42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
||||||
f"_de-de_{opt_hash}_{expected_url_suffix}.mp3"
|
f"_de-de_{opt_hash}_{expected_url_suffix}.mp3"
|
||||||
@ -752,7 +752,7 @@ async def test_service_wrong_options(
|
|||||||
)
|
)
|
||||||
async def test_service_clear_cache(
|
async def test_service_clear_cache(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -772,7 +772,7 @@ async def test_service_clear_cache(
|
|||||||
await get_media_source_url(hass, calls[0].data[ATTR_MEDIA_CONTENT_ID])
|
await get_media_source_url(hass, calls[0].data[ATTR_MEDIA_CONTENT_ID])
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert (
|
assert (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
||||||
).is_file()
|
).is_file()
|
||||||
|
|
||||||
@ -781,7 +781,7 @@ async def test_service_clear_cache(
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert not (
|
assert not (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
||||||
).is_file()
|
).is_file()
|
||||||
|
|
||||||
@ -814,7 +814,7 @@ async def test_service_clear_cache(
|
|||||||
async def test_service_receive_voice(
|
async def test_service_receive_voice(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
hass_client: ClientSessionGenerator,
|
hass_client: ClientSessionGenerator,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -886,7 +886,7 @@ async def test_service_receive_voice(
|
|||||||
async def test_service_receive_voice_german(
|
async def test_service_receive_voice_german(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
hass_client: ClientSessionGenerator,
|
hass_client: ClientSessionGenerator,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -994,7 +994,7 @@ async def test_web_view_wrong_filename(
|
|||||||
)
|
)
|
||||||
async def test_service_without_cache(
|
async def test_service_without_cache(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
setup: str,
|
setup: str,
|
||||||
tts_service: str,
|
tts_service: str,
|
||||||
service_data: dict[str, Any],
|
service_data: dict[str, Any],
|
||||||
@ -1012,7 +1012,7 @@ async def test_service_without_cache(
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(calls) == 1
|
assert len(calls) == 1
|
||||||
assert not (
|
assert not (
|
||||||
empty_cache_dir
|
mock_tts_cache_dir
|
||||||
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
/ f"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_{expected_url_suffix}.mp3"
|
||||||
).is_file()
|
).is_file()
|
||||||
|
|
||||||
@ -1042,7 +1042,7 @@ class MockEntityBoom(MockTTSEntity):
|
|||||||
@pytest.mark.parametrize("mock_provider", [MockProviderBoom(DEFAULT_LANG)])
|
@pytest.mark.parametrize("mock_provider", [MockProviderBoom(DEFAULT_LANG)])
|
||||||
async def test_setup_legacy_cache_dir(
|
async def test_setup_legacy_cache_dir(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
mock_provider: MockProvider,
|
mock_provider: MockProvider,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up a TTS platform with cache and call service without cache."""
|
"""Set up a TTS platform with cache and call service without cache."""
|
||||||
@ -1050,7 +1050,7 @@ async def test_setup_legacy_cache_dir(
|
|||||||
|
|
||||||
tts_data = b""
|
tts_data = b""
|
||||||
cache_file = (
|
cache_file = (
|
||||||
empty_cache_dir / "42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_test.mp3"
|
mock_tts_cache_dir / "42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_test.mp3"
|
||||||
)
|
)
|
||||||
|
|
||||||
with open(cache_file, "wb") as voice_file:
|
with open(cache_file, "wb") as voice_file:
|
||||||
@ -1078,14 +1078,14 @@ async def test_setup_legacy_cache_dir(
|
|||||||
@pytest.mark.parametrize("mock_tts_entity", [MockEntityBoom(DEFAULT_LANG)])
|
@pytest.mark.parametrize("mock_tts_entity", [MockEntityBoom(DEFAULT_LANG)])
|
||||||
async def test_setup_cache_dir(
|
async def test_setup_cache_dir(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
mock_tts_entity: MockTTSEntity,
|
mock_tts_entity: MockTTSEntity,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up a TTS platform with cache and call service without cache."""
|
"""Set up a TTS platform with cache and call service without cache."""
|
||||||
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
|
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
|
||||||
|
|
||||||
tts_data = b""
|
tts_data = b""
|
||||||
cache_file = empty_cache_dir / (
|
cache_file = mock_tts_cache_dir / (
|
||||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_tts.test.mp3"
|
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_tts.test.mp3"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1182,13 +1182,13 @@ async def test_service_get_tts_error(
|
|||||||
async def test_load_cache_legacy_retrieve_without_mem_cache(
|
async def test_load_cache_legacy_retrieve_without_mem_cache(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_provider: MockProvider,
|
mock_provider: MockProvider,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
hass_client: ClientSessionGenerator,
|
hass_client: ClientSessionGenerator,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up component and load cache and get without mem cache."""
|
"""Set up component and load cache and get without mem cache."""
|
||||||
tts_data = b""
|
tts_data = b""
|
||||||
cache_file = (
|
cache_file = (
|
||||||
empty_cache_dir / "42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_test.mp3"
|
mock_tts_cache_dir / "42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_test.mp3"
|
||||||
)
|
)
|
||||||
|
|
||||||
with open(cache_file, "wb") as voice_file:
|
with open(cache_file, "wb") as voice_file:
|
||||||
@ -1208,12 +1208,12 @@ async def test_load_cache_legacy_retrieve_without_mem_cache(
|
|||||||
async def test_load_cache_retrieve_without_mem_cache(
|
async def test_load_cache_retrieve_without_mem_cache(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_tts_entity: MockTTSEntity,
|
mock_tts_entity: MockTTSEntity,
|
||||||
empty_cache_dir,
|
mock_tts_cache_dir,
|
||||||
hass_client: ClientSessionGenerator,
|
hass_client: ClientSessionGenerator,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up component and load cache and get without mem cache."""
|
"""Set up component and load cache and get without mem cache."""
|
||||||
tts_data = b""
|
tts_data = b""
|
||||||
cache_file = empty_cache_dir / (
|
cache_file = mock_tts_cache_dir / (
|
||||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_tts.test.mp3"
|
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_tts.test.mp3"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ async def test_service_base_url_set(hass: HomeAssistant, mock_tts) -> None:
|
|||||||
|
|
||||||
|
|
||||||
async def test_service_without_cache_config(
|
async def test_service_without_cache_config(
|
||||||
hass: HomeAssistant, empty_cache_dir, mock_tts
|
hass: HomeAssistant, mock_tts_cache_dir, mock_tts
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up a TTS platform without cache."""
|
"""Set up a TTS platform without cache."""
|
||||||
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
|
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
|
||||||
@ -191,5 +191,5 @@ async def test_service_without_cache_config(
|
|||||||
assert len(calls) == 1
|
assert len(calls) == 1
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert not (
|
assert not (
|
||||||
empty_cache_dir / "42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_test.mp3"
|
mock_tts_cache_dir / "42f18378fd4393d18c8dd11d03fa9563c1e54491_en-us_-_test.mp3"
|
||||||
).is_file()
|
).is_file()
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
"""The tests for the VoiceRSS speech platform."""
|
"""The tests for the VoiceRSS speech platform."""
|
||||||
import asyncio
|
import asyncio
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@ -17,7 +15,6 @@ from homeassistant.exceptions import HomeAssistantError
|
|||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import assert_setup_component, async_mock_service
|
from tests.common import assert_setup_component, async_mock_service
|
||||||
from tests.components.tts.conftest import mutagen_mock # noqa: F401
|
|
||||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||||
|
|
||||||
URL = "https://api.voicerss.org/"
|
URL = "https://api.voicerss.org/"
|
||||||
@ -30,6 +27,17 @@ FORM_DATA = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def tts_mutagen_mock_fixture_autouse(tts_mutagen_mock):
|
||||||
|
"""Mock writing tags."""
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def mock_tts_cache_dir_autouse(mock_tts_cache_dir):
|
||||||
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
|
return mock_tts_cache_dir
|
||||||
|
|
||||||
|
|
||||||
async def get_media_source_url(hass, media_content_id):
|
async def get_media_source_url(hass, media_content_id):
|
||||||
"""Get the media source url."""
|
"""Get the media source url."""
|
||||||
if media_source.DOMAIN not in hass.config.components:
|
if media_source.DOMAIN not in hass.config.components:
|
||||||
@ -39,15 +47,6 @@ async def get_media_source_url(hass, media_content_id):
|
|||||||
return resolved.url
|
return resolved.url
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
|
||||||
def cleanup_cache(hass):
|
|
||||||
"""Prevent TTS writing."""
|
|
||||||
yield
|
|
||||||
default_tts = hass.config.path(tts.DEFAULT_CACHE_DIR)
|
|
||||||
if os.path.isdir(default_tts):
|
|
||||||
shutil.rmtree(default_tts)
|
|
||||||
|
|
||||||
|
|
||||||
async def test_setup_component(hass: HomeAssistant) -> None:
|
async def test_setup_component(hass: HomeAssistant) -> None:
|
||||||
"""Test setup component."""
|
"""Test setup component."""
|
||||||
config = {tts.DOMAIN: {"platform": "voicerss", "api_key": "1234567xx"}}
|
config = {tts.DOMAIN: {"platform": "voicerss", "api_key": "1234567xx"}}
|
||||||
|
@ -15,11 +15,11 @@ from homeassistant.helpers.entity_component import DATA_INSTANCES
|
|||||||
|
|
||||||
from . import MockAsyncTcpClient
|
from . import MockAsyncTcpClient
|
||||||
|
|
||||||
from tests.components.tts.conftest import ( # noqa: F401, pylint: disable=unused-import
|
|
||||||
init_cache_dir_side_effect,
|
@pytest.fixture(autouse=True)
|
||||||
mock_get_cache_files,
|
def mock_tts_cache_dir_autouse(mock_tts_cache_dir):
|
||||||
mock_init_cache_dir,
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
)
|
return mock_tts_cache_dir
|
||||||
|
|
||||||
|
|
||||||
async def test_support(hass: HomeAssistant, init_wyoming_tts) -> None:
|
async def test_support(hass: HomeAssistant, init_wyoming_tts) -> None:
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
"""The tests for the Yandex SpeechKit speech platform."""
|
"""The tests for the Yandex SpeechKit speech platform."""
|
||||||
import asyncio
|
import asyncio
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@ -16,14 +14,22 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import assert_setup_component, async_mock_service
|
from tests.common import assert_setup_component, async_mock_service
|
||||||
from tests.components.tts.conftest import ( # noqa: F401, pylint: disable=unused-import
|
|
||||||
mutagen_mock,
|
|
||||||
)
|
|
||||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||||
|
|
||||||
URL = "https://tts.voicetech.yandex.net/generate?"
|
URL = "https://tts.voicetech.yandex.net/generate?"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def tts_mutagen_mock_fixture_autouse(tts_mutagen_mock):
|
||||||
|
"""Mock writing tags."""
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def mock_tts_cache_dir_autouse(mock_tts_cache_dir):
|
||||||
|
"""Mock the TTS cache dir with empty dir."""
|
||||||
|
return mock_tts_cache_dir
|
||||||
|
|
||||||
|
|
||||||
async def get_media_source_url(hass, media_content_id):
|
async def get_media_source_url(hass, media_content_id):
|
||||||
"""Get the media source url."""
|
"""Get the media source url."""
|
||||||
if media_source.DOMAIN not in hass.config.components:
|
if media_source.DOMAIN not in hass.config.components:
|
||||||
@ -33,15 +39,6 @@ async def get_media_source_url(hass, media_content_id):
|
|||||||
return resolved.url
|
return resolved.url
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
|
||||||
def cleanup_cache(hass):
|
|
||||||
"""Prevent TTS writing."""
|
|
||||||
yield
|
|
||||||
default_tts = hass.config.path(tts.DEFAULT_CACHE_DIR)
|
|
||||||
if os.path.isdir(default_tts):
|
|
||||||
shutil.rmtree(default_tts)
|
|
||||||
|
|
||||||
|
|
||||||
async def test_setup_component(hass: HomeAssistant) -> None:
|
async def test_setup_component(hass: HomeAssistant) -> None:
|
||||||
"""Test setup component."""
|
"""Test setup component."""
|
||||||
config = {tts.DOMAIN: {"platform": "yandextts", "api_key": "1234567xx"}}
|
config = {tts.DOMAIN: {"platform": "yandextts", "api_key": "1234567xx"}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user