study-buddy / tests /test_layout_service.py
GitHub Actions
deploy b3d187d69e5df10bb2ec396e89f539f853465a06
14184e3
Raw
History Blame Contribute Delete
1.39 kB
"""Geometry-only tests for layout_service (no vision/model calls)."""
import pymupdf as fitz
from app.services.layout_service import page_has_text, segment_page
def _pdf_with_drawing() -> bytes:
doc = fitz.open()
page = doc.new_page()
page.insert_text((72, 72), "Figure 1: a chart of values")
page.draw_rect(fitz.Rect(80, 120, 400, 360), color=(0, 0, 0), width=1)
for i in range(5):
page.draw_line(fitz.Point(90, 140 + i * 40), fitz.Point(390, 140 + i * 40), color=(0.2, 0.2, 0.8))
data = doc.tobytes()
doc.close()
return data
def test_segments_vector_drawing_region():
regions, (pw, ph) = segment_page(pdf_bytes=_pdf_with_drawing(), page_number=0)
assert pw > 0 and ph > 0
assert len(regions) >= 1
r = regions[0]
assert r["type"] in {"diagram", "figure", "table"}
# bbox is normalized 0..1
for k in ("x", "y", "w", "h"):
assert 0.0 <= r["bbox_norm"][k] <= 1.0
# a PNG crop was produced
assert len(r["crop_base64"]) > 100
def test_page_has_text_true_for_born_digital():
assert page_has_text(_pdf_with_drawing(), None, 0) is True
def test_blank_page_has_no_text_and_no_regions():
doc = fitz.open()
doc.new_page()
data = doc.tobytes()
doc.close()
assert page_has_text(data, None, 0) is False
regions, _ = segment_page(pdf_bytes=data, page_number=0)
assert regions == []