"""Tests for web flashcard generation."""
import pytest
import tempfile
from pathlib import Path
from unittest.mock import patch, MagicMock
# Import web generator functions
import sys
sys.path.insert(0, str(Path(__file__).parent.parent / 'src'))
from web_generator import generate_web_flashcards, get_numeral_color, generate_card_svgs
class TestWebGeneration:
"""Test web flashcard generation functionality."""
def test_get_numeral_color_monochrome(self, sample_config):
"""Test numeral color for monochrome scheme."""
config = {**sample_config, 'color_scheme': 'monochrome', 'colored_numerals': False}
color = get_numeral_color(42, config)
assert color == "#333"
# Even with colored numerals, monochrome should return #333
config['colored_numerals'] = True
color = get_numeral_color(42, config)
assert color == "#333"
def test_get_numeral_color_place_value(self, sample_config):
"""Test numeral color for place-value scheme."""
config = {**sample_config, 'color_scheme': 'place-value', 'colored_numerals': True}
# Test different place values
color = get_numeral_color(7, config) # ones place
assert color == "#2E86AB" # blue
color = get_numeral_color(42, config) # tens place
assert color == "#A23B72" # magenta
color = get_numeral_color(456, config) # hundreds place
assert color == "#F18F01" # orange
# For place-value scheme, colored numerals are automatically enabled
config['colored_numerals'] = False
color = get_numeral_color(42, config)
assert color == "#A23B72" # Still colored because place-value auto-enables coloring
@patch('generate.generate_cards_direct')
def test_generate_card_svgs_success(self, mock_generate_cards_direct, sample_config, temp_dir):
"""Test successful SVG generation."""
# Mock the generated files
fronts_dir = temp_dir / 'svg_cards' / 'fronts'
fronts_dir.mkdir(parents=True)
# Create mock SVG files
for i, num in enumerate([1, 2, 3]):
svg_file = fronts_dir / f'card_{i:03d}.svg'
svg_content = f''
svg_file.write_text(svg_content)
# Mock the generate_cards_direct return
mock_generate_cards_direct.return_value = [
fronts_dir / 'card_000.svg',
fronts_dir / 'card_001.svg',
fronts_dir / 'card_002.svg',
]
# Mock tempfile to use our temp_dir
with patch('tempfile.TemporaryDirectory') as mock_tempdir:
mock_tempdir.return_value.__enter__.return_value = str(temp_dir)
result = generate_card_svgs([1, 2, 3], sample_config)
assert len(result) == 3
assert 1 in result
assert 2 in result
assert 3 in result
assert '