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
309 lines
9.8 KiB
Python
309 lines
9.8 KiB
Python
"""
|
|
Behavioral tests for embeddings_config module.
|
|
|
|
Tests embedding provider availability checks and configuration.
|
|
"""
|
|
|
|
import pytest
|
|
|
|
|
|
class TestValidEmbeddingProviders:
|
|
"""Tests for VALID_EMBEDDING_PROVIDERS constant."""
|
|
|
|
def test_is_list(self):
|
|
"""VALID_EMBEDDING_PROVIDERS is a list."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
VALID_EMBEDDING_PROVIDERS,
|
|
)
|
|
|
|
assert isinstance(VALID_EMBEDDING_PROVIDERS, list)
|
|
|
|
def test_includes_sentence_transformers(self):
|
|
"""Includes sentence_transformers provider."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
VALID_EMBEDDING_PROVIDERS,
|
|
)
|
|
|
|
assert "sentence_transformers" in VALID_EMBEDDING_PROVIDERS
|
|
|
|
def test_includes_ollama(self):
|
|
"""Includes ollama provider."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
VALID_EMBEDDING_PROVIDERS,
|
|
)
|
|
|
|
assert "ollama" in VALID_EMBEDDING_PROVIDERS
|
|
|
|
def test_includes_openai(self):
|
|
"""Includes openai provider."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
VALID_EMBEDDING_PROVIDERS,
|
|
)
|
|
|
|
assert "openai" in VALID_EMBEDDING_PROVIDERS
|
|
|
|
def test_all_values_are_strings(self):
|
|
"""All values are strings."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
VALID_EMBEDDING_PROVIDERS,
|
|
)
|
|
|
|
for provider in VALID_EMBEDDING_PROVIDERS:
|
|
assert isinstance(provider, str)
|
|
|
|
def test_all_values_are_lowercase(self):
|
|
"""All values are lowercase."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
VALID_EMBEDDING_PROVIDERS,
|
|
)
|
|
|
|
for provider in VALID_EMBEDDING_PROVIDERS:
|
|
assert provider == provider.lower()
|
|
|
|
|
|
class TestIsSentenceTransformersAvailable:
|
|
"""Tests for is_sentence_transformers_available function."""
|
|
|
|
def test_returns_bool(self):
|
|
"""Returns a boolean."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
is_sentence_transformers_available,
|
|
)
|
|
|
|
result = is_sentence_transformers_available()
|
|
assert isinstance(result, bool)
|
|
|
|
def test_callable_without_arguments(self):
|
|
"""Can be called without arguments."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
is_sentence_transformers_available,
|
|
)
|
|
|
|
# Should not raise
|
|
is_sentence_transformers_available()
|
|
|
|
|
|
class TestIsOllamaEmbeddingsAvailable:
|
|
"""Tests for is_ollama_embeddings_available function."""
|
|
|
|
def test_returns_bool(self):
|
|
"""Returns a boolean."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
is_ollama_embeddings_available,
|
|
)
|
|
|
|
result = is_ollama_embeddings_available()
|
|
assert isinstance(result, bool)
|
|
|
|
def test_callable_without_arguments(self):
|
|
"""Can be called without arguments."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
is_ollama_embeddings_available,
|
|
)
|
|
|
|
# Should not raise
|
|
is_ollama_embeddings_available()
|
|
|
|
def test_accepts_settings_snapshot(self):
|
|
"""Accepts settings_snapshot parameter."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
is_ollama_embeddings_available,
|
|
)
|
|
|
|
# Should not raise
|
|
is_ollama_embeddings_available(settings_snapshot={})
|
|
|
|
|
|
class TestIsOpenAIEmbeddingsAvailable:
|
|
"""Tests for is_openai_embeddings_available function."""
|
|
|
|
def test_returns_bool(self):
|
|
"""Returns a boolean."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
is_openai_embeddings_available,
|
|
)
|
|
|
|
result = is_openai_embeddings_available()
|
|
assert isinstance(result, bool)
|
|
|
|
def test_callable_without_arguments(self):
|
|
"""Can be called without arguments."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
is_openai_embeddings_available,
|
|
)
|
|
|
|
# Should not raise
|
|
is_openai_embeddings_available()
|
|
|
|
def test_accepts_settings_snapshot(self):
|
|
"""Accepts settings_snapshot parameter."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
is_openai_embeddings_available,
|
|
)
|
|
|
|
# Should not raise
|
|
is_openai_embeddings_available(settings_snapshot={})
|
|
|
|
|
|
class TestGetAvailableEmbeddingProviders:
|
|
"""Tests for get_available_embedding_providers function."""
|
|
|
|
def test_returns_dict(self):
|
|
"""Returns a dictionary."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
get_available_embedding_providers,
|
|
)
|
|
|
|
result = get_available_embedding_providers()
|
|
assert isinstance(result, dict)
|
|
|
|
def test_callable_without_arguments(self):
|
|
"""Can be called without arguments."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
get_available_embedding_providers,
|
|
)
|
|
|
|
# Should not raise
|
|
get_available_embedding_providers()
|
|
|
|
def test_accepts_settings_snapshot(self):
|
|
"""Accepts settings_snapshot parameter."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
get_available_embedding_providers,
|
|
)
|
|
|
|
# Should not raise
|
|
get_available_embedding_providers(settings_snapshot={})
|
|
|
|
def test_keys_are_strings(self):
|
|
"""Dict keys are strings."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
get_available_embedding_providers,
|
|
)
|
|
|
|
result = get_available_embedding_providers()
|
|
for key in result.keys():
|
|
assert isinstance(key, str)
|
|
|
|
def test_values_are_strings(self):
|
|
"""Dict values are strings (display names)."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
get_available_embedding_providers,
|
|
)
|
|
|
|
result = get_available_embedding_providers()
|
|
for value in result.values():
|
|
assert isinstance(value, str)
|
|
|
|
def test_keys_are_valid_providers(self):
|
|
"""Dict keys are valid provider names."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
VALID_EMBEDDING_PROVIDERS,
|
|
get_available_embedding_providers,
|
|
)
|
|
|
|
result = get_available_embedding_providers()
|
|
for key in result.keys():
|
|
assert key in VALID_EMBEDDING_PROVIDERS
|
|
|
|
|
|
class TestGetEmbeddings:
|
|
"""Tests for get_embeddings function validation."""
|
|
|
|
def test_raises_for_invalid_provider(self):
|
|
"""Raises ValueError for invalid provider."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
get_embeddings,
|
|
)
|
|
|
|
with pytest.raises(ValueError) as exc_info:
|
|
get_embeddings(provider="invalid_provider")
|
|
assert "Invalid embedding provider" in str(exc_info.value)
|
|
|
|
def test_error_message_includes_valid_providers(self):
|
|
"""Error message includes list of valid providers."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
get_embeddings,
|
|
)
|
|
|
|
with pytest.raises(ValueError) as exc_info:
|
|
get_embeddings(provider="invalid_provider")
|
|
assert "sentence_transformers" in str(exc_info.value)
|
|
|
|
def test_accepts_lowercase_provider(self):
|
|
"""Normalizes provider to lowercase."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
get_embeddings,
|
|
)
|
|
|
|
# This should at least get past validation (may fail for other reasons)
|
|
# Testing that "OPENAI" normalizes to "openai"
|
|
try:
|
|
get_embeddings(provider=" OPENAI ")
|
|
except ValueError as e:
|
|
# Should not be "Invalid embedding provider" error
|
|
assert "Invalid embedding provider" not in str(e)
|
|
except Exception:
|
|
# Other errors are fine (e.g., missing API key)
|
|
pass
|
|
|
|
|
|
class TestGetProviderClasses:
|
|
"""Tests for _get_provider_classes function."""
|
|
|
|
def test_returns_dict(self):
|
|
"""Returns a dictionary."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
_get_provider_classes,
|
|
)
|
|
|
|
result = _get_provider_classes()
|
|
assert isinstance(result, dict)
|
|
|
|
def test_has_sentence_transformers(self):
|
|
"""Has sentence_transformers key."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
_get_provider_classes,
|
|
)
|
|
|
|
result = _get_provider_classes()
|
|
assert "sentence_transformers" in result
|
|
|
|
def test_has_ollama(self):
|
|
"""Has ollama key."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
_get_provider_classes,
|
|
)
|
|
|
|
result = _get_provider_classes()
|
|
assert "ollama" in result
|
|
|
|
def test_has_openai(self):
|
|
"""Has openai key."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
_get_provider_classes,
|
|
)
|
|
|
|
result = _get_provider_classes()
|
|
assert "openai" in result
|
|
|
|
def test_values_are_classes(self):
|
|
"""Values are class types."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
_get_provider_classes,
|
|
)
|
|
|
|
result = _get_provider_classes()
|
|
for key, value in result.items():
|
|
assert isinstance(value, type), f"{key} is not a class"
|
|
|
|
def test_caches_result(self):
|
|
"""Caches result on subsequent calls."""
|
|
from local_deep_research.embeddings.embeddings_config import (
|
|
_get_provider_classes,
|
|
)
|
|
|
|
result1 = _get_provider_classes()
|
|
result2 = _get_provider_classes()
|
|
assert result1 is result2
|