7a72cfd709
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m9s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 2m19s
CI/CD Pipeline / Validate - Code Quality (push) Failing after 3m10s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 3m7s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 3m7s
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 1m17s
CI/CD Pipeline / Frontend Lint (push) Successful in 3m37s
CI/CD Pipeline / Integration Tests (push) Successful in 2m18s
CI/CD Pipeline / Unit Tests (push) Failing after 4m59s
CI/CD Pipeline / Build Staging API Image (push) Successful in 8m39s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 3m25s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 42s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 27m2s
CI/CD Pipeline / Staging API Integration Tests (push) Failing after 30m15s
91 lines
2.8 KiB
Python
Executable File
91 lines
2.8 KiB
Python
Executable File
"""ASR 服务工厂单元测试."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
import pytest
|
|
from services.asr_service_factory import get_asr_service, reset_asr_service_cache
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def clean_env():
|
|
"""每个测试前后清理环境变量和缓存."""
|
|
# 保存原始值
|
|
old = os.environ.get("ASR_PROVIDER")
|
|
reset_asr_service_cache()
|
|
yield
|
|
# 恢复
|
|
if old is not None:
|
|
os.environ["ASR_PROVIDER"] = old
|
|
elif "ASR_PROVIDER" in os.environ:
|
|
del os.environ["ASR_PROVIDER"]
|
|
reset_asr_service_cache()
|
|
|
|
|
|
class TestGetAsrService:
|
|
"""ASR服务工厂测试."""
|
|
|
|
def test_default_no_provider_returns_none(self):
|
|
"""未配置ASR_PROVIDER时返回None."""
|
|
if "ASR_PROVIDER" in os.environ:
|
|
del os.environ["ASR_PROVIDER"]
|
|
reset_asr_service_cache()
|
|
result = get_asr_service()
|
|
assert result is None
|
|
|
|
def test_empty_provider_returns_none(self):
|
|
"""ASR_PROVIDER为空字符串时返回None."""
|
|
os.environ["ASR_PROVIDER"] = ""
|
|
reset_asr_service_cache()
|
|
result = get_asr_service()
|
|
assert result is None
|
|
|
|
def test_whitespace_provider_returns_none(self):
|
|
"""ASR_PROVIDER为空白字符时返回None."""
|
|
os.environ["ASR_PROVIDER"] = " "
|
|
reset_asr_service_cache()
|
|
result = get_asr_service()
|
|
assert result is None
|
|
|
|
def test_mock_provider_returns_mock_service(self):
|
|
"""mock provider返回MockASRService."""
|
|
os.environ["ASR_PROVIDER"] = "mock"
|
|
reset_asr_service_cache()
|
|
result = get_asr_service()
|
|
assert result is not None
|
|
# 检查类型名称
|
|
assert type(result).__name__ == "MockASRService"
|
|
|
|
def test_mock_provider_case_insensitive(self):
|
|
"""provider大小写不敏感."""
|
|
os.environ["ASR_PROVIDER"] = "MOCK"
|
|
reset_asr_service_cache()
|
|
result = get_asr_service()
|
|
assert result is not None
|
|
assert type(result).__name__ == "MockASRService"
|
|
|
|
def test_unknown_provider_returns_none(self):
|
|
"""未知provider返回None(不阻断主流程)."""
|
|
os.environ["ASR_PROVIDER"] = "unknown_provider_xyz"
|
|
reset_asr_service_cache()
|
|
result = get_asr_service()
|
|
assert result is None
|
|
|
|
def test_singleton_caching(self):
|
|
"""单例缓存有效,多次调用返回同一实例."""
|
|
os.environ["ASR_PROVIDER"] = "mock"
|
|
reset_asr_service_cache()
|
|
s1 = get_asr_service()
|
|
s2 = get_asr_service()
|
|
assert s1 is s2
|
|
|
|
def test_reset_cache_clears_singleton(self):
|
|
"""重置缓存后返回新实例."""
|
|
os.environ["ASR_PROVIDER"] = "mock"
|
|
reset_asr_service_cache()
|
|
s1 = get_asr_service()
|
|
reset_asr_service_cache()
|
|
s2 = get_asr_service()
|
|
assert s1 is not s2
|