68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
from PIL import Image
|
||
|
||
from core.pdf_utils import tiff_to_images_bs64, document_to_images_bs64
|
||
|
||
|
||
def _create_multipage_tiff(path: str, pages: int = 4) -> None:
|
||
"""Crea un TIFF multipágina de prueba."""
|
||
frames = []
|
||
for i in range(pages):
|
||
# Colores distintos por página para facilitar depuración si es necesario
|
||
color = (50 * (i + 1) % 255, 0, 0)
|
||
frames.append(Image.new("RGB", (16, 16), color))
|
||
frames[0].save(path, save_all=True, append_images=frames[1:], format="TIFF")
|
||
|
||
|
||
def test_tiff_to_images_bs64_respects_full_and_sub_ranges(tmp_path) -> None:
|
||
tiff_path = tmp_path / "sample.tif"
|
||
_create_multipage_tiff(str(tiff_path), pages=4)
|
||
|
||
# Sin rango -> todas las páginas
|
||
imgs_all = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=None)
|
||
assert len(imgs_all) == 4
|
||
|
||
# Rango 2–3 (1-based, inclusivo)
|
||
imgs_2_3 = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=(2, 3))
|
||
assert len(imgs_2_3) == 2
|
||
|
||
|
||
def test_tiff_to_images_bs64_allows_partial_ranges(tmp_path) -> None:
|
||
tiff_path = tmp_path / "sample_partial.tif"
|
||
_create_multipage_tiff(str(tiff_path), pages=4)
|
||
|
||
# Desde la 3 hasta el final
|
||
imgs_from_3 = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=(3, None)) # type: ignore[arg-type]
|
||
assert len(imgs_from_3) == 2
|
||
|
||
# Desde el inicio hasta la 2
|
||
imgs_to_2 = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=(None, 2)) # type: ignore[arg-type]
|
||
assert len(imgs_to_2) == 2
|
||
|
||
# Rango completamente fuera de límites -> lista vacía
|
||
imgs_out = tiff_to_images_bs64(str(tiff_path), validate=True, pages_range=(10, 20))
|
||
assert imgs_out == []
|
||
|
||
|
||
def test_document_to_images_bs64_uses_explicit_tiff_page_range_over_default(tmp_path) -> None:
|
||
tiff_path = tmp_path / "doc.tif"
|
||
_create_multipage_tiff(str(tiff_path), pages=4)
|
||
|
||
# Por defecto usa `tiff_pages=(2,3)` del helper
|
||
imgs_default = document_to_images_bs64(str(tiff_path), validate=True)
|
||
assert len(imgs_default) == 2
|
||
|
||
# tiff_page_range tiene prioridad sobre tiff_pages
|
||
imgs_range = document_to_images_bs64(
|
||
str(tiff_path),
|
||
validate=True,
|
||
tiff_pages=(1, 4),
|
||
tiff_page_range=(2, 3),
|
||
)
|
||
assert len(imgs_range) == 2
|
||
|
||
# Sin rango ni valor por defecto -> todas las páginas
|
||
imgs_all = document_to_images_bs64(str(tiff_path), validate=True, tiff_pages=None)
|
||
assert len(imgs_all) == 4
|
||
|
||
|