A CLI tool that learns from terminal command patterns to automate repetitive workflows. Features: - Command recording with tags and descriptions - Pattern detection for command sequences - Session recording and replay - Natural language script generation
72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
"""Tests for command library operations."""
|
|
|
|
import pytest
|
|
import tempfile
|
|
import os
|
|
import sys
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from shell_memory.database import Database
|
|
from shell_memory.commands import CommandLibrary
|
|
from shell_memory.models import Command
|
|
|
|
|
|
@pytest.fixture
|
|
def db_with_commands():
|
|
with tempfile.NamedTemporaryFile(suffix=".db", delete=False) as f:
|
|
db_path = f.name
|
|
db = Database(db_path)
|
|
lib = CommandLibrary(db)
|
|
yield db, lib
|
|
os.unlink(db_path)
|
|
|
|
|
|
class TestCommandLibrary:
|
|
def test_add_command(self, db_with_commands):
|
|
db, lib = db_with_commands
|
|
cmd_id = lib.add("git status", "Check repository status", ["git", "vcs"])
|
|
assert cmd_id is not None
|
|
|
|
def test_list_commands(self, db_with_commands):
|
|
db, lib = db_with_commands
|
|
lib.add("cmd1")
|
|
lib.add("cmd2")
|
|
commands = lib.list(limit=10)
|
|
assert len(commands) == 2
|
|
|
|
def test_search_commands(self, db_with_commands):
|
|
db, lib = db_with_commands
|
|
lib.add("git commit", "Commit changes", ["git"])
|
|
lib.add("git push", "Push to remote", ["git"])
|
|
results = lib.search("git")
|
|
assert len(results) >= 2
|
|
|
|
def test_get_command(self, db_with_commands):
|
|
db, lib = db_with_commands
|
|
cmd_id = lib.add("ls -la", "List all files")
|
|
retrieved = lib.get(cmd_id)
|
|
assert retrieved is not None
|
|
assert "ls" in retrieved.command
|
|
|
|
def test_delete_command(self, db_with_commands):
|
|
db, lib = db_with_commands
|
|
cmd_id = lib.add("to_delete")
|
|
result = lib.delete(cmd_id)
|
|
assert result is True
|
|
|
|
def test_increment_usage(self, db_with_commands):
|
|
db, lib = db_with_commands
|
|
cmd_id = lib.add("frequent_cmd")
|
|
lib.increment_usage(cmd_id)
|
|
lib.increment_usage(cmd_id)
|
|
cmd = lib.get(cmd_id)
|
|
assert cmd.usage_count == 2
|
|
|
|
def test_find_similar(self, db_with_commands):
|
|
db, lib = db_with_commands
|
|
lib.add("git status")
|
|
lib.add("git commit")
|
|
lib.add("docker ps")
|
|
similar = lib.find_similar("git statuss", threshold=50)
|
|
assert len(similar) >= 1
|
|
assert any("git" in cmd[0].command for cmd in similar) |