Co-authored-by: Quentin Torroba <quentin.torroba@mistral.ai>
Co-authored-by: Clement Sirieix <clem.sirieix@gmail.com>
Co-authored-by: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai>
Co-authored-by: Simon Van de Kerckhove <simon.vandekerckhove@mistral.ai>
Co-authored-by: Vincent Guilloux <vincent.guilloux@mistral.ai>
Co-authored-by: Michel Thomazo <michel.thomazo@mistral.ai>
Co-authored-by: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
Mathias Gesbert 2026-03-16 17:51:47 +01:00 committed by GitHub
parent 9421fbc08e
commit 5103019b01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
104 changed files with 7277 additions and 691 deletions

View file

@ -0,0 +1,148 @@
from __future__ import annotations
from textual.pilot import Pilot
from tests.mock.utils import mock_llm_chunk
from tests.snapshots.base_snapshot_test_app import BaseSnapshotTestApp
from tests.snapshots.snap_compare import SnapCompare
from tests.stubs.fake_backend import FakeBackend
from tests.stubs.fake_voice_manager import FakeVoiceManager
from vibe.cli.textual_ui.widgets.chat_input.body import ChatInputBody
class VoiceEnableApp(BaseSnapshotTestApp):
def __init__(self) -> None:
super().__init__(voice_manager=FakeVoiceManager(is_voice_ready=False))
class VoiceDisableApp(BaseSnapshotTestApp):
def __init__(self) -> None:
super().__init__(voice_manager=FakeVoiceManager(is_voice_ready=True))
class RecordingActiveApp(BaseSnapshotTestApp):
"""Voice enabled — used for recording snapshot tests."""
def __init__(self) -> None:
super().__init__(voice_manager=FakeVoiceManager(is_voice_ready=True))
class VoiceDisabledRecordingAttemptApp(BaseSnapshotTestApp):
"""Voice disabled — ctrl+r should be ignored."""
def __init__(self) -> None:
super().__init__(voice_manager=FakeVoiceManager(is_voice_ready=False))
class RecordingThenConversationApp(BaseSnapshotTestApp):
"""Voice enabled + FakeBackend that returns an LLM response."""
def __init__(self) -> None:
fake_backend = FakeBackend(mock_llm_chunk(content="I'm ready to help you."))
super().__init__(
voice_manager=FakeVoiceManager(is_voice_ready=True), backend=fake_backend
)
def test_snapshot_voice_enable(snap_compare: SnapCompare) -> None:
async def run_before(pilot: Pilot) -> None:
await pilot.press(*"/voice")
await pilot.press("enter")
await pilot.pause(0.4)
assert snap_compare(
"test_ui_snapshot_voice_mode.py:VoiceEnableApp",
terminal_size=(120, 36),
run_before=run_before,
)
def test_snapshot_voice_disable(snap_compare: SnapCompare) -> None:
async def run_before(pilot: Pilot) -> None:
await pilot.press(*"/voice")
await pilot.press("enter")
await pilot.pause(0.4)
assert snap_compare(
"test_ui_snapshot_voice_mode.py:VoiceDisableApp",
terminal_size=(120, 36),
run_before=run_before,
)
def test_snapshot_recording_indicator_shown(snap_compare: SnapCompare) -> None:
async def run_before(pilot: Pilot) -> None:
await pilot.press(*"hello")
await pilot.pause(0.2)
await pilot.press("ctrl+r")
await pilot.pause(0.5)
assert snap_compare(
"test_ui_snapshot_voice_mode.py:RecordingActiveApp",
terminal_size=(120, 36),
run_before=run_before,
)
def test_snapshot_recording_stopped_after_keypress(snap_compare: SnapCompare) -> None:
async def run_before(pilot: Pilot) -> None:
await pilot.press(*"hello")
await pilot.pause(0.2)
await pilot.press("ctrl+r")
await pilot.pause(0.5)
await pilot.press("a")
await pilot.pause(0.5)
assert snap_compare(
"test_ui_snapshot_voice_mode.py:RecordingActiveApp",
terminal_size=(120, 36),
run_before=run_before,
)
def test_snapshot_recording_not_started_when_voice_disabled(
snap_compare: SnapCompare,
) -> None:
async def run_before(pilot: Pilot) -> None:
await pilot.press(*"hello")
await pilot.pause(0.2)
await pilot.press("ctrl+r")
await pilot.pause(0.5)
assert snap_compare(
"test_ui_snapshot_voice_mode.py:VoiceDisabledRecordingAttemptApp",
terminal_size=(120, 36),
run_before=run_before,
)
def test_snapshot_recording_then_conversation(snap_compare: SnapCompare) -> None:
async def run_before(pilot: Pilot) -> None:
await pilot.press(*"hello")
await pilot.pause(0.2)
await pilot.press("ctrl+r")
await pilot.pause(0.5)
await pilot.press("a")
await pilot.pause(0.5)
await pilot.press("enter")
await pilot.pause(0.4)
assert snap_compare(
"test_ui_snapshot_voice_mode.py:RecordingThenConversationApp",
terminal_size=(120, 36),
run_before=run_before,
)
def test_snapshot_transcription_populates_text_area(snap_compare: SnapCompare) -> None:
async def run_before(pilot: Pilot) -> None:
await pilot.press("ctrl+r")
await pilot.pause(0.3)
pilot.app.query_one(ChatInputBody).on_transcribe_text("Hello world from voice")
await pilot.pause(0.3)
assert snap_compare(
"test_ui_snapshot_voice_mode.py:RecordingActiveApp",
terminal_size=(120, 36),
run_before=run_before,
)