"""Unit tests for `ui_components.py` helpers. These tests avoid any network or Streamlit runtime dependencies. """ import base64 import io from ui_components import ( detect_audio_media_type, ext_for_media_type, infer_download_filename, format_result_for_display, ) def _make_wav_bytes(sample_rate=8000, seconds=1): import wave, struct n = sample_rate * seconds buf = io.BytesIO() with wave.open(buf, "wb") as wf: wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(sample_rate) wf.writeframes(struct.pack(f"<{n}h", *([0] * n))) return buf.getvalue() def test_detect_wav(): wav = _make_wav_bytes() assert detect_audio_media_type(wav) == "audio/wav" def test_detect_ogg(): data = b"OggS" + b"\x00" * 16 assert detect_audio_media_type(data) == "audio/ogg" def test_detect_mp3_by_id3(): data = b"ID3" + b"\x00" * 8 assert detect_audio_media_type(data) == "audio/mpeg" def test_ext_mapping(): assert ext_for_media_type("audio/wav") == ".wav" assert ext_for_media_type("audio/ogg") == ".ogg" assert ext_for_media_type("audio/mpeg") == ".mp3" def test_infer_filename(): assert infer_download_filename("req-123", "audio/wav") == "req-123.wav" def test_format_result_for_display_minimal(): r = {"summary": "S", "word_count": 10} out = format_result_for_display(r) assert out["summary"] == "S" assert out["word_count"] == 10 assert out["transcript"] == ""