feat: add main entry-point with asyncio event loop

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-06 20:29:45 +02:00
parent 70d2b6d6e4
commit 3a0f70da0b
2 changed files with 140 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
from unittest.mock import AsyncMock, MagicMock, patch
import numpy as np
import pytest
from whisper_local.__main__ import App
class TestApp:
@patch("whisper_local.__main__.Transcriber")
@patch("whisper_local.__main__.HotkeyListener")
def test_app_init(self, mock_hotkey_class, mock_transcriber_class):
app = App()
assert app.recorder is not None
assert app.inserter is not None
mock_transcriber_class.assert_called_once()
mock_hotkey_class.assert_called_once()
@patch("whisper_local.__main__.Transcriber")
@patch("whisper_local.__main__.HotkeyListener")
def test_on_press_starts_recording(self, mock_hotkey_class, mock_transcriber_class):
app = App()
app.recorder = MagicMock()
import asyncio
asyncio.run(app.on_press())
app.recorder.start.assert_called_once()
@patch("whisper_local.__main__.Transcriber")
@patch("whisper_local.__main__.HotkeyListener")
def test_on_release_stops_and_transcribes(self, mock_hotkey_class, mock_transcriber_class):
mock_transcriber = MagicMock()
mock_transcriber.transcribe.return_value = "Hallo"
mock_transcriber_class.return_value = mock_transcriber
app = App()
app.recorder = MagicMock()
audio = np.zeros(16000, dtype=np.float32)
app.recorder.stop.return_value = audio
app.inserter = MagicMock()
app.inserter.insert = AsyncMock()
import asyncio
asyncio.run(app.on_release())
app.recorder.stop.assert_called_once()
mock_transcriber.transcribe.assert_called_once_with(audio)
app.inserter.insert.assert_awaited_once_with("Hallo")
@patch("whisper_local.__main__.Transcriber")
@patch("whisper_local.__main__.HotkeyListener")
def test_on_release_no_audio_skips(self, mock_hotkey_class, mock_transcriber_class):
mock_transcriber = MagicMock()
mock_transcriber_class.return_value = mock_transcriber
app = App()
app.recorder = MagicMock()
app.recorder.stop.return_value = None
app.inserter = MagicMock()
app.inserter.insert = AsyncMock()
import asyncio
asyncio.run(app.on_release())
mock_transcriber.transcribe.assert_not_called()
app.inserter.insert.assert_not_awaited()