"""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