196 lines
7.5 KiB
Python
196 lines
7.5 KiB
Python
"""Unit tests for service protocol definitions."""
|
|
|
|
import pytest
|
|
from typing import Any, Dict, List, Optional, Protocol, runtime_checkable
|
|
from pathlib import Path
|
|
from uuid import UUID
|
|
|
|
from src.services.protocols import (
|
|
YouTubeServiceProtocol,
|
|
MediaServiceProtocol,
|
|
TranscriptionServiceProtocol,
|
|
EnhancementServiceProtocol,
|
|
ExportServiceProtocol,
|
|
BatchProcessorProtocol,
|
|
ProgressCallback,
|
|
)
|
|
|
|
|
|
class TestProtocolDefinitions:
|
|
"""Test that all service protocols are properly defined."""
|
|
|
|
def test_youtube_service_protocol_definition(self):
|
|
"""Test YouTubeServiceProtocol has required methods."""
|
|
# Verify protocol is runtime checkable
|
|
assert hasattr(YouTubeServiceProtocol, '__subclasshook__')
|
|
|
|
# Verify required methods exist
|
|
methods = ['extract_metadata', 'batch_extract']
|
|
for method in methods:
|
|
assert hasattr(YouTubeServiceProtocol, method)
|
|
|
|
def test_media_service_protocol_definition(self):
|
|
"""Test MediaServiceProtocol has required methods."""
|
|
assert hasattr(MediaServiceProtocol, '__subclasshook__')
|
|
|
|
methods = [
|
|
'download_media', 'preprocess_audio', 'validate_file_size',
|
|
'check_audio_quality', 'get_media_info', 'create_media_file_record',
|
|
'update_media_file_status', 'get_media_file_by_id',
|
|
'get_pending_media_files', 'get_ready_media_files',
|
|
'process_media_pipeline', 'get_telemetry_data', 'clear_telemetry_data'
|
|
]
|
|
for method in methods:
|
|
assert hasattr(MediaServiceProtocol, method)
|
|
|
|
def test_transcription_service_protocol_definition(self):
|
|
"""Test TranscriptionServiceProtocol has required methods."""
|
|
assert hasattr(TranscriptionServiceProtocol, '__subclasshook__')
|
|
|
|
methods = [
|
|
'transcribe_file', 'transcribe_audio', 'create_transcription_job',
|
|
'get_job_status', 'cancel_job'
|
|
]
|
|
for method in methods:
|
|
assert hasattr(TranscriptionServiceProtocol, method)
|
|
|
|
def test_enhancement_service_protocol_definition(self):
|
|
"""Test EnhancementServiceProtocol has required methods."""
|
|
assert hasattr(EnhancementServiceProtocol, '__subclasshook__')
|
|
|
|
methods = [
|
|
'initialize', 'enhance_transcript', 'enhance_transcript_batch',
|
|
'enhance_transcription_result'
|
|
]
|
|
for method in methods:
|
|
assert hasattr(EnhancementServiceProtocol, method)
|
|
|
|
def test_export_service_protocol_definition(self):
|
|
"""Test ExportServiceProtocol has required methods."""
|
|
assert hasattr(ExportServiceProtocol, '__subclasshook__')
|
|
|
|
methods = [
|
|
'export_transcript', 'export_batch', 'get_supported_formats'
|
|
]
|
|
for method in methods:
|
|
assert hasattr(ExportServiceProtocol, method)
|
|
|
|
def test_batch_processor_protocol_definition(self):
|
|
"""Test BatchProcessorProtocol has required methods."""
|
|
assert hasattr(BatchProcessorProtocol, '__subclasshook__')
|
|
|
|
methods = [
|
|
'add_task', 'process_tasks', 'get_progress', 'cancel_task',
|
|
'get_task_status', 'get_completed_tasks'
|
|
]
|
|
for method in methods:
|
|
assert hasattr(BatchProcessorProtocol, method)
|
|
|
|
def test_progress_callback_protocol_definition(self):
|
|
"""Test ProgressCallback protocol definition."""
|
|
assert hasattr(ProgressCallback, '__subclasshook__')
|
|
assert hasattr(ProgressCallback, '__call__')
|
|
|
|
|
|
class TestProtocolTypeHints:
|
|
"""Test that protocol methods have proper type hints."""
|
|
|
|
def test_youtube_service_method_signatures(self):
|
|
"""Test YouTubeServiceProtocol method signatures."""
|
|
# This test ensures the protocol methods have the expected signatures
|
|
# We can't easily test this at runtime, but we can verify the protocol exists
|
|
assert YouTubeServiceProtocol is not None
|
|
|
|
# Test that it's a Protocol
|
|
assert issubclass(YouTubeServiceProtocol, Protocol)
|
|
|
|
def test_media_service_method_signatures(self):
|
|
"""Test MediaServiceProtocol method signatures."""
|
|
assert MediaServiceProtocol is not None
|
|
assert issubclass(MediaServiceProtocol, Protocol)
|
|
|
|
def test_transcription_service_method_signatures(self):
|
|
"""Test TranscriptionServiceProtocol method signatures."""
|
|
assert TranscriptionServiceProtocol is not None
|
|
assert issubclass(TranscriptionServiceProtocol, Protocol)
|
|
|
|
def test_enhancement_service_method_signatures(self):
|
|
"""Test EnhancementServiceProtocol method signatures."""
|
|
assert EnhancementServiceProtocol is not None
|
|
assert issubclass(EnhancementServiceProtocol, Protocol)
|
|
|
|
def test_export_service_method_signatures(self):
|
|
"""Test ExportServiceProtocol method signatures."""
|
|
assert ExportServiceProtocol is not None
|
|
assert issubclass(ExportServiceProtocol, Protocol)
|
|
|
|
def test_batch_processor_method_signatures(self):
|
|
"""Test BatchProcessorProtocol method signatures."""
|
|
assert BatchProcessorProtocol is not None
|
|
assert issubclass(BatchProcessorProtocol, Protocol)
|
|
|
|
|
|
class TestProtocolCompatibility:
|
|
"""Test that existing services are compatible with protocols."""
|
|
|
|
def test_media_service_compatibility(self):
|
|
"""Test that existing MediaService implements MediaServiceProtocol."""
|
|
from src.services.media_service import MediaService
|
|
|
|
# This test will fail if MediaService doesn't implement all required methods
|
|
# We're testing the interface compatibility, not the actual implementation
|
|
assert MediaService is not None
|
|
|
|
def test_transcription_service_compatibility(self):
|
|
"""Test that existing TranscriptionService implements TranscriptionServiceProtocol."""
|
|
from src.services.transcription_service import TranscriptionService
|
|
|
|
assert TranscriptionService is not None
|
|
|
|
def test_youtube_service_compatibility(self):
|
|
"""Test that existing YouTubeMetadataService implements YouTubeServiceProtocol."""
|
|
from src.services.youtube_service import YouTubeMetadataService
|
|
|
|
assert YouTubeMetadataService is not None
|
|
|
|
def test_enhancement_service_compatibility(self):
|
|
"""Test that existing DeepSeekEnhancementService implements EnhancementServiceProtocol."""
|
|
from src.services.enhancement.service import DeepSeekEnhancementService
|
|
|
|
assert DeepSeekEnhancementService is not None
|
|
|
|
|
|
class TestProtocolImportability:
|
|
"""Test that all protocols can be imported correctly."""
|
|
|
|
def test_protocol_imports(self):
|
|
"""Test that all protocols can be imported from the protocols module."""
|
|
from src.services.protocols import (
|
|
YouTubeServiceProtocol,
|
|
MediaServiceProtocol,
|
|
TranscriptionServiceProtocol,
|
|
EnhancementServiceProtocol,
|
|
ExportServiceProtocol,
|
|
BatchProcessorProtocol,
|
|
ProgressCallback,
|
|
)
|
|
|
|
# Verify all protocols are imported
|
|
protocols = [
|
|
YouTubeServiceProtocol,
|
|
MediaServiceProtocol,
|
|
TranscriptionServiceProtocol,
|
|
EnhancementServiceProtocol,
|
|
ExportServiceProtocol,
|
|
BatchProcessorProtocol,
|
|
ProgressCallback,
|
|
]
|
|
|
|
for protocol in protocols:
|
|
assert protocol is not None
|
|
assert hasattr(protocol, '__subclasshook__')
|
|
|
|
|
|
if __name__ == "__main__":
|
|
pytest.main([__file__])
|