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

This commit is contained in:
2026-01-31 05:31:22 +00:00
parent 30114c4f6c
commit 1374a4fde1

View File

@@ -0,0 +1,129 @@
"""Tests for command library loader."""
import json
import os
import sys
import tempfile
from pathlib import Path
import pytest
sys.path.insert(0, str(Path(__file__).parent.parent))
class TestCommandLibraryLoader:
"""Tests for CommandLibraryLoader class."""
@pytest.fixture(autouse=True)
def setup(self, tmp_path, sample_docker_yaml, sample_git_yaml):
self.test_dir = tmp_path
docker_file = self.test_dir / "docker.yaml"
docker_file.write_text(sample_docker_yaml)
git_file = self.test_dir / "git.yaml"
git_file.write_text(sample_git_yaml)
os.environ["SHELL_SPEAK_DATA_DIR"] = str(self.test_dir)
def test_load_docker_library(self):
from shell_speak.library import get_loader
loader = get_loader()
loader._loaded = False
loader.load_library("docker")
patterns = loader.get_patterns()
assert len(patterns) > 0
assert any(p.tool == "docker" for p in patterns)
def test_load_git_library(self):
from shell_speak.library import get_loader
loader = get_loader()
loader._loaded = False
loader.load_library("git")
patterns = loader.get_patterns()
assert len(patterns) > 0
assert any(p.tool == "git" for p in patterns)
def test_load_all_libraries(self):
from shell_speak.library import get_loader
loader = get_loader()
loader._loaded = False
loader.load_library()
patterns = loader.get_patterns()
docker_patterns = [p for p in patterns if p.tool == "docker"]
git_patterns = [p for p in patterns if p.tool == "git"]
assert len(docker_patterns) > 0
assert len(git_patterns) > 0
def test_pattern_structure(self):
from shell_speak.library import get_loader
loader = get_loader()
loader._loaded = False
loader.load_library("docker")
patterns = loader.get_patterns()
if patterns:
pattern = patterns[0]
assert hasattr(pattern, "name")
assert hasattr(pattern, "tool")
assert hasattr(pattern, "template")
assert hasattr(pattern, "patterns")
def test_corrections(self, tmp_path, sample_corrections_json):
from shell_speak.library import get_loader
corrections_file = tmp_path / "corrections.json"
corrections_file.write_text(json.dumps(sample_corrections_json))
os.environ["SHELL_SPEAK_DATA_DIR"] = str(tmp_path)
loader = get_loader()
loader._loaded = False
loader.load_library()
corrections = loader.get_corrections()
assert "custom:my custom query" in corrections
assert corrections["custom:my custom query"] == "echo custom command"
def test_add_correction(self):
from shell_speak.library import get_loader
loader = get_loader()
loader._loaded = False
loader.load_library()
loader.add_correction("new query", "echo new", "unix")
corrections = loader.get_corrections()
assert "unix:new query" in corrections
def test_remove_correction(self):
from shell_speak.library import get_loader
loader = get_loader()
loader._loaded = False
loader.load_library()
loader.add_correction("test query", "echo test", "unix")
loader.remove_correction("test query", "unix")
corrections = loader.get_corrections()
assert "unix:test query" not in corrections
def test_reload(self):
from shell_speak.library import get_loader
loader = get_loader()
loader.load_library()
initial_count = len(loader.get_patterns())
loader.reload()
reload_count = len(loader.get_patterns())
assert initial_count == reload_count