"""Fixture condivise per l'intera test suite.""" import pytest from conversione._pipeline.models import Block, Section @pytest.fixture def make_block(): """Factory per Block di test con valori di default ragionevoli.""" def _make( text="testo di prova", page=1, font_size=12.0, font_name="Helvetica", is_bold=False, block_type="paragraph", space_before=5.0, bbox=(50.0, 100.0, 400.0, 114.0), level=0, ): return Block( text=text, page=page, bbox=bbox, font_size=font_size, font_name=font_name, is_bold=is_bold, block_type=block_type, space_before=space_before, level=level, ) return _make @pytest.fixture def mock_fitz_page(): """Dizionario che simula l'output di page.get_text('dict') per una pagina.""" return { "width": 595.0, "height": 842.0, "blocks": [ { "type": 0, "bbox": (50, 50, 450, 70), "lines": [{ "bbox": (50, 50, 450, 70), "spans": [{ "text": "1. Capitolo Primo", "font": "Helvetica-Bold", "size": 18.0, "flags": 16, "bbox": (50, 50, 450, 70), "origin": (50, 68), "color": 0, }], }], }, { "type": 0, "bbox": (50, 90, 500, 104), "lines": [{ "bbox": (50, 90, 500, 104), "spans": [{ "text": "Testo del primo paragrafo del capitolo.", "font": "Helvetica", "size": 12.0, "flags": 0, "bbox": (50, 90, 500, 104), "origin": (50, 102), "color": 0, }], }], }, ], } @pytest.fixture def simple_hierarchy_blocks(make_block): """Lista di Block con gerarchia semplice H1→H2→H3 numerata.""" return [ make_block("1. Introduzione", font_size=18, is_bold=True, space_before=20.0), make_block("Testo del paragrafo di introduzione.", font_size=12), make_block("1.1 Contesto", font_size=15, is_bold=True, space_before=15.0), make_block("Testo della sezione di contesto.", font_size=12), make_block("1.1.1 Dettaglio", font_size=13, is_bold=True, space_before=10.0), make_block("Testo del dettaglio specifico.", font_size=12), make_block("2. Conclusioni", font_size=18, is_bold=True, space_before=20.0), make_block("Testo conclusivo.", font_size=12), ] @pytest.fixture def sources_dir(): from pathlib import Path d = Path(__file__).parent.parent / "sources" return d if d.exists() else None