v2.3.0 (#429)
Co-authored-by: Carlo <carloantonio.patti@mistral.ai> Co-authored-by: Mathias Gesbert <mathias.gesbert@mistral.ai> Co-authored-by: Clement Sirieix <clem.sirieix@gmail.com> Co-authored-by: Michel Thomazo <michel.thomazo@mistral.ai> Co-authored-by: Clément Drouin <clement.drouin@mistral.ai> Co-authored-by: Vincent Guilloux <vincent.guilloux@mistral.ai> Co-authored-by: Thomas Kenbeek <thomas.kenbeek@mistral.ai> Co-authored-by: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
parent
a560a47ce8
commit
5d2e01a6d7
139 changed files with 7152 additions and 1457 deletions
109
tests/cli/test_switching_mode.py
Normal file
109
tests/cli/test_switching_mode.py
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from tests.conftest import build_test_vibe_app
|
||||
from vibe.cli.textual_ui.widgets.chat_input import ChatInputContainer
|
||||
from vibe.cli.textual_ui.widgets.chat_input.body import ChatInputBody, _PromptSpinner
|
||||
from vibe.cli.textual_ui.widgets.messages import UserMessage
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_submit_ignored_while_switching_mode() -> None:
|
||||
"""Enter press during mode switch must not clear input or send a message."""
|
||||
app = build_test_vibe_app()
|
||||
async with app.run_test() as pilot:
|
||||
await pilot.pause(0.1)
|
||||
|
||||
body = app.query_one(ChatInputBody)
|
||||
body.switching_mode = True
|
||||
await pilot.pause(0.1)
|
||||
|
||||
# Type some text and press enter
|
||||
app.query_one(ChatInputContainer).value = "hello world"
|
||||
await pilot.press("enter")
|
||||
await pilot.pause(0.1)
|
||||
|
||||
# Text must remain in the input
|
||||
assert app.query_one(ChatInputContainer).value == "hello world"
|
||||
# No user message should have been posted
|
||||
assert len(app.query(UserMessage)) == 0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_submit_works_after_switching_mode_ends() -> None:
|
||||
"""After switching_mode is set back to False, Enter should work normally."""
|
||||
app = build_test_vibe_app()
|
||||
async with app.run_test() as pilot:
|
||||
await pilot.pause(0.1)
|
||||
|
||||
body = app.query_one(ChatInputBody)
|
||||
|
||||
# Enable then disable switching mode
|
||||
body.switching_mode = True
|
||||
await pilot.pause(0.1)
|
||||
body.switching_mode = False
|
||||
await pilot.pause(0.1)
|
||||
|
||||
# Now submit should work
|
||||
app.query_one(ChatInputContainer).value = "hello"
|
||||
await pilot.press("enter")
|
||||
await pilot.pause(0.1)
|
||||
|
||||
assert app.query_one(ChatInputContainer).value == ""
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_spinner_shown_while_switching_mode() -> None:
|
||||
"""Prompt widget is hidden and spinner is mounted when switching_mode is True."""
|
||||
app = build_test_vibe_app()
|
||||
async with app.run_test() as pilot:
|
||||
await pilot.pause(0.1)
|
||||
|
||||
body = app.query_one(ChatInputBody)
|
||||
prompt = body.prompt_widget
|
||||
assert prompt is not None
|
||||
assert prompt.display is True
|
||||
assert len(body.query(_PromptSpinner)) == 0
|
||||
|
||||
body.switching_mode = True
|
||||
await pilot.pause(0.1)
|
||||
|
||||
assert prompt.display is False
|
||||
assert len(body.query(_PromptSpinner)) == 1
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_spinner_removed_after_switching_mode_ends() -> None:
|
||||
"""Prompt is restored and spinner removed when switching_mode becomes False."""
|
||||
app = build_test_vibe_app()
|
||||
async with app.run_test() as pilot:
|
||||
await pilot.pause(0.1)
|
||||
|
||||
body = app.query_one(ChatInputBody)
|
||||
body.switching_mode = True
|
||||
await pilot.pause(0.1)
|
||||
body.switching_mode = False
|
||||
await pilot.pause(0.1)
|
||||
|
||||
assert body.prompt_widget is not None
|
||||
assert body.prompt_widget.display is True
|
||||
assert len(body.query(_PromptSpinner)) == 0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_rapid_switching_mode_no_duplicate_spinners() -> None:
|
||||
"""Rapidly toggling switching_mode must never produce duplicate spinners."""
|
||||
app = build_test_vibe_app()
|
||||
async with app.run_test() as pilot:
|
||||
await pilot.pause(0.1)
|
||||
|
||||
body = app.query_one(ChatInputBody)
|
||||
|
||||
# Rapidly toggle several times
|
||||
for _ in range(5):
|
||||
body.switching_mode = True
|
||||
body.switching_mode = True # double set
|
||||
await pilot.pause(0.1)
|
||||
|
||||
assert len(body.query(_PromptSpinner)) == 1
|
||||
Loading…
Add table
Add a link
Reference in a new issue