Files
wehub-resource-sync fed8b2eed7
Build and push multi-arch DocsGPT Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Has been cancelled
Backend release / release (push) Has been cancelled
Bandit Security Scan / bandit_scan (push) Has been cancelled
Build and push multi-arch DocsGPT Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Has been cancelled
Build and push multi-arch DocsGPT Docker image / manifest (push) Has been cancelled
Build and push DocsGPT FE Docker image for development / build (linux/amd64, ubuntu-latest, amd64) (push) Has been cancelled
Build and push DocsGPT FE Docker image for development / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Has been cancelled
Build and push DocsGPT FE Docker image for development / manifest (push) Has been cancelled
Python linting / ruff (push) Has been cancelled
Run python tests with pytest / Run tests and count coverage (3.12) (push) Has been cancelled
React Widget Build / build (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:28:29 +08:00

127 lines
4.9 KiB
Python

from application.llm.handlers.handler_creator import LLMHandlerCreator
from application.llm.handlers.base import LLMHandler
from application.llm.handlers.openai import OpenAILLMHandler
from application.llm.handlers.google import GoogleLLMHandler
class TestLLMHandlerCreator:
"""Test LLMHandlerCreator class."""
def test_create_openai_handler(self):
"""Test creating OpenAI handler."""
handler = LLMHandlerCreator.create_handler("openai")
assert isinstance(handler, OpenAILLMHandler)
assert isinstance(handler, LLMHandler)
def test_create_openai_handler_case_insensitive(self):
"""Test creating OpenAI handler with different cases."""
handler_upper = LLMHandlerCreator.create_handler("OPENAI")
handler_mixed = LLMHandlerCreator.create_handler("OpenAI")
assert isinstance(handler_upper, OpenAILLMHandler)
assert isinstance(handler_mixed, OpenAILLMHandler)
def test_create_google_handler(self):
"""Test creating Google handler."""
handler = LLMHandlerCreator.create_handler("google")
assert isinstance(handler, GoogleLLMHandler)
assert isinstance(handler, LLMHandler)
def test_create_google_handler_case_insensitive(self):
"""Test creating Google handler with different cases."""
handler_upper = LLMHandlerCreator.create_handler("GOOGLE")
handler_mixed = LLMHandlerCreator.create_handler("Google")
assert isinstance(handler_upper, GoogleLLMHandler)
assert isinstance(handler_mixed, GoogleLLMHandler)
def test_create_default_handler(self):
"""Test creating default handler."""
handler = LLMHandlerCreator.create_handler("default")
assert isinstance(handler, OpenAILLMHandler)
def test_create_unknown_handler_fallback(self):
"""Test creating handler for unknown type falls back to OpenAI."""
handler = LLMHandlerCreator.create_handler("unknown_provider")
assert isinstance(handler, OpenAILLMHandler)
def test_create_anthropic_handler_fallback(self):
"""Test creating Anthropic handler falls back to OpenAI (not supported in handlers)."""
handler = LLMHandlerCreator.create_handler("anthropic")
assert isinstance(handler, OpenAILLMHandler)
def test_create_empty_string_handler_fallback(self):
"""Test creating handler with empty string falls back to OpenAI."""
handler = LLMHandlerCreator.create_handler("")
assert isinstance(handler, OpenAILLMHandler)
def test_handlers_registry(self):
"""Test the handlers registry contains expected mappings."""
expected_handlers = {
"openai": OpenAILLMHandler,
"google": GoogleLLMHandler,
"novita": OpenAILLMHandler,
"default": OpenAILLMHandler,
}
assert LLMHandlerCreator.handlers == expected_handlers
def test_create_handler_with_args(self):
"""Test creating handler with additional arguments."""
handler = LLMHandlerCreator.create_handler("openai")
assert isinstance(handler, OpenAILLMHandler)
assert handler.llm_calls == []
assert handler.tool_calls == []
def test_create_handler_with_kwargs(self):
"""Test creating handler with keyword arguments."""
handler = LLMHandlerCreator.create_handler("google")
assert isinstance(handler, GoogleLLMHandler)
assert handler.llm_calls == []
assert handler.tool_calls == []
def test_all_registered_handlers_are_valid(self):
"""Test that all registered handlers can be instantiated."""
for handler_type in LLMHandlerCreator.handlers.keys():
handler = LLMHandlerCreator.create_handler(handler_type)
assert isinstance(handler, LLMHandler)
assert hasattr(handler, 'parse_response')
assert hasattr(handler, 'create_tool_message')
assert hasattr(handler, '_iterate_stream')
def test_handler_inheritance(self):
"""Test that all created handlers inherit from LLMHandler."""
test_types = ["openai", "google", "default", "unknown"]
for handler_type in test_types:
handler = LLMHandlerCreator.create_handler(handler_type)
assert isinstance(handler, LLMHandler)
assert callable(getattr(handler, 'parse_response'))
assert callable(getattr(handler, 'create_tool_message'))
assert callable(getattr(handler, '_iterate_stream'))
def test_create_handler_preserves_handler_state(self):
"""Test that each created handler has independent state."""
handler1 = LLMHandlerCreator.create_handler("openai")
handler2 = LLMHandlerCreator.create_handler("openai")
handler1.llm_calls.append("test_call")
assert len(handler1.llm_calls) == 1
assert len(handler2.llm_calls) == 0
assert handler1 is not handler2