Initial upload: shell-speak CLI tool with natural language to shell command conversion
This commit is contained in:
106
tests/test_interactive.py
Normal file
106
tests/test_interactive.py
Normal 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
|
||||
Reference in New Issue
Block a user