This commit is contained in:
170
local-llm-prompt-manager/tests/test_storage.py
Normal file
170
local-llm-prompt-manager/tests/test_storage.py
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
"""Tests for storage layer."""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
from src.models import Prompt
|
||||||
|
from src.storage import ConfigManager, PromptStorage
|
||||||
|
|
||||||
|
|
||||||
|
class TestPromptStorage:
|
||||||
|
"""Test cases for PromptStorage."""
|
||||||
|
|
||||||
|
def setup_method(self):
|
||||||
|
"""Set up test fixtures."""
|
||||||
|
self.temp_dir = tempfile.mkdtemp()
|
||||||
|
self.storage = PromptStorage(self.temp_dir)
|
||||||
|
|
||||||
|
def teardown_method(self):
|
||||||
|
"""Clean up test fixtures."""
|
||||||
|
import shutil
|
||||||
|
shutil.rmtree(self.temp_dir, ignore_errors=True)
|
||||||
|
|
||||||
|
def test_save_and_get_prompt(self):
|
||||||
|
"""Test saving and retrieving a prompt."""
|
||||||
|
prompt = Prompt(
|
||||||
|
name="test-prompt",
|
||||||
|
template="Hello {{ name }}"
|
||||||
|
)
|
||||||
|
self.storage.save_prompt(prompt)
|
||||||
|
|
||||||
|
retrieved = self.storage.get_prompt("test-prompt")
|
||||||
|
assert retrieved is not None
|
||||||
|
assert retrieved.name == "test-prompt"
|
||||||
|
assert retrieved.template == "Hello {{ name }}"
|
||||||
|
|
||||||
|
def test_list_prompts(self):
|
||||||
|
"""Test listing prompts."""
|
||||||
|
prompt1 = Prompt(name="prompt-1", template="Template 1")
|
||||||
|
prompt2 = Prompt(name="prompt-2", template="Template 2")
|
||||||
|
|
||||||
|
self.storage.save_prompt(prompt1)
|
||||||
|
self.storage.save_prompt(prompt2)
|
||||||
|
|
||||||
|
prompts = self.storage.list_prompts()
|
||||||
|
assert len(prompts) == 2
|
||||||
|
assert "prompt-1" in prompts
|
||||||
|
assert "prompt-2" in prompts
|
||||||
|
|
||||||
|
def test_delete_prompt(self):
|
||||||
|
"""Test deleting a prompt."""
|
||||||
|
prompt = Prompt(name="test-prompt", template="Template")
|
||||||
|
self.storage.save_prompt(prompt)
|
||||||
|
|
||||||
|
result = self.storage.delete_prompt("test-prompt")
|
||||||
|
assert result is True
|
||||||
|
|
||||||
|
retrieved = self.storage.get_prompt("test-prompt")
|
||||||
|
assert retrieved is None
|
||||||
|
|
||||||
|
def test_prompt_exists(self):
|
||||||
|
"""Test checking if prompt exists."""
|
||||||
|
prompt = Prompt(name="test-prompt", template="Template")
|
||||||
|
self.storage.save_prompt(prompt)
|
||||||
|
|
||||||
|
assert self.storage.prompt_exists("test-prompt") is True
|
||||||
|
assert self.storage.prompt_exists("non-existent") is False
|
||||||
|
|
||||||
|
def test_add_tag_to_prompt(self):
|
||||||
|
"""Test adding tag to prompt."""
|
||||||
|
prompt = Prompt(name="test-prompt", template="Template")
|
||||||
|
self.storage.save_prompt(prompt)
|
||||||
|
|
||||||
|
self.storage.add_tag_to_prompt("test-prompt", "test-tag")
|
||||||
|
|
||||||
|
tag = self.storage.get_tag("test-tag")
|
||||||
|
assert tag is not None
|
||||||
|
assert "test-prompt" in tag.prompts
|
||||||
|
|
||||||
|
def test_remove_tag_from_prompt(self):
|
||||||
|
"""Test removing tag from prompt."""
|
||||||
|
prompt = Prompt(name="test-prompt", template="Template", tags=["test-tag"])
|
||||||
|
self.storage.save_prompt(prompt)
|
||||||
|
self.storage.add_tag_to_prompt("test-prompt", "test-tag")
|
||||||
|
|
||||||
|
result = self.storage.remove_tag_from_prompt("test-prompt", "test-tag")
|
||||||
|
assert result is True
|
||||||
|
|
||||||
|
tag = self.storage.get_tag("test-tag")
|
||||||
|
assert tag is None or "test-prompt" not in tag.prompts
|
||||||
|
|
||||||
|
def test_search_prompts_by_name(self):
|
||||||
|
"""Test searching prompts by name."""
|
||||||
|
prompt1 = Prompt(name="search-test", template="Template 1")
|
||||||
|
prompt2 = Prompt(name="other-prompt", template="Template 2")
|
||||||
|
|
||||||
|
self.storage.save_prompt(prompt1)
|
||||||
|
self.storage.save_prompt(prompt2)
|
||||||
|
|
||||||
|
results = self.storage.search_prompts(name="search")
|
||||||
|
assert len(results) == 1
|
||||||
|
assert results[0].name == "search-test"
|
||||||
|
|
||||||
|
def test_search_prompts_by_content(self):
|
||||||
|
"""Test searching prompts by content."""
|
||||||
|
prompt1 = Prompt(name="prompt-1", template="Hello world")
|
||||||
|
prompt2 = Prompt(name="prompt-2", template="Goodbye world")
|
||||||
|
|
||||||
|
self.storage.save_prompt(prompt1)
|
||||||
|
self.storage.save_prompt(prompt2)
|
||||||
|
|
||||||
|
results = self.storage.search_prompts(content="Hello")
|
||||||
|
assert len(results) == 1
|
||||||
|
assert results[0].name == "prompt-1"
|
||||||
|
|
||||||
|
def test_get_prompts_by_tag(self):
|
||||||
|
"""Test getting prompts by tag."""
|
||||||
|
prompt1 = Prompt(name="prompt-1", template="Template 1", tags=["docs"])
|
||||||
|
prompt2 = Prompt(name="prompt-2", template="Template 2", tags=["other"])
|
||||||
|
|
||||||
|
self.storage.save_prompt(prompt1)
|
||||||
|
self.storage.save_prompt(prompt2)
|
||||||
|
self.storage.add_tag_to_prompt("prompt-1", "docs")
|
||||||
|
|
||||||
|
results = self.storage.get_prompts_by_tag("docs")
|
||||||
|
assert len(results) == 1
|
||||||
|
assert results[0].name == "prompt-1"
|
||||||
|
|
||||||
|
|
||||||
|
class TestConfigManager:
|
||||||
|
"""Test cases for ConfigManager."""
|
||||||
|
|
||||||
|
def setup_method(self):
|
||||||
|
"""Set up test fixtures."""
|
||||||
|
self.temp_file = tempfile.mktemp(suffix=".yaml")
|
||||||
|
self.manager = ConfigManager(self.temp_file)
|
||||||
|
|
||||||
|
def teardown_method(self):
|
||||||
|
"""Clean up test fixtures."""
|
||||||
|
if os.path.exists(self.temp_file):
|
||||||
|
os.unlink(self.temp_file)
|
||||||
|
|
||||||
|
def test_load_default_config(self):
|
||||||
|
"""Test loading default configuration."""
|
||||||
|
config = self.manager.load()
|
||||||
|
assert config.ollama_url == "http://localhost:11434"
|
||||||
|
assert config.default_model == "llama3.2"
|
||||||
|
|
||||||
|
def test_save_and_load_config(self):
|
||||||
|
"""Test saving and loading configuration."""
|
||||||
|
from src.models import Config
|
||||||
|
config = Config()
|
||||||
|
config.ollama_url = "http://custom:9000"
|
||||||
|
config.default_model = "custom-model"
|
||||||
|
|
||||||
|
self.manager.save(config)
|
||||||
|
loaded = self.manager.load()
|
||||||
|
|
||||||
|
assert loaded.ollama_url == "http://custom:9000"
|
||||||
|
assert loaded.default_model == "custom-model"
|
||||||
|
|
||||||
|
def test_set_config_value(self):
|
||||||
|
"""Test setting a configuration value."""
|
||||||
|
self.manager.set("default_model", "new-model")
|
||||||
|
config = self.manager.load()
|
||||||
|
assert config.default_model == "new-model"
|
||||||
|
|
||||||
|
def test_get_config_value(self):
|
||||||
|
"""Test getting a configuration value."""
|
||||||
|
value = self.manager.get("default_model")
|
||||||
|
assert value == "llama3.2"
|
||||||
Reference in New Issue
Block a user