diff --git a/apps/web/src/components/voice/CloneModal/clone-modal.css b/apps/web/src/components/voice/CloneModal/clone-modal.css index 540853183..35952976d 100644 --- a/apps/web/src/components/voice/CloneModal/clone-modal.css +++ b/apps/web/src/components/voice/CloneModal/clone-modal.css @@ -642,4 +642,3 @@ font-size: 36px; } } - diff --git a/tests/unit/test_voice_clone_preview.py b/tests/unit/test_voice_clone_preview.py index 3bf4ac00b..bf9951151 100755 --- a/tests/unit/test_voice_clone_preview.py +++ b/tests/unit/test_voice_clone_preview.py @@ -57,6 +57,7 @@ class TestVoiceClonePreview: repo = MagicMock() if profile is None: from packages.application.voice_clone.use_cases import VoiceCloneNotFoundError + repo.get.return_value = None use_case_instance = MagicMock() use_case_instance.execute.side_effect = VoiceCloneNotFoundError("not found") @@ -77,9 +78,11 @@ class TestVoiceClonePreview: def mock_execute(self, clone_id, uid): if profile is None: from packages.application.voice_clone.use_cases import VoiceCloneNotFoundError + raise VoiceCloneNotFoundError("not found") if profile.user_id != uid: from packages.application.voice_clone.use_cases import VoiceCloneNotFoundError + raise VoiceCloneNotFoundError("not found") return profile @@ -97,12 +100,13 @@ class TestVoiceClonePreview: return result finally: GetVoiceCloneUseCase.__init__ = original_init - if hasattr(GetVoiceCloneUseCase, 'execute'): - delattr(GetVoiceCloneUseCase, 'execute') + if hasattr(GetVoiceCloneUseCase, "execute"): + delattr(GetVoiceCloneUseCase, "execute") def test_preview_success_ready_clone(self) -> None: """就绪的克隆音色可以正常试听。""" from app.api.routes.voice_clones import _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile() @@ -130,6 +134,7 @@ class TestVoiceClonePreview: def test_preview_custom_text(self) -> None: """自定义试听文本。""" from app.api.routes.voice_clones import _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile() @@ -160,6 +165,7 @@ class TestVoiceClonePreview: def test_preview_not_ready_pending(self) -> None: """pending 状态的克隆音色不能试听。""" from app.api.routes.voice_clones import _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile(status=VoiceCloneStatus.PENDING, voice_id="") @@ -175,6 +181,7 @@ class TestVoiceClonePreview: def test_preview_not_ready_processing(self) -> None: """processing 状态的克隆音色不能试听。""" from app.api.routes.voice_clones import _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile(status=VoiceCloneStatus.PROCESSING) @@ -189,6 +196,7 @@ class TestVoiceClonePreview: def test_preview_not_ready_failed(self) -> None: """failed 状态的克隆音色不能试听。""" from app.api.routes.voice_clones import _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile(status=VoiceCloneStatus.FAILED, error_message="超时") @@ -203,6 +211,7 @@ class TestVoiceClonePreview: def test_preview_tts_failure(self) -> None: """TTS 合成失败返回 502。""" from app.api.routes.voice_clones import _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile() @@ -217,7 +226,8 @@ class TestVoiceClonePreview: def test_preview_cache_default_text(self) -> None: """默认试听文本使用缓存。""" - from app.api.routes.voice_clones import _clone_preview_cache, CLONE_PREVIEW_CACHE_TTL + from app.api.routes.voice_clones import CLONE_PREVIEW_CACHE_TTL, _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile() @@ -241,6 +251,7 @@ class TestVoiceClonePreview: def test_preview_custom_text_no_cache(self) -> None: """自定义文本不使用缓存。""" from app.api.routes.voice_clones import _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile() @@ -259,6 +270,7 @@ class TestVoiceClonePreview: def test_preview_wrong_user(self) -> None: """非所有者不能访问他人克隆音色的试听。""" from app.api.routes.voice_clones import _clone_preview_cache + _clone_preview_cache.clear() profile = _make_profile(user_id="user_001")