"""Tests for the Google Gemini TTS provider in tools/tts_tool.py.""" import base64 import struct from unittest.mock import MagicMock, patch import pytest @pytest.fixture(autouse=True) def clean_env(monkeypatch): for key in ( "GEMINI_API_KEY", "GOOGLE_API_KEY", "GEMINI_BASE_URL", "HERMES_SESSION_PLATFORM", ): monkeypatch.delenv(key, raising=False) @pytest.fixture def fake_pcm_bytes(): # 0.1s of silence at 24kHz mono 16-bit = 4800 bytes return b"\x00" * 4800 @pytest.fixture def mock_gemini_response(fake_pcm_bytes): """A successful Gemini generateContent response.""" resp = MagicMock() resp.status_code = 200 resp.json.return_value = { "candidates": [ { "content": { "parts": [ { "inlineData": { "mimeType": "audio/L16;codec=pcm;rate=24000", "data": base64.b64encode(fake_pcm_bytes).decode(), } } ] } } ] } return resp class TestWrapPcmAsWav: def test_riff_header_structure(self): from tools.tts_tool import _wrap_pcm_as_wav pcm = b"\x01\x02\x03\x04" * 10 wav = _wrap_pcm_as_wav(pcm, sample_rate=24000, channels=1, sample_width=2) assert wav[:4] == b"RIFF" assert wav[8:12] == b"WAVE" assert wav[12:16] == b"fmt " # Audio format (PCM=1) assert struct.unpack("