Files
wehub-resource-sync 7a0da7932b
OSV-Scanner (Scheduled) / scan-scheduled (push) Failing after 0s
Create Release / test-gate (push) Has been cancelled
Create Release / release-gate (push) Has been cancelled
Create Release / ci-gate (push) Has been cancelled
Create Release / version-check (push) Has been cancelled
Create Release / e2e-test-gate (push) Has been cancelled
Create Release / responsive-test-gate (push) Has been cancelled
Create Release / compat-test-gate (push) Has been cancelled
Create Release / compose-integration-gate (push) Has been cancelled
Create Release / vulture-gate (push) Has been cancelled
Create Release / build (push) Has been cancelled
Create Release / provenance (push) Has been cancelled
Create Release / prerelease-docker (push) Has been cancelled
Create Release / publish-docker (push) Has been cancelled
Create Release / create-release (push) Has been cancelled
Create Release / cleanup-changelog (push) Has been cancelled
Create Release / trigger-pypi (push) Has been cancelled
Create Release / monitor-pypi (push) Has been cancelled
Create Release / Clean up orphan prerelease tags and signatures (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-form] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-metrics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-workflow] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-core] (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [history-news] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [library] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [link-analytics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-core] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-lifecycle] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [error-benchmark] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) (push) Has been cancelled
Docker Tests (Consolidated) / Accessibility Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Unit Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Example Tests (push) Has been cancelled
Docker Tests (Consolidated) / Production Image Smoke Test (push) Has been cancelled
Docker Tests (Consolidated) / Infrastructure Tests (push) Has been cancelled
OSSF Scorecard / OSSF Security Scorecard Analysis (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [mobile] (push) Has been cancelled
Backwards Compatibility / Verify Encryption Constants (push) Has been cancelled
Backwards Compatibility / PyPI Version Compatibility (push) Has been cancelled
Backwards Compatibility / Database Migration Tests (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Docker Tests (Consolidated) / detect-changes (push) Has been cancelled
Docker Tests (Consolidated) / Build Test Image (push) Has been cancelled
Docker Tests (Consolidated) / All Pytest Tests + Coverage (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [accessibility] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [api-crud] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-login] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-register] (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:08:55 +08:00

123 lines
3.1 KiB
Python

"""
Fixtures for LLM provider tests.
"""
import pytest
from unittest.mock import Mock
@pytest.fixture
def mock_settings_snapshot():
"""Create a mock settings snapshot for testing."""
return {
"llm.openai.api_key": "test-openai-key",
"llm.ollama.url": "http://localhost:11434",
"llm.ollama.api_key": "",
"llm.max_tokens": 4096,
"llm.streaming": True,
"llm.max_retries": 3,
"llm.request_timeout": 60,
"llm.local_context_window_size": 8192,
"llm.supports_max_tokens": True,
}
@pytest.fixture
def mock_empty_settings():
"""Create empty settings snapshot (no API keys configured)."""
return {}
@pytest.fixture
def mock_openai_client():
"""Create a mock OpenAI client."""
client = Mock()
# Mock models list response
mock_model1 = Mock()
mock_model1.id = "gpt-4"
mock_model2 = Mock()
mock_model2.id = "gpt-3.5-turbo"
models_response = Mock()
models_response.data = [mock_model1, mock_model2]
client.models.list.return_value = models_response
return client
@pytest.fixture
def mock_ollama_response():
"""Create a mock Ollama API response."""
return {
"models": [
{"name": "llama2:latest", "size": 3826793472},
{"name": "gemma3:12b", "size": 2948523008},
{"name": "codellama:latest", "size": 3826793472},
]
}
@pytest.fixture
def mock_chat_completion():
"""Create a mock chat completion response."""
response = Mock()
response.choices = [Mock(message=Mock(content="This is a test response."))]
return response
@pytest.fixture
def mock_provider_class():
"""Create a mock provider class for testing discovery."""
class MockProvider:
provider_name = "Mock Provider"
provider_key = "MOCK"
company_name = "Mock Company"
is_cloud = True
api_key_setting = "llm.mock.api_key"
default_base_url = "https://api.mock.com/v1"
default_model = "mock-model-1"
@classmethod
def requires_auth_for_models(cls):
return True
@classmethod
def create_llm(cls, model_name=None, temperature=0.7, **kwargs):
return Mock()
@classmethod
def is_available(cls, settings_snapshot=None):
return True
return MockProvider
@pytest.fixture
def mock_local_provider_class():
"""Create a mock local provider class (no API key required)."""
class MockLocalProvider:
provider_name = "Mock Local"
provider_key = "MOCK_LOCAL"
company_name = "Local"
is_cloud = False
api_key_setting = None # No API key required
default_base_url = "http://localhost:8080"
default_model = "local-model"
@classmethod
def requires_auth_for_models(cls):
return False
@classmethod
def create_llm(cls, model_name=None, temperature=0.7, **kwargs):
return Mock()
@classmethod
def is_available(cls, settings_snapshot=None):
return True
return MockLocalProvider