"""Tests for data models.""" import pytest from datetime import datetime from src.models import Prompt, Tag, Config class TestPrompt: """Test cases for Prompt model.""" def test_prompt_creation(self): """Test basic prompt creation.""" prompt = Prompt( name="test-prompt", template="Hello {{ name }}", description="A test prompt" ) assert prompt.name == "test-prompt" assert prompt.template == "Hello {{ name }}" assert prompt.description == "A test prompt" assert prompt.tags == [] assert prompt.variables == [] def test_prompt_with_tags(self): """Test prompt with tags.""" prompt = Prompt( name="test-prompt", template="Hello {{ name }}", tags=["greeting", "test"] ) assert prompt.tags == ["greeting", "test"] def test_prompt_with_variables(self): """Test prompt with variables.""" variables = [ {"name": "name", "description": "Name to greet", "required": True} ] prompt = Prompt( name="test-prompt", template="Hello {{ name }}", variables=variables ) assert len(prompt.variables) == 1 assert prompt.variables[0]["name"] == "name" def test_prompt_to_dict(self): """Test prompt serialization to dictionary.""" prompt = Prompt( name="test-prompt", template="Hello {{ name }}" ) data = prompt.to_dict() assert data["name"] == "test-prompt" assert data["template"] == "Hello {{ name }}" assert "created_at" in data assert "updated_at" in data def test_prompt_from_dict(self): """Test prompt deserialization from dictionary.""" data = { "name": "test-prompt", "template": "Hello {{ name }}", "description": "A test", "tags": ["test"], "variables": [] } prompt = Prompt.from_dict(data) assert prompt.name == "test-prompt" assert prompt.template == "Hello {{ name }}" assert prompt.tags == ["test"] def test_get_required_variables(self): """Test extracting required variables.""" variables = [ {"name": "required_var", "required": True}, {"name": "optional_var", "required": False} ] prompt = Prompt( name="test-prompt", template="Hello {{ required_var }} {{ optional_var }}", variables=variables ) required = prompt.get_required_variables() assert "required_var" in required assert "optional_var" not in required class TestTag: """Test cases for Tag model.""" def test_tag_creation(self): """Test basic tag creation.""" tag = Tag(name="test", prompts=["prompt1", "prompt2"]) assert tag.name == "test" assert len(tag.prompts) == 2 def test_tag_to_dict(self): """Test tag serialization.""" tag = Tag(name="test", prompts=["prompt1"]) data = tag.to_dict() assert data["name"] == "test" assert data["prompts"] == ["prompt1"] def test_tag_from_dict(self): """Test tag deserialization.""" data = {"name": "test", "prompts": ["prompt1", "prompt2"]} tag = Tag.from_dict(data) assert tag.name == "test" assert len(tag.prompts) == 2 class TestConfig: """Test cases for Config model.""" def test_config_defaults(self): """Test configuration defaults.""" config = Config() assert config.prompt_dir == "~/.config/llm-prompt-manager/prompts" assert config.ollama_url == "http://localhost:11434" assert config.lmstudio_url == "http://localhost:1234" assert config.default_model == "llama3.2" def test_config_to_dict(self): """Test config serialization.""" config = Config() data = config.to_dict() assert "ollama_url" in data assert "lmstudio_url" in data def test_config_from_dict(self): """Test config deserialization.""" data = { "ollama_url": "http://custom:9000", "default_model": "custom-model" } config = Config.from_dict(data) assert config.ollama_url == "http://custom:9000" assert config.default_model == "custom-model"