import tempfile from pathlib import Path import unittest from generate import generate_case from docx import Document from pypdf import PdfReader class GeneratorTests(unittest.TestCase): def test_short_body_sentences_are_not_structural_headings(self): with tempfile.TemporaryDirectory() as directory: files = generate_case({"id": "styles", "layout": "single", "lines": ["Work Experience", "Built release tools.", "Skills", "C#; SQL"]}, Path(directory)) styles = [p.style.name for p in Document(files["docx"]).paragraphs] self.assertEqual(styles, ["Heading 2", "Normal", "Heading 2", "Normal"]) def test_pdf_preserves_unicode_and_explicit_page_break(self): with tempfile.TemporaryDirectory() as directory: files = generate_case({"id": "unicode", "layout": "multipage", "lines": ["Åse Øvrebø", "PAGE_BREAK", "Tromsø"]}, Path(directory)) pages = PdfReader(files["pdf"]).pages self.assertEqual(len(pages), 2) self.assertIn("Åse Øvrebø", pages[0].extract_text()) self.assertIn("Tromsø", pages[1].extract_text()) def test_docx_contains_actual_table_cells(self): with tempfile.TemporaryDirectory() as directory: files = generate_case({"id": "table", "layout": "table", "lines": ["Education", "Diploma | College | 2010 - 2012"]}, Path(directory)) document = Document(files["docx"]) self.assertEqual([cell.text for cell in document.tables[0].rows[0].cells], ["Diploma", "College", "2010 - 2012"]) def test_scan_has_no_extractable_pdf_text(self): with tempfile.TemporaryDirectory() as directory: files = generate_case({"id": "scan", "layout": "scan", "lines": ["Synthetic image only"]}, Path(directory)) self.assertEqual(PdfReader(files["pdf"]).pages[0].extract_text(), "") self.assertNotIn("docx", files) def test_refuses_reusing_fixture_output(self): with tempfile.TemporaryDirectory() as directory: case = {"id": "one", "layout": "single", "lines": ["Synthetic"]} generate_case(case, Path(directory)) with self.assertRaises(FileExistsError): generate_case(case, Path(directory)) if __name__ == "__main__": unittest.main()