"""Юнит-тесты извлечения текста из PDF (app.extractors.pdf).""" import pytest from app.extractors.pdf import extract_text_from_pdf def _minimal_pdf_bytes(text: str) -> bytes: """Собрать валидный однострочный PDF с заданным текстом через сам PyMuPDF.""" import fitz doc = fitz.open() page = doc.new_page() page.insert_text((72, 72), text) data = doc.tobytes() doc.close() return data def test_extracts_text_from_valid_pdf(): # ASCII — встроенный шрифт PyMuPDF не рендерит кириллицу без явного указания # шрифта с поддержкой юникода; для проверки самой логики извлечения не важно. text = extract_text_from_pdf(_minimal_pdf_bytes("Hello, world")) assert "Hello, world" in text def test_non_pdf_content_raises_friendly_error(): # Частый реальный случай: файл с расширением .pdf, а внутри — HTML html = b"not a pdf" with pytest.raises(ValueError, match="не является PDF"): extract_text_from_pdf(html) def test_empty_bytes_raises_friendly_error(): with pytest.raises(ValueError, match="не является PDF"): extract_text_from_pdf(b"") def test_truncated_pdf_header_only_raises(): # Начинается как PDF (проходит magic-byte проверку), но структуры внутри нет with pytest.raises(ValueError): extract_text_from_pdf(b"%PDF-1.4\n" + b"garbage" * 20)