forked from Rockachopa/Timmy-time-dashboard
refactor: break up _record_utterance() into focused helpers (#572)
Co-authored-by: Kimi Agent <kimi@timmy.local> Co-committed-by: Kimi Agent <kimi@timmy.local>
This commit is contained in:
@@ -15,7 +15,7 @@ except ImportError:
|
||||
np = None
|
||||
|
||||
try:
|
||||
from timmy.voice_loop import VoiceConfig, VoiceLoop, _strip_markdown
|
||||
from timmy.voice_loop import VoiceConfig, VoiceLoop, _rms, _strip_markdown
|
||||
except ImportError:
|
||||
pass # pytestmark will skip all tests anyway
|
||||
|
||||
@@ -147,6 +147,31 @@ class TestStripMarkdown:
|
||||
assert "*" not in result
|
||||
|
||||
|
||||
class TestRms:
|
||||
def test_silent_block(self):
|
||||
block = np.zeros(1600, dtype=np.float32)
|
||||
assert _rms(block) == pytest.approx(0.0, abs=1e-7)
|
||||
|
||||
def test_loud_block(self):
|
||||
block = np.ones(1600, dtype=np.float32)
|
||||
assert _rms(block) == pytest.approx(1.0, abs=1e-5)
|
||||
|
||||
|
||||
class TestFinalizeUtterance:
|
||||
def test_returns_none_for_empty(self):
|
||||
assert VoiceLoop._finalize_utterance([], min_blocks=5, sample_rate=16000) is None
|
||||
|
||||
def test_returns_none_for_too_short(self):
|
||||
chunks = [np.zeros(1600, dtype=np.float32) for _ in range(3)]
|
||||
assert VoiceLoop._finalize_utterance(chunks, min_blocks=5, sample_rate=16000) is None
|
||||
|
||||
def test_returns_audio_for_sufficient_chunks(self):
|
||||
chunks = [np.ones(1600, dtype=np.float32) for _ in range(6)]
|
||||
result = VoiceLoop._finalize_utterance(chunks, min_blocks=5, sample_rate=16000)
|
||||
assert result is not None
|
||||
assert len(result) == 6 * 1600
|
||||
|
||||
|
||||
class TestThink:
|
||||
def test_think_returns_response(self):
|
||||
loop = VoiceLoop()
|
||||
|
||||
Reference in New Issue
Block a user