128 lines
4.6 KiB
Python
128 lines
4.6 KiB
Python
"""Tests for CLI interface."""
|
|
|
|
import pytest
|
|
from unittest.mock import patch, MagicMock
|
|
from click.testing import CliRunner
|
|
|
|
from man_card.cli import cli, generate, list_templates, preview
|
|
|
|
|
|
class TestCLI:
|
|
"""Tests for CLI interface."""
|
|
|
|
def setup_method(self):
|
|
"""Set up test fixtures."""
|
|
self.runner = CliRunner()
|
|
|
|
def test_cli_group_exists(self):
|
|
"""Test that cli group exists."""
|
|
result = self.runner.invoke(cli, ['--help'])
|
|
assert result.exit_code == 0
|
|
assert 'man-card' in result.output
|
|
|
|
def test_generate_command_exists(self):
|
|
"""Test that generate command exists."""
|
|
result = self.runner.invoke(cli, ['generate', '--help'])
|
|
assert result.exit_code == 0
|
|
|
|
def test_list_templates_command(self):
|
|
"""Test list-templates command."""
|
|
result = self.runner.invoke(list_templates)
|
|
assert result.exit_code == 0
|
|
assert 'default' in result.output
|
|
|
|
@patch('subprocess.run')
|
|
def test_preview_command(self, mock_run):
|
|
"""Test preview command."""
|
|
mock_run.return_value = MagicMock(
|
|
returncode=0,
|
|
stdout="NAME\nls - list directory contents\n\nSYNOPSIS\nls [OPTION]... [FILE]...\n"
|
|
)
|
|
|
|
result = self.runner.invoke(preview, ['ls'])
|
|
assert result.exit_code == 0
|
|
assert 'ls' in result.output
|
|
|
|
@patch('subprocess.run')
|
|
@patch('man_card.card_generator.PDFCardGenerator.generate')
|
|
def test_generate_pdf_output(self, mock_pdf_gen, mock_run):
|
|
"""Test PDF generation output."""
|
|
mock_run.return_value = MagicMock(
|
|
returncode=0,
|
|
stdout="NAME\nls - list directory contents\n\nSYNOPSIS\nls [OPTION]...\n"
|
|
)
|
|
|
|
with self.runner.isolated_filesystem():
|
|
result = self.runner.invoke(generate, ['ls', '-o', 'test_card.pdf'])
|
|
assert result.exit_code == 0
|
|
mock_pdf_gen.assert_called_once()
|
|
|
|
@patch('subprocess.run')
|
|
@patch('man_card.card_generator.PNGCardGenerator.generate')
|
|
def test_generate_png_output(self, mock_png_gen, mock_run):
|
|
"""Test PNG generation output."""
|
|
mock_run.return_value = MagicMock(
|
|
returncode=0,
|
|
stdout="NAME\nls - list directory contents\n\nSYNOPSIS\nls [OPTION]...\n"
|
|
)
|
|
|
|
with self.runner.isolated_filesystem():
|
|
result = self.runner.invoke(generate, ['ls', '--format', 'png', '-o', 'test_card.png'])
|
|
assert result.exit_code == 0
|
|
mock_png_gen.assert_called_once()
|
|
|
|
def test_generate_requires_command_or_input(self):
|
|
"""Test that generate requires command or input file."""
|
|
result = self.runner.invoke(generate, [])
|
|
assert result.exit_code != 0
|
|
assert 'Error' in result.output
|
|
|
|
def test_generate_with_input_file(self):
|
|
"""Test generation with input file."""
|
|
with self.runner.isolated_filesystem():
|
|
with open('commands.txt', 'w') as f:
|
|
f.write('ls\ngrep\n')
|
|
|
|
result = self.runner.invoke(generate, ['-i', 'commands.txt', '-o', 'output.pdf'])
|
|
assert result.exit_code == 0 or 'Error' not in result.output
|
|
|
|
def test_verbose_flag(self):
|
|
"""Test verbose flag doesn't cause errors."""
|
|
result = self.runner.invoke(cli, ['--verbose', 'list-templates'])
|
|
assert result.exit_code == 0
|
|
|
|
def test_quiet_flag(self):
|
|
"""Test quiet flag doesn't cause errors."""
|
|
result = self.runner.invoke(cli, ['--quiet', 'list-templates'])
|
|
assert result.exit_code == 0
|
|
|
|
def test_invalid_format(self):
|
|
"""Test handling of invalid format."""
|
|
result = self.runner.invoke(generate, ['ls', '--format', 'invalid'])
|
|
assert result.exit_code != 0
|
|
|
|
def test_invalid_page_size(self):
|
|
"""Test handling of invalid page size."""
|
|
result = self.runner.invoke(generate, ['ls', '--page-size', 'invalid'])
|
|
assert result.exit_code != 0
|
|
|
|
|
|
class TestCLIContext:
|
|
"""Tests for CLI context handling."""
|
|
|
|
def setup_method(self):
|
|
"""Set up test fixtures."""
|
|
self.runner = CliRunner()
|
|
|
|
def test_context_verbose_default(self):
|
|
"""Test verbose defaults to False in context."""
|
|
result = self.runner.invoke(cli, ['--help'])
|
|
assert result.exit_code == 0
|
|
|
|
def test_generate_help_contains_options(self):
|
|
"""Test generate help contains expected options."""
|
|
result = self.runner.invoke(generate, ['--help'])
|
|
assert '--output' in result.output
|
|
assert '--format' in result.output
|
|
assert '--template' in result.output
|