Initial commit: Add shell-memory-cli project

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
This commit is contained in:
2026-01-30 11:56:16 +00:00
parent ee8a5128a3
commit a9d89d78e6

72
tests/test_commands.py Normal file
View File

@@ -0,0 +1,72 @@
"""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)