"""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"]