✨ Key improvements: • Added public reset_for_testing() method to registry for clean test state management • Updated test setup/teardown to use new public API instead of private attributes • Enhanced inject_transport helper to ensure OpenAI provider registration • Migrated additional test files to use inject_transport pattern • Reduced code duplication by ~30 lines across test files 🔧 Technical details: • transport_helpers.py: Always register OpenAI provider for transport tests • test_o3_pro_output_text_fix.py: Use reset_for_testing() API, remove redundant registration • test_o3_pro_fixture_bisect.py: Migrate all 4 test methods to inject_transport • test_o3_pro_simplified.py: Migrate both test methods to inject_transport • providers/registry.py: Add reset_for_testing() public method ✅ Quality assurance: • All 7 o3-pro tests pass with new helper pattern • No regression in test isolation or provider state management • Improved maintainability through centralized transport injection • Follows single responsibility principle with focused helper function 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
"""Helper functions for HTTP transport injection in tests."""
|
|
|
|
from tests.http_transport_recorder import TransportFactory
|
|
|
|
|
|
def inject_transport(monkeypatch, cassette_path: str):
|
|
"""Inject HTTP transport into OpenAICompatibleProvider for testing.
|
|
|
|
This helper simplifies the monkey patching pattern used across tests
|
|
to inject custom HTTP transports for recording/replaying API calls.
|
|
|
|
Also ensures OpenAI provider is properly registered for tests that need it.
|
|
|
|
Args:
|
|
monkeypatch: pytest monkeypatch fixture
|
|
cassette_path: Path to cassette file for recording/replay
|
|
|
|
Returns:
|
|
The created transport instance
|
|
|
|
Example:
|
|
transport = inject_transport(monkeypatch, "path/to/cassette.json")
|
|
"""
|
|
# Ensure OpenAI provider is registered - always needed for transport injection
|
|
import os
|
|
from providers.base import ProviderType
|
|
from providers.openai_provider import OpenAIModelProvider
|
|
from providers.registry import ModelProviderRegistry
|
|
|
|
# Always register OpenAI provider for transport tests (API key might be dummy)
|
|
ModelProviderRegistry.register_provider(ProviderType.OPENAI, OpenAIModelProvider)
|
|
|
|
# Create transport
|
|
transport = TransportFactory.create_transport(str(cassette_path))
|
|
|
|
# Inject transport using the established pattern
|
|
from providers.openai_compatible import OpenAICompatibleProvider
|
|
|
|
original_client_property = OpenAICompatibleProvider.client
|
|
|
|
def patched_client_getter(self):
|
|
if self._client is None:
|
|
self._test_transport = transport
|
|
return original_client_property.fget(self)
|
|
|
|
monkeypatch.setattr(OpenAICompatibleProvider, "client", property(patched_client_getter))
|
|
|
|
return transport
|