Spaces:
Build error
Build error
#!/usr/bin/env python3 | |
"""Test script for DTOs""" | |
import sys | |
import os | |
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src')) | |
from application.dtos import AudioUploadDto, ProcessingRequestDto, ProcessingResultDto, ValidationError | |
def test_audio_upload_dto(): | |
"""Test AudioUploadDto""" | |
print("Testing AudioUploadDto...") | |
# Test valid DTO | |
try: | |
audio_dto = AudioUploadDto( | |
filename="test.wav", | |
content=b"fake audio content" * 100, # Make it larger than 1KB | |
content_type="audio/wav" | |
) | |
print(f"β Valid AudioUploadDto created: {audio_dto.filename}") | |
print(f" Size: {audio_dto.size} bytes") | |
print(f" Extension: {audio_dto.file_extension}") | |
print(f" Base filename: {audio_dto.base_filename}") | |
except Exception as e: | |
print(f"β Failed to create valid AudioUploadDto: {e}") | |
# Test invalid extension | |
try: | |
AudioUploadDto( | |
filename="test.txt", | |
content=b"fake content" * 100, | |
content_type="text/plain" | |
) | |
print("β Should have failed with invalid extension") | |
except ValueError as e: | |
print(f"β Correctly rejected invalid extension: {e}") | |
# Test empty content | |
try: | |
AudioUploadDto( | |
filename="test.wav", | |
content=b"", | |
content_type="audio/wav" | |
) | |
print("β Should have failed with empty content") | |
except ValueError as e: | |
print(f"β Correctly rejected empty content: {e}") | |
def test_processing_request_dto(): | |
"""Test ProcessingRequestDto""" | |
print("\nTesting ProcessingRequestDto...") | |
# Create valid audio DTO first | |
audio_dto = AudioUploadDto( | |
filename="test.wav", | |
content=b"fake audio content" * 100, | |
content_type="audio/wav" | |
) | |
# Test valid DTO | |
try: | |
request_dto = ProcessingRequestDto( | |
audio=audio_dto, | |
asr_model="whisper-small", | |
target_language="es", | |
voice="kokoro", | |
speed=1.2, | |
source_language="en" | |
) | |
print(f"β Valid ProcessingRequestDto created") | |
print(f" ASR Model: {request_dto.asr_model}") | |
print(f" Target Language: {request_dto.target_language}") | |
print(f" Requires Translation: {request_dto.requires_translation}") | |
print(f" Dict representation keys: {list(request_dto.to_dict().keys())}") | |
except Exception as e: | |
print(f"β Failed to create valid ProcessingRequestDto: {e}") | |
# Test invalid speed | |
try: | |
ProcessingRequestDto( | |
audio=audio_dto, | |
asr_model="whisper-small", | |
target_language="es", | |
voice="kokoro", | |
speed=3.0 # Invalid speed | |
) | |
print("β Should have failed with invalid speed") | |
except ValueError as e: | |
print(f"β Correctly rejected invalid speed: {e}") | |
# Test invalid ASR model | |
try: | |
ProcessingRequestDto( | |
audio=audio_dto, | |
asr_model="invalid-model", | |
target_language="es", | |
voice="kokoro" | |
) | |
print("β Should have failed with invalid ASR model") | |
except ValueError as e: | |
print(f"β Correctly rejected invalid ASR model: {e}") | |
def test_processing_result_dto(): | |
"""Test ProcessingResultDto""" | |
print("\nTesting ProcessingResultDto...") | |
# Test successful result | |
try: | |
success_result = ProcessingResultDto.success_result( | |
original_text="Hello world", | |
translated_text="Hola mundo", | |
audio_path="/tmp/output.wav", | |
processing_time=2.5 | |
) | |
print(f"β Valid success result created") | |
print(f" Success: {success_result.success}") | |
print(f" Has text output: {success_result.has_text_output}") | |
print(f" Has audio output: {success_result.has_audio_output}") | |
print(f" Is complete: {success_result.is_complete}") | |
except Exception as e: | |
print(f"β Failed to create success result: {e}") | |
# Test error result | |
try: | |
error_result = ProcessingResultDto.error_result( | |
error_message="TTS generation failed", | |
error_code="TTS_ERROR", | |
processing_time=1.0 | |
) | |
print(f"β Valid error result created") | |
print(f" Success: {error_result.success}") | |
print(f" Error message: {error_result.error_message}") | |
print(f" Error code: {error_result.error_code}") | |
except Exception as e: | |
print(f"β Failed to create error result: {e}") | |
# Test invalid success result (no outputs) | |
try: | |
ProcessingResultDto(success=True) # No outputs provided | |
print("β Should have failed with no outputs for success") | |
except ValueError as e: | |
print(f"β Correctly rejected success result with no outputs: {e}") | |
# Test invalid error result (no error message) | |
try: | |
ProcessingResultDto(success=False) # No error message | |
print("β Should have failed with no error message for failure") | |
except ValueError as e: | |
print(f"β Correctly rejected error result with no message: {e}") | |
def test_dto_serialization(): | |
"""Test DTO serialization/deserialization""" | |
print("\nTesting DTO serialization...") | |
# Test ProcessingResultDto serialization | |
try: | |
original_result = ProcessingResultDto.success_result( | |
original_text="Test text", | |
translated_text="Texto de prueba", | |
audio_path="/tmp/test.wav", | |
processing_time=1.5 | |
) | |
# Convert to dict and back | |
result_dict = original_result.to_dict() | |
restored_result = ProcessingResultDto.from_dict(result_dict) | |
print(f"β ProcessingResultDto serialization successful") | |
print(f" Original success: {original_result.success}") | |
print(f" Restored success: {restored_result.success}") | |
print(f" Original text matches: {original_result.original_text == restored_result.original_text}") | |
except Exception as e: | |
print(f"β ProcessingResultDto serialization failed: {e}") | |
if __name__ == "__main__": | |
test_audio_upload_dto() | |
test_processing_request_dto() | |
test_processing_result_dto() | |
test_dto_serialization() | |
print("\nDTO testing completed!") |