""" PDF generation tests for Scenar Creator v3. """ import pytest from app.core.pdf_generator import generate_pdf from app.core.validator import ScenarsError from app.models.event import ScenarioDocument, Block, ProgramType, EventInfo def make_doc(**kwargs): defaults = { "version": "1.0", "event": EventInfo(title="Test PDF", subtitle="Subtitle"), "program_types": [ ProgramType(id="ws", name="Workshop", color="#0070C0"), ], "blocks": [ Block(id="b1", date="2026-03-01", start="09:00", end="10:00", title="Test Program", type_id="ws", responsible="John"), ] } defaults.update(kwargs) return ScenarioDocument(**defaults) def test_generate_pdf_basic(): doc = make_doc() pdf_bytes = generate_pdf(doc) assert isinstance(pdf_bytes, bytes) assert len(pdf_bytes) > 0 assert pdf_bytes[:5] == b'%PDF-' def test_generate_pdf_multiday(): doc = make_doc( program_types=[ ProgramType(id="key", name="Keynote", color="#FF0000"), ProgramType(id="ws", name="Workshop", color="#0070C0"), ], blocks=[ Block(id="b1", date="2026-03-01", start="09:00", end="10:00", title="Day 1", type_id="key", responsible="Alice"), Block(id="b2", date="2026-03-02", start="14:00", end="15:00", title="Day 2", type_id="ws", responsible="Bob"), ] ) pdf_bytes = generate_pdf(doc) assert isinstance(pdf_bytes, bytes) assert pdf_bytes[:5] == b'%PDF-' def test_generate_pdf_empty_blocks(): doc = make_doc(blocks=[]) with pytest.raises(ScenarsError): generate_pdf(doc) def test_generate_pdf_missing_type(): doc = make_doc( blocks=[ Block(id="b1", date="2026-03-01", start="09:00", end="10:00", title="Test", type_id="UNKNOWN"), ] ) with pytest.raises(ScenarsError): generate_pdf(doc) def test_generate_pdf_with_event_info(): doc = make_doc( event=EventInfo( title="Full Event", subtitle="With all fields", date="2026-03-01", location="Prague" ) ) pdf_bytes = generate_pdf(doc) assert pdf_bytes[:5] == b'%PDF-' def test_generate_pdf_multiple_blocks_same_day(): doc = make_doc( blocks=[ Block(id="b1", date="2026-03-01", start="09:00", end="10:00", title="Morning", type_id="ws"), Block(id="b2", date="2026-03-01", start="10:00", end="11:30", title="Midday", type_id="ws"), Block(id="b3", date="2026-03-01", start="14:00", end="16:00", title="Afternoon", type_id="ws", responsible="Team"), ] ) pdf_bytes = generate_pdf(doc) assert pdf_bytes[:5] == b'%PDF-'