From be5b8ecb804fe741fca1908f1ab699e325e447f3 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 28 Jun 2026 12:04:24 +0000 Subject: [PATCH] test(litigation): cover provider factory selection and OpenRouter config Add tests for ollama/lm_studio/openrouter provider creation, env-based API key resolution, attribution headers, extra_body, and unknown provider errors. Co-authored-by: exios4 --- tests/test_litigation_providers.py | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 tests/test_litigation_providers.py diff --git a/tests/test_litigation_providers.py b/tests/test_litigation_providers.py new file mode 100644 index 0000000..4e80ebb --- /dev/null +++ b/tests/test_litigation_providers.py @@ -0,0 +1,62 @@ +"""Regression tests for litigation provider factory selection and OpenRouter config.""" + +from __future__ import annotations + +import pytest + +from litigation.providers.factory import get_provider +from litigation.providers.ollama_provider import OllamaProvider +from litigation.providers.openai_compat_provider import OpenAICompatProvider + + +def test_get_provider_ollama() -> None: + p = get_provider("ollama", "llama3.2", ollama_base_url="http://host:11434") + assert isinstance(p, OllamaProvider) + assert p.model == "llama3.2" + assert p.base_url == "http://host:11434" + + +def test_get_provider_lm_studio() -> None: + p = get_provider("lm_studio", "local-model", lm_studio_base_url="http://127.0.0.1:1234/v1") + assert isinstance(p, OpenAICompatProvider) + assert p.model == "local-model" + assert p.base_url == "http://127.0.0.1:1234/v1" + assert p.api_key == "lm-studio" + + +def test_get_provider_openrouter_with_key(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("OPENROUTER_API_KEY", raising=False) + cfg = { + "app_attribution": {"http_referer": "https://example.com", "x_title": "TestApp"}, + "provider": {"sort": "price"}, + "user": "user-42", + } + p = get_provider( + "openrouter", + "anthropic/claude-3.5-sonnet", + openrouter_api_key="sk-test", + openrouter_config=cfg, + ) + assert isinstance(p, OpenAICompatProvider) + assert p.api_key == "sk-test" + assert p.base_url == "https://openrouter.ai/api/v1" + assert p.default_headers == {"HTTP-Referer": "https://example.com", "X-Title": "TestApp"} + assert p.extra_body == {"provider": {"sort": "price"}, "user": "user-42"} + + +def test_get_provider_openrouter_uses_env_key(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.setenv("OPENROUTER_API_KEY", "env-key") + p = get_provider("openrouter", "openai/gpt-4o-mini") + assert isinstance(p, OpenAICompatProvider) + assert p.api_key == "env-key" + + +def test_get_provider_openrouter_missing_key_raises(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("OPENROUTER_API_KEY", raising=False) + with pytest.raises(ValueError, match="OPENROUTER_API_KEY"): + get_provider("openrouter", "openai/gpt-4o-mini") + + +def test_get_provider_unknown_raises() -> None: + with pytest.raises(ValueError, match="Unknown provider"): + get_provider("anthropic_direct", "claude-3")