From 24597a21ae9326025d40cb96a4043e72c7df0ce5 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Fri, 30 Jan 2026 11:56:17 +0000 Subject: [PATCH] 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 --- tests/test_models.py | 128 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 tests/test_models.py diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 0000000..11de0b9 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,128 @@ +"""Tests for data models.""" + +import pytest +from datetime import datetime +import sys +import os +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from shell_memory.models import Command, Pattern, Session, ScriptTemplate + + +class TestCommand: + def test_command_creation(self): + cmd = Command( + command="git status", + description="Check git status", + tags=["git", "vcs"], + ) + assert cmd.command == "git status" + assert cmd.description == "Check git status" + assert cmd.tags == ["git", "vcs"] + assert cmd.usage_count == 0 + assert cmd.created_at is not None + + def test_command_to_dict(self): + cmd = Command( + id=1, + command="ls -la", + description="List files", + tags=["filesystem"], + usage_count=5, + ) + data = cmd.to_dict() + assert data["id"] == 1 + assert data["command"] == "ls -la" + assert data["tags"] == ["filesystem"] + assert data["usage_count"] == 5 + + def test_command_from_dict(self): + data = { + "id": 2, + "command": "pwd", + "description": "Print working directory", + "tags": [], + "usage_count": 10, + } + cmd = Command.from_dict(data) + assert cmd.id == 2 + assert cmd.command == "pwd" + assert cmd.usage_count == 10 + + +class TestPattern: + def test_pattern_creation(self): + pattern = Pattern( + name="Git workflow", + command_ids=[1, 2, 3, 4], + frequency=5, + ) + assert pattern.name == "Git workflow" + assert pattern.command_ids == [1, 2, 3, 4] + assert pattern.frequency == 5 + + def test_pattern_sequence_hash(self): + pattern = Pattern(command_ids=[1, 2, 3]) + hash1 = pattern.sequence_hash() + pattern2 = Pattern(command_ids=[1, 2, 3]) + hash2 = pattern2.sequence_hash() + assert hash1 == hash2 + + pattern3 = Pattern(command_ids=[1, 2, 4]) + hash3 = pattern3.sequence_hash() + assert hash1 != hash3 + + def test_pattern_to_dict(self): + pattern = Pattern( + id=1, + name="Test pattern", + command_ids=[1, 2], + frequency=3, + ) + data = pattern.to_dict() + assert data["id"] == 1 + assert data["name"] == "Test pattern" + assert data["command_ids"] == [1, 2] + + +class TestSession: + def test_session_creation(self): + session = Session( + name="Test session", + commands=[{"command": "ls", "success": True}], + ) + assert session.name == "Test session" + assert len(session.commands) == 1 + + def test_session_to_dict(self): + session = Session( + id=1, + name="My session", + commands=[{"command": "echo test"}], + ) + data = session.to_dict() + assert data["id"] == 1 + assert data["name"] == "My session" + assert data["commands"] == [{"command": "echo test"}] + + +class TestScriptTemplate: + def test_template_creation(self): + template = ScriptTemplate( + keywords=["deploy", "app"], + template="#!/bin/bash\necho deploy", + description="Deploy application", + ) + assert template.keywords == ["deploy", "app"] + assert "deploy" in template.template + + def test_template_to_dict(self): + template = ScriptTemplate( + id=1, + keywords=["test"], + template="pytest", + description="Run tests", + ) + data = template.to_dict() + assert data["id"] == 1 + assert data["keywords"] == ["test"] \ No newline at end of file