From f8a1719f8e094f58520ba4216a21155c30992252 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sat, 31 Jan 2026 05:31:24 +0000 Subject: [PATCH] Initial upload: shell-speak CLI tool with natural language to shell command conversion --- tests/test_interactive.py | 106 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tests/test_interactive.py diff --git a/tests/test_interactive.py b/tests/test_interactive.py new file mode 100644 index 0000000..e636d93 --- /dev/null +++ b/tests/test_interactive.py @@ -0,0 +1,106 @@ +"""Tests for interactive mode.""" + +import os +import sys +import tempfile +from pathlib import Path +from unittest.mock import patch, MagicMock + +import pytest + +sys.path.insert(0, str(Path(__file__).parent.parent)) + + +@pytest.fixture +def setup_test_env(tmp_path, sample_docker_yaml, sample_git_yaml): + """Set up test environment.""" + docker_file = tmp_path / "docker.yaml" + docker_file.write_text(sample_docker_yaml) + + git_file = tmp_path / "git.yaml" + git_file.write_text(sample_git_yaml) + + os.environ["SHELL_SPEAK_DATA_DIR"] = str(tmp_path) + os.environ["SHELL_SPEAK_HISTORY_FILE"] = str(tmp_path / "history.json") + os.environ["SHELL_SPEAK_CORRECTIONS_FILE"] = str(tmp_path / "corrections.json") + + +class TestInteractiveSession: + """Tests for interactive session functionality.""" + + def test_session_prompt(self): + """Test that session prompt is created.""" + from shell_speak.interactive import ShellSpeakCompleter + + completer = ShellSpeakCompleter() + assert completer is not None + + def test_key_bindings(self): + """Test key bindings creation.""" + from shell_speak.interactive import create_key_bindings + + kb = create_key_bindings() + assert kb is not None + + def test_detect_tool_docker(self): + """Test tool detection for docker.""" + from shell_speak.interactive import _detect_tool + + tool = _detect_tool("list running containers") + assert tool == "docker" + + def test_detect_tool_git(self): + """Test tool detection for git.""" + from shell_speak.interactive import _detect_tool + + tool = _detect_tool("commit changes with message") + assert tool == "git" + + def test_detect_tool_kubectl(self): + """Test tool detection for kubectl.""" + from shell_speak.interactive import _detect_tool + + tool = _detect_tool("get pods in namespace default") + assert tool == "kubectl" + + def test_detect_tool_unknown(self): + """Test tool detection for unknown query.""" + from shell_speak.interactive import _detect_tool + + tool = _detect_tool("random query that matches nothing") + assert tool is None + + +class TestInteractiveHelp: + """Tests for interactive help.""" + + def test_help_display(self): + """Test help message display.""" + from shell_speak.interactive import _show_interactive_help + from shell_speak.output import console + + with patch.object(console, 'print') as mock_print: + _show_interactive_help() + assert mock_print.called + + +class TestProcessQuery: + """Tests for query processing.""" + + def test_process_query_success(self, setup_test_env): + """Test successful query processing.""" + from shell_speak.interactive import _process_query + from shell_speak.matcher import get_matcher + + matcher = get_matcher() + match = _process_query("list running containers", "docker") + + if match: + assert "docker" in match.command.lower() + + def test_process_query_failure(self, setup_test_env): + """Test failed query processing.""" + from shell_speak.interactive import _process_query + + match = _process_query("xyz unknown query xyz", None) + assert match is None