Initial upload: shell-speak CLI tool with natural language to shell command conversion
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-01-31 05:31:24 +00:00
parent ce0ca2388e
commit f8a1719f8e

106
tests/test_interactive.py Normal file
View File

@@ -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