This commit is contained in:
136
local-llm-prompt-manager/tests/test_models.py
Normal file
136
local-llm-prompt-manager/tests/test_models.py
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
"""Tests for data models."""
|
||||||
|
|
||||||
|
from src.models import Config, Prompt, Tag
|
||||||
|
|
||||||
|
|
||||||
|
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"
|
||||||
Reference in New Issue
Block a user