From 0bf7cbbca595be6caf9a2cc668c20e5b26720f24 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 5 Feb 2026 20:56:26 +0000 Subject: [PATCH] Initial upload: Local LLM Prompt Manager CLI tool --- tests/test_storage.py | 172 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 tests/test_storage.py diff --git a/tests/test_storage.py b/tests/test_storage.py new file mode 100644 index 0000000..799fb78 --- /dev/null +++ b/tests/test_storage.py @@ -0,0 +1,172 @@ +"""Tests for storage layer.""" + +import pytest +import tempfile +import os +from pathlib import Path + +from src.storage import PromptStorage, ConfigManager +from src.models import Prompt + + +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"