mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-25 21:36:52 +08:00
57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
"""Test for the /settings command functionality."""
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
from prompt_toolkit.input.defaults import create_pipe_input
|
|
from prompt_toolkit.output.defaults import DummyOutput
|
|
|
|
from openhands_cli.agent_chat import run_cli_entry
|
|
from openhands_cli.user_actions import UserConfirmation
|
|
|
|
|
|
@patch('openhands_cli.agent_chat.exit_session_confirmation')
|
|
@patch('openhands_cli.agent_chat.get_session_prompter')
|
|
@patch('openhands_cli.agent_chat.setup_conversation')
|
|
@patch('openhands_cli.agent_chat.verify_agent_exists_or_setup_agent')
|
|
@patch('openhands_cli.agent_chat.ConversationRunner')
|
|
@patch('openhands_cli.agent_chat.SettingsScreen')
|
|
def test_settings_command_works_without_conversation(
|
|
mock_settings_screen_class,
|
|
mock_runner_cls,
|
|
mock_verify_agent,
|
|
mock_setup_conversation,
|
|
mock_get_session_prompter,
|
|
mock_exit_confirm,
|
|
):
|
|
"""Test that /settings command works when no conversation is active (bug fix scenario)."""
|
|
# Auto-accept the exit prompt to avoid interactive UI
|
|
mock_exit_confirm.return_value = UserConfirmation.ACCEPT
|
|
|
|
# Mock agent verification to succeed
|
|
mock_agent = MagicMock()
|
|
mock_verify_agent.return_value = mock_agent
|
|
|
|
# Mock the SettingsScreen instance
|
|
mock_settings_screen = MagicMock()
|
|
mock_settings_screen_class.return_value = mock_settings_screen
|
|
|
|
# No runner initially (simulates starting CLI without a conversation)
|
|
mock_runner_cls.return_value = None
|
|
|
|
# Real session fed by a pipe
|
|
from openhands_cli.user_actions.utils import get_session_prompter as real_get_session_prompter
|
|
with create_pipe_input() as pipe:
|
|
output = DummyOutput()
|
|
session = real_get_session_prompter(input=pipe, output=output)
|
|
mock_get_session_prompter.return_value = session
|
|
|
|
# Trigger /settings, then /exit (exit will be auto-accepted)
|
|
for ch in "/settings\r/exit\r":
|
|
pipe.send_text(ch)
|
|
|
|
run_cli_entry(None)
|
|
|
|
# Assert SettingsScreen was created with None conversation (the bug fix)
|
|
mock_settings_screen_class.assert_called_once_with(None)
|
|
|
|
# Assert display_settings was called (settings screen was shown)
|
|
mock_settings_screen.display_settings.assert_called_once() |