import os import tempfile import subprocess import json from flask import Flask from werkzeug.utils import secure_filename # Test that our updated kokoro TTS wrapper works correctly def test_speaker_parsing(): """Test that speaker text parsing works correctly""" with open("test.txt", "r") as f: text = f.read() from app import parse_speaker_text # Issue #4: parse_speaker_text returns (speakers, tracks) tuple speakers, tracks = parse_speaker_text(text) # Should have 2 speakers assert len(speakers) == 2, f"Expected 2 speakers, got {len(speakers)}" # Check that Alex and Jamie are present assert "Alex" in speakers, "Alex should be a speaker" assert "Jamie" in speakers, "Jamie should be a speaker" # Check that both have content assert speakers["Alex"], "Alex should have content" assert speakers["Jamie"], "Jamie should have content" print("OK: Speaker parsing test passed") def test_voice_assignment(): """Test that voice assignment works correctly""" from app import parse_speaker_text, assign_voices_to_speakers with open("test.txt", "r") as f: text = f.read() # Issue #14: Unpack tuple properly - parse_speaker_text returns (speakers, tracks) speakers, tracks = parse_speaker_text(text) speaker_voice_map = assign_voices_to_speakers(speakers) # Should have assignments for both speakers assert len(speaker_voice_map) == 2, ( f"Expected 2 voice assignments, got {len(speaker_voice_map)}" ) # Both should have assigned voices for speaker, voice in speaker_voice_map.items(): assert voice in ["bm_fable", "bm_lewis", "bm_george"], ( f"Invalid voice {voice} for {speaker}" ) print("OK: Voice assignment test passed") def test_full_integration(): """Test that the full integration works with a simple example""" from app import generate_wav_files, parse_speaker_text, assign_voices_to_speakers test_text = """Alex: Hello world Jamie: This is a test""" # Issue #4/#14: Unpack tuple properly speakers, tracks = parse_speaker_text(test_text) speaker_voice_map = assign_voices_to_speakers(speakers) with tempfile.TemporaryDirectory() as tmpdir: original_output_dir = os.environ.get("OUTPUT_DIR", "output") os.environ["OUTPUT_DIR"] = tmpdir try: # Issue #5: Pass all 4 required args (speakers, speaker_voice_map, title, tracks) wav_files = generate_wav_files( speakers, speaker_voice_map, "test_integration", tracks ) if wav_files: print("OK: Integration test passed - WAV files generated") else: print("WARN: Integration test - No files generated (but no error)") finally: os.environ["OUTPUT_DIR"] = original_output_dir print("OK: Full integration test completed") if __name__ == "__main__": test_speaker_parsing() test_voice_assignment() test_full_integration() print("\nAll tests passed!")