Spaces:
Running
Running
Download tests/test_document_parser.py from mrinal22258/HireTrace: direct link, hf CLI and curl.
- Browser
- Download file 5.36 kB
-
https://huggingface.co/spaces/mrinal22258/HireTrace/resolve/main/tests/test_document_parser.py
- Command line
-
hf download hf://spaces/mrinal22258/HireTrace/tests/test_document_parser.py
-
curl -L -o test_document_parser.py https://huggingface.co/spaces/mrinal22258/HireTrace/resolve/main/tests/test_document_parser.py
5.36 kB
| import os | |
| import tempfile | |
| import pytest | |
| from pathlib import Path | |
| from agents.document_parser import ( | |
| extract_text, | |
| extract_text_from_bytes, | |
| infer_document_type, | |
| compute_file_hash, | |
| ) | |
| def test_plain_text_and_markdown_extraction(): | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| txt_path = os.path.join(tmpdir, "cv.txt") | |
| with open(txt_path, "w", encoding="utf-8") as f: | |
| f.write("# Jane Doe\nSenior Backend Engineer\nPython, Kafka, Distributed Systems.") | |
| md_path = os.path.join(tmpdir, "notes.md") | |
| with open(md_path, "w", encoding="utf-8") as f: | |
| f.write("## Interview Debrief\nStrong grasp of event-driven architectures.") | |
| txt_extracted = extract_text(txt_path) | |
| assert "Jane Doe" in txt_extracted | |
| assert "Distributed Systems" in txt_extracted | |
| md_extracted = extract_text(md_path) | |
| assert "Interview Debrief" in md_extracted | |
| assert "event-driven" in md_extracted | |
| def test_docx_extraction(): | |
| from docx import Document | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| doc_path = os.path.join(tmpdir, "resume.docx") | |
| doc = Document() | |
| doc.add_heading("John Smith", level=1) | |
| doc.add_paragraph("Staff Distributed Systems Engineer with 10 years experience.") | |
| # Add a table | |
| table = doc.add_table(rows=2, cols=2) | |
| table.cell(0, 0).text = "Skill" | |
| table.cell(0, 1).text = "Level" | |
| table.cell(1, 0).text = "Python" | |
| table.cell(1, 1).text = "Expert" | |
| doc.save(doc_path) | |
| extracted = extract_text(doc_path) | |
| assert "John Smith" in extracted | |
| assert "Staff Distributed Systems Engineer" in extracted | |
| assert "Python | Expert" in extracted or "Python" in extracted | |
| def test_pdf_extraction(): | |
| import pypdf | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| pdf_path = os.path.join(tmpdir, "applicant_cv.pdf") | |
| writer = pypdf.PdfWriter() | |
| # Create a blank page with text annotation or draw text | |
| page = writer.add_blank_page(width=300, height=300) | |
| # We can write PDF content stream | |
| with open(pdf_path, "wb") as f: | |
| writer.write(f) | |
| # Even with an empty/blank PDF, extract_text should not crash | |
| extracted = extract_text(pdf_path) | |
| assert isinstance(extracted, str) | |
| def test_legacy_doc_rejection(): | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| doc_path = os.path.join(tmpdir, "old_resume.doc") | |
| with open(doc_path, "wb") as f: | |
| f.write(b"\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1") # OLE header | |
| with pytest.raises(ValueError) as exc: | |
| extract_text(doc_path) | |
| assert "Legacy .doc format is not supported" in str(exc.value) | |
| def test_unsupported_format_rejection(): | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| bad_path = os.path.join(tmpdir, "image.png") | |
| with open(bad_path, "wb") as f: | |
| f.write(b"fake image data") | |
| with pytest.raises(ValueError) as exc: | |
| extract_text(bad_path) | |
| assert "Unsupported file format" in str(exc.value) | |
| def test_file_not_found(): | |
| with pytest.raises(FileNotFoundError): | |
| extract_text("non_existent_file_path_12345.pdf") | |
| def test_infer_document_type(): | |
| assert infer_document_type("jane_doe_cv.pdf") == "cv" | |
| assert infer_document_type("resume_v2.docx") == "cv" | |
| assert infer_document_type("technical_interview_transcript.txt") == "interview" | |
| assert infer_document_type("coding_assessment_results.md") == "assessment" | |
| assert infer_document_type("system_architecture_rfc.pdf") == "project" | |
| def test_compute_file_hash(): | |
| data = b"Hello HireTrace Pipeline" | |
| h1 = compute_file_hash(data) | |
| h2 = compute_file_hash(data) | |
| assert h1 == h2 | |
| assert len(h1) == 64 # SHA-256 hex length | |
| def test_extract_text_from_bytes(): | |
| txt_bytes = "Software Engineer\n5 years experience".encode("utf-8") | |
| extracted = extract_text_from_bytes(txt_bytes, "profile.txt") | |
| assert "Software Engineer" in extracted | |
| def test_json_extraction(): | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| # Case 1: Dict with text/content key | |
| json_path = os.path.join(tmpdir, "candidate.json") | |
| with open(json_path, "w", encoding="utf-8") as f: | |
| f.write('{"name": "Alice Smith", "text": "Senior Distributed Systems Engineer with 8 years experience."}') | |
| extracted = extract_text(json_path) | |
| assert "Senior Distributed Systems Engineer" in extracted | |
| # Case 2: Dict without explicit text key - pretty formatted JSON | |
| json_path_raw = os.path.join(tmpdir, "skills.json") | |
| with open(json_path_raw, "w", encoding="utf-8") as f: | |
| f.write('{"skills": ["Go", "Kubernetes"], "experience_years": 7}') | |
| extracted_raw = extract_text(json_path_raw) | |
| assert "Kubernetes" in extracted_raw | |
| assert "experience_years" in extracted_raw | |
| # Case 3: extract_text_from_bytes with JSON | |
| json_bytes = b'{"bio": "Staff DevOps Architect", "content": "Specializing in multi-cloud infrastructure."}' | |
| extracted_bytes = extract_text_from_bytes(json_bytes, "bio.json") | |
| assert "Specializing in multi-cloud infrastructure" in extracted_bytes | |