Files
ss-tools/backend/tests/plugins/translate/test_preview_resolve_provider.py
busya f75c15dbc6 test: massive coverage expansion — 15 new test modules + assistant tool fixes + orthogonal testing
- 10 translate plugin test files (100% coverage on 12 modules)
- assistant/handler tools: 85+ tests covering dispatch, registry, resolvers, routes, llm_planner, 13 tool handlers
- clean release: artifact_catalog_loader, mappers, approval, publication tests
- API routes: translate_helpers, validation_service extensions, datasets to 100%
- notifications: providers/service tests
- services: profile_preference_service
- docs/orthogonal-test-report.md — full speckit.tests audit
- Fixes: 3 git_base async mock failures, 4 assistant handler permission-check patches
- .gitignore: coverage artifacts
2026-06-15 15:38:59 +03:00

104 lines
3.8 KiB
Python

# #region Test.PreviewResolveProvider [C:3] [TYPE Module] [SEMANTICS test, translate, preview, provider, model, resolve]
# @BRIEF Tests for preview_resolve_provider.py — resolve_provider_model.
# @RELATION BINDS_TO -> [resolve_provider_model]
# @TEST_CONTRACT: resolve_provider_model -> str|None | returns default model or None
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent / "src"))
import os
os.environ.setdefault("SECRET_KEY", "test-secret-key-for-testing")
os.environ.setdefault("DATABASE_URL", "sqlite:///:memory:")
os.environ.setdefault("AUTH_DATABASE_URL", "sqlite:///:memory:")
from unittest.mock import MagicMock, patch
import pytest
from src.plugins.translate.preview_resolve_provider import resolve_provider_model
class TestResolveProviderModel:
"""resolve_provider_model — resolve LLM model name for job."""
def _make_job(self, provider_id: str | None = "provider-1") -> MagicMock:
job = MagicMock()
job.provider_id = provider_id
return job
def test_with_provider_and_default_model(self):
"""Provider with default_model returns it."""
db = MagicMock()
job = self._make_job("provider-1")
mock_provider = MagicMock()
mock_provider.default_model = "gpt-4o"
with patch("src.services.llm_provider.LLMProviderService") as MockCls:
mock_service = MagicMock()
mock_service.get_provider.return_value = mock_provider
MockCls.return_value = mock_service
result = resolve_provider_model(db, job)
assert result == "gpt-4o"
def test_with_provider_no_default_model_returns_fallback(self):
"""Provider with None default_model returns 'gpt-4o-mini'."""
db = MagicMock()
job = self._make_job("provider-1")
mock_provider = MagicMock()
mock_provider.default_model = None
with patch("src.services.llm_provider.LLMProviderService") as MockCls:
mock_service = MagicMock()
mock_service.get_provider.return_value = mock_provider
MockCls.return_value = mock_service
result = resolve_provider_model(db, job)
assert result == "gpt-4o-mini"
def test_no_provider_id(self):
"""No provider_id returns None."""
job = self._make_job(None)
result = resolve_provider_model(MagicMock(), job)
assert result is None
def test_exception_during_resolve_returns_none(self):
"""Exception during provider resolve returns None."""
db = MagicMock()
job = self._make_job("provider-1")
with patch("src.services.llm_provider.LLMProviderService", side_effect=Exception("DB error")):
result = resolve_provider_model(db, job)
assert result is None
def test_provider_not_found_returns_none(self):
"""Provider not found (get_provider returns None) -> returns None."""
db = MagicMock()
job = self._make_job("provider-1")
with patch("src.services.llm_provider.LLMProviderService") as MockCls:
mock_service = MagicMock()
mock_service.get_provider.return_value = None
MockCls.return_value = mock_service
result = resolve_provider_model(db, job)
assert result is None
def test_provider_service_initialized_with_db(self):
"""LLMProviderService initialized with the given db session."""
db = MagicMock()
job = self._make_job("provider-1")
with patch("src.services.llm_provider.LLMProviderService") as MockCls:
mock_service = MagicMock()
mock_service.get_provider.return_value = MagicMock(default_model="claude-3-5-sonnet")
MockCls.return_value = mock_service
resolve_provider_model(db, job)
MockCls.assert_called_once_with(db)
# #endregion Test.PreviewResolveProvider