Files
whisper-local/tests/test_recorder.py
T

79 lines
2.9 KiB
Python

import numpy as np
import pytest
from unittest.mock import MagicMock, patch
from whisper_local.recorder import Recorder
@pytest.fixture
def recorder():
return Recorder(sample_rate=16000, channels=1, min_duration=0.5)
class TestRecorder:
def test_init(self, recorder):
assert recorder.sample_rate == 16000
assert recorder.channels == 1
assert not recorder.is_recording
def test_start_recording(self, recorder):
with patch("sounddevice.InputStream") as mock_stream_cls:
mock_stream = MagicMock()
mock_stream_cls.return_value = mock_stream
recorder.start()
assert recorder.is_recording
assert len(recorder._chunks) == 0
recorder.stop() # Cleanup
def test_stop_without_start_returns_none(self, recorder):
result = recorder.stop()
assert result is None
def test_add_chunk_and_stop(self, recorder):
with patch("sounddevice.InputStream") as mock_stream_cls:
mock_stream_cls.return_value = MagicMock()
recorder.start()
# Simuliere 1 Sekunde Audio (16000 Samples)
chunk = np.zeros((16000, 1), dtype=np.float32)
recorder._chunks.append(chunk)
result = recorder.stop()
assert result is not None
assert result.shape == (16000,)
assert result.dtype == np.float32
def test_short_audio_returns_none(self, recorder):
with patch("sounddevice.InputStream") as mock_stream_cls:
mock_stream_cls.return_value = MagicMock()
recorder.start()
# Nur 0.1s Audio — unter min_duration
chunk = np.zeros((1600, 1), dtype=np.float32)
recorder._chunks.append(chunk)
result = recorder.stop()
assert result is None
def test_multiple_chunks_concatenated(self, recorder):
with patch("sounddevice.InputStream") as mock_stream_cls:
mock_stream_cls.return_value = MagicMock()
recorder.start()
chunk1 = np.ones((8000, 1), dtype=np.float32)
chunk2 = np.ones((8000, 1), dtype=np.float32) * 0.5
recorder._chunks.extend([chunk1, chunk2])
result = recorder.stop()
assert result is not None
assert result.shape == (16000,)
assert result[0] == 1.0
assert result[8000] == 0.5
def test_device_passed_to_inputstream(self):
recorder = Recorder(sample_rate=16000, channels=1, min_duration=0.0, device="USB Mic")
with patch("sounddevice.InputStream") as mock_cls:
mock_cls.return_value = MagicMock()
recorder.start()
call_kwargs = mock_cls.call_args.kwargs
assert call_kwargs["device"] == "USB Mic"
recorder.stop()
def test_default_device_is_none(self):
recorder = Recorder()
assert recorder.device is None