Files
scenar-creator/tests/test_pdf.py
Daneel 25fd578543
Some checks failed
Build & Push Docker / build (push) Has been cancelled
feat: v3.0 - canvas editor, JSON-only, no Excel, new UI
- Remove all Excel code (import, export, template, pandas, openpyxl)
- New canvas-based schedule editor with drag & drop (interact.js)
- Modern 3-panel UI: sidebar, canvas, documentation tab
- New data model: Block with id/date/start/end, ProgramType with id/name/color
- Clean API: GET /api/health, POST /api/validate, GET /api/sample, POST /api/generate-pdf
- Rewritten PDF generator using ScenarioDocument directly (no DataFrame)
- Professional PDF output: dark header, colored blocks, merged cells, legend, footer
- Sample JSON: "Zimní výjezd oddílu" with 11 blocks, 3 program types
- 30 tests passing (API, core models, PDF generation)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 17:02:51 +01:00

96 lines
2.8 KiB
Python

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