Initial upload: man-card CLI tool with PDF/PNG generation, templates, and tests
Some checks failed
CI / test (push) Has been cancelled
Some checks failed
CI / test (push) Has been cancelled
This commit is contained in:
169
tests/test_card_generator.py
Normal file
169
tests/test_card_generator.py
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
"""Tests for card generator."""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
|
from man_card.card_generator import PDFCardGenerator, PNGCardGenerator
|
||||||
|
from man_card.templates import TemplateLoader, Template
|
||||||
|
from man_card.man_parser import CommandInfo, Option
|
||||||
|
|
||||||
|
|
||||||
|
class TestPDFCardGenerator:
|
||||||
|
"""Tests for PDFCardGenerator class."""
|
||||||
|
|
||||||
|
def setup_method(self):
|
||||||
|
"""Set up test fixtures."""
|
||||||
|
template_loader = TemplateLoader()
|
||||||
|
self.template = template_loader.load("default")
|
||||||
|
self.generator = PDFCardGenerator(self.template)
|
||||||
|
|
||||||
|
def test_init_with_default_template(self):
|
||||||
|
"""Test initialization with default template."""
|
||||||
|
gen = PDFCardGenerator()
|
||||||
|
assert gen.template is not None
|
||||||
|
|
||||||
|
def test_init_with_custom_template(self):
|
||||||
|
"""Test initialization with custom template."""
|
||||||
|
template = Template(name="custom")
|
||||||
|
gen = PDFCardGenerator(template)
|
||||||
|
assert gen.template.name == "custom"
|
||||||
|
|
||||||
|
def test_page_sizes(self):
|
||||||
|
"""Test that page sizes are defined."""
|
||||||
|
assert "a4" in self.generator.PAGE_SIZES
|
||||||
|
assert "letter" in self.generator.PAGE_SIZES
|
||||||
|
|
||||||
|
def test_generate_pdf_command_info(self):
|
||||||
|
"""Test PDF generation with CommandInfo."""
|
||||||
|
command_info = CommandInfo(
|
||||||
|
name="ls",
|
||||||
|
synopsis="ls [OPTION]... [FILE]...",
|
||||||
|
description="List directory contents",
|
||||||
|
options=[
|
||||||
|
Option(flag="-a", description="show all files"),
|
||||||
|
Option(flag="-l", description="long listing format")
|
||||||
|
],
|
||||||
|
examples=["ls -la", "ls -lh"]
|
||||||
|
)
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
output_path = os.path.join(tmpdir, "test_card.pdf")
|
||||||
|
self.generator.generate(command_info, output_path, page_size="a4")
|
||||||
|
assert os.path.exists(output_path)
|
||||||
|
assert os.path.getsize(output_path) > 0
|
||||||
|
|
||||||
|
def test_generate_pdf_with_minimal_info(self):
|
||||||
|
"""Test PDF generation with minimal CommandInfo."""
|
||||||
|
command_info = CommandInfo(name="test")
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
output_path = os.path.join(tmpdir, "minimal_card.pdf")
|
||||||
|
self.generator.generate(command_info, output_path)
|
||||||
|
assert os.path.exists(output_path)
|
||||||
|
|
||||||
|
def test_hex_to_rgb_conversion(self):
|
||||||
|
"""Test hex to RGB color conversion."""
|
||||||
|
rgb = self.generator._hex_to_rgb("#FF0000")
|
||||||
|
assert rgb == (255, 0, 0)
|
||||||
|
|
||||||
|
rgb = self.generator._hex_to_rgb("#00FF00")
|
||||||
|
assert rgb == (0, 255, 0)
|
||||||
|
|
||||||
|
rgb = self.generator._hex_to_rgb("#0000FF")
|
||||||
|
assert rgb == (0, 0, 255)
|
||||||
|
|
||||||
|
def test_hex_to_rgb_without_hash(self):
|
||||||
|
"""Test hex to RGB conversion without hash prefix."""
|
||||||
|
rgb = self.generator._hex_to_rgb("FFFFFF")
|
||||||
|
assert rgb == (255, 255, 255)
|
||||||
|
|
||||||
|
|
||||||
|
class TestPNGCardGenerator:
|
||||||
|
"""Tests for PNGCardGenerator class."""
|
||||||
|
|
||||||
|
def setup_method(self):
|
||||||
|
"""Set up test fixtures."""
|
||||||
|
template_loader = TemplateLoader()
|
||||||
|
self.template = template_loader.load("default")
|
||||||
|
self.generator = PNGCardGenerator(self.template)
|
||||||
|
|
||||||
|
def test_init_with_default_template(self):
|
||||||
|
"""Test initialization with default template."""
|
||||||
|
gen = PNGCardGenerator()
|
||||||
|
assert gen.template is not None
|
||||||
|
|
||||||
|
def test_dpi_sizes_defined(self):
|
||||||
|
"""Test that DPI sizes are defined."""
|
||||||
|
assert 72 in self.generator.DPI_SIZES
|
||||||
|
assert 150 in self.generator.DPI_SIZES
|
||||||
|
assert 300 in self.generator.DPI_SIZES
|
||||||
|
|
||||||
|
def test_generate_png_command_info(self):
|
||||||
|
"""Test PNG generation with CommandInfo."""
|
||||||
|
command_info = CommandInfo(
|
||||||
|
name="ls",
|
||||||
|
synopsis="ls [OPTION]... [FILE]...",
|
||||||
|
description="List directory contents",
|
||||||
|
options=[
|
||||||
|
Option(flag="-a", description="show all files"),
|
||||||
|
Option(flag="-l", description="long listing format")
|
||||||
|
],
|
||||||
|
examples=["ls -la", "ls -lh"]
|
||||||
|
)
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
output_path = os.path.join(tmpdir, "test_card.png")
|
||||||
|
self.generator.generate(command_info, output_path, dpi=72)
|
||||||
|
assert os.path.exists(output_path)
|
||||||
|
assert os.path.getsize(output_path) > 0
|
||||||
|
|
||||||
|
def test_generate_png_with_minimal_info(self):
|
||||||
|
"""Test PNG generation with minimal CommandInfo."""
|
||||||
|
command_info = CommandInfo(name="test")
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
output_path = os.path.join(tmpdir, "minimal_card.png")
|
||||||
|
self.generator.generate(command_info, output_path, dpi=72)
|
||||||
|
assert os.path.exists(output_path)
|
||||||
|
|
||||||
|
def test_hex_to_rgb_conversion(self):
|
||||||
|
"""Test hex to RGB color conversion."""
|
||||||
|
rgb = self.generator._hex_to_rgb("#FF0000")
|
||||||
|
assert rgb == (255, 0, 0)
|
||||||
|
|
||||||
|
|
||||||
|
class TestCardGenerationIntegration:
|
||||||
|
"""Integration tests for card generation."""
|
||||||
|
|
||||||
|
def test_pdf_and_png_consistency(self):
|
||||||
|
"""Test that both generators can handle the same data."""
|
||||||
|
command_info = CommandInfo(
|
||||||
|
name="git",
|
||||||
|
synopsis="git [OPTIONS] COMMAND [ARGUMENTS]",
|
||||||
|
description="the stupid content tracker",
|
||||||
|
options=[
|
||||||
|
Option(flag="-v", description="display version"),
|
||||||
|
Option(flag="-h", description="display help")
|
||||||
|
],
|
||||||
|
examples=["git status", "git commit -m 'message'"]
|
||||||
|
)
|
||||||
|
|
||||||
|
template_loader = TemplateLoader()
|
||||||
|
template = template_loader.load("default")
|
||||||
|
|
||||||
|
pdf_gen = PDFCardGenerator(template)
|
||||||
|
png_gen = PNGCardGenerator(template)
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
pdf_path = os.path.join(tmpdir, "test.pdf")
|
||||||
|
png_path = os.path.join(tmpdir, "test.png")
|
||||||
|
|
||||||
|
pdf_gen.generate(command_info, pdf_path)
|
||||||
|
png_gen.generate(command_info, png_path, dpi=72)
|
||||||
|
|
||||||
|
assert os.path.exists(pdf_path)
|
||||||
|
assert os.path.exists(png_path)
|
||||||
|
assert os.path.getsize(pdf_path) > 0
|
||||||
|
assert os.path.getsize(png_path) > 0
|
||||||
Reference in New Issue
Block a user