Initial upload: Local LLM Prompt Manager CLI tool
This commit is contained in:
230
tests/test_cli.py
Normal file
230
tests/test_cli.py
Normal file
@@ -0,0 +1,230 @@
|
||||
"""Tests for CLI commands."""
|
||||
|
||||
import pytest
|
||||
import tempfile
|
||||
import os
|
||||
from click.testing import CliRunner
|
||||
|
||||
from src.cli import main
|
||||
|
||||
|
||||
class TestCLIPromptCommands:
|
||||
"""Test cases for prompt CLI commands."""
|
||||
|
||||
def setup_method(self):
|
||||
"""Set up test fixtures."""
|
||||
self.runner = CliRunner()
|
||||
self.temp_dir = tempfile.mkdtemp()
|
||||
|
||||
def teardown_method(self):
|
||||
"""Clean up test fixtures."""
|
||||
import shutil
|
||||
shutil.rmtree(self.temp_dir, ignore_errors=True)
|
||||
|
||||
def test_prompt_create(self):
|
||||
"""Test creating a prompt."""
|
||||
result = self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--description", "A test prompt",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "Created prompt: test-prompt" in result.output
|
||||
|
||||
def test_prompt_create_duplicate(self):
|
||||
"""Test creating duplicate prompt."""
|
||||
self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
result = self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "already exists" in result.output
|
||||
|
||||
def test_prompt_list(self):
|
||||
"""Test listing prompts."""
|
||||
self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
result = self.runner.invoke(main, [
|
||||
"prompt", "list",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "test-prompt" in result.output
|
||||
|
||||
def test_prompt_list_empty(self):
|
||||
"""Test listing prompts when empty."""
|
||||
result = self.runner.invoke(main, [
|
||||
"prompt", "list",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
|
||||
def test_prompt_delete(self):
|
||||
"""Test deleting a prompt."""
|
||||
self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
result = self.runner.invoke(main, [
|
||||
"prompt", "delete", "test-prompt",
|
||||
"--force",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "Deleted prompt" in result.output
|
||||
|
||||
def test_prompt_delete_not_found(self):
|
||||
"""Test deleting non-existent prompt."""
|
||||
result = self.runner.invoke(main, [
|
||||
"prompt", "delete", "non-existent",
|
||||
"--force",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code != 0 or "not found" in result.output
|
||||
|
||||
|
||||
class TestCLITagCommands:
|
||||
"""Test cases for tag CLI commands."""
|
||||
|
||||
def setup_method(self):
|
||||
"""Set up test fixtures."""
|
||||
self.runner = CliRunner()
|
||||
self.temp_dir = tempfile.mkdtemp()
|
||||
|
||||
def teardown_method(self):
|
||||
"""Clean up test fixtures."""
|
||||
import shutil
|
||||
shutil.rmtree(self.temp_dir, ignore_errors=True)
|
||||
|
||||
def test_tag_add(self):
|
||||
"""Test adding a tag to prompt."""
|
||||
self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
result = self.runner.invoke(main, [
|
||||
"tag", "add", "test-prompt", "test-tag",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "Added tag" in result.output
|
||||
|
||||
def test_tag_list(self):
|
||||
"""Test listing tags."""
|
||||
self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
self.runner.invoke(main, [
|
||||
"tag", "add", "test-prompt", "test-tag",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
result = self.runner.invoke(main, [
|
||||
"tag", "list",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "test-tag" in result.output
|
||||
|
||||
def test_tag_remove(self):
|
||||
"""Test removing a tag from prompt."""
|
||||
self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
self.runner.invoke(main, [
|
||||
"tag", "add", "test-prompt", "test-tag",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
result = self.runner.invoke(main, [
|
||||
"tag", "remove", "test-prompt", "test-tag",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "Removed tag" in result.output
|
||||
|
||||
|
||||
class TestCLISearchCommands:
|
||||
"""Test cases for search CLI commands."""
|
||||
|
||||
def setup_method(self):
|
||||
"""Set up test fixtures."""
|
||||
self.runner = CliRunner()
|
||||
self.temp_dir = tempfile.mkdtemp()
|
||||
|
||||
def teardown_method(self):
|
||||
"""Clean up test fixtures."""
|
||||
import shutil
|
||||
shutil.rmtree(self.temp_dir, ignore_errors=True)
|
||||
|
||||
def test_search_by_name(self):
|
||||
"""Test searching by name."""
|
||||
self.runner.invoke(main, [
|
||||
"prompt", "create", "my-test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
result = self.runner.invoke(main, [
|
||||
"search", "my-test-prompt",
|
||||
"--name", "my-test",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "my-test-prompt" in result.output
|
||||
|
||||
def test_search_by_tag(self):
|
||||
"""Test searching by tag."""
|
||||
self.runner.invoke(main, [
|
||||
"prompt", "create", "test-prompt",
|
||||
"--template", "Hello {{ name }}",
|
||||
"--tag", "documentation",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
result = self.runner.invoke(main, [
|
||||
"search",
|
||||
"--tag", "documentation",
|
||||
"--dir", self.temp_dir
|
||||
])
|
||||
assert result.exit_code == 0
|
||||
assert "test-prompt" in result.output
|
||||
|
||||
|
||||
class TestCLIConfigCommands:
|
||||
"""Test cases for config CLI commands."""
|
||||
|
||||
def setup_method(self):
|
||||
"""Set up test fixtures."""
|
||||
self.runner = CliRunner()
|
||||
self.temp_dir = tempfile.mkdtemp()
|
||||
|
||||
def teardown_method(self):
|
||||
"""Clean up test fixtures."""
|
||||
import shutil
|
||||
shutil.rmtree(self.temp_dir, ignore_errors=True)
|
||||
|
||||
def test_config_show(self):
|
||||
"""Test showing configuration."""
|
||||
result = self.runner.invoke(main, ["config", "show"])
|
||||
assert result.exit_code == 0
|
||||
assert "ollama_url" in result.output or "Configuration" in result.output
|
||||
|
||||
def test_config_set(self):
|
||||
"""Test setting configuration value."""
|
||||
result = self.runner.invoke(main, [
|
||||
"config", "set", "default_model", "test-model"
|
||||
])
|
||||
assert result.exit_code == 0 or "Set" in result.output
|
||||
Reference in New Issue
Block a user