"""Tests for URLClassifier._is_pdf_url method.""" from local_deep_research.content_fetcher.url_classifier import URLClassifier class TestIsPdfUrl: """Tests for _is_pdf_url().""" def test_pdf_extension(self): assert URLClassifier._is_pdf_url("https://example.com/doc.pdf") is True def test_pdf_extension_case_insensitive(self): assert URLClassifier._is_pdf_url("https://example.com/doc.PDF") is True def test_pdf_in_path(self): assert ( URLClassifier._is_pdf_url("https://example.com/pdf/document") is True ) def test_html_url(self): assert ( URLClassifier._is_pdf_url("https://example.com/page.html") is False ) def test_no_extension(self): assert ( URLClassifier._is_pdf_url("https://example.com/article/123") is False ) def test_arxiv_pdf_not_treated_as_generic_pdf(self): """arXiv PDFs should use specialized downloader, not generic PDF.""" assert ( URLClassifier._is_pdf_url("https://arxiv.org/pdf/2301.12345") is False ) def test_biorxiv_pdf_not_treated_as_generic_pdf(self): assert ( URLClassifier._is_pdf_url( "https://www.biorxiv.org/content/10.1101/2024.01.01.pdf" ) is False ) def test_medrxiv_pdf_not_treated_as_generic_pdf(self): assert ( URLClassifier._is_pdf_url( "https://www.medrxiv.org/content/10.1101/2024.01.01.pdf" ) is False ) def test_ncbi_pdf_not_treated_as_generic_pdf(self): assert ( URLClassifier._is_pdf_url( "https://ncbi.nlm.nih.gov/pmc/articles/PMC123/pdf/" ) is False ) def test_semanticscholar_not_treated_as_generic_pdf(self): assert ( URLClassifier._is_pdf_url( "https://pdfs.semanticscholar.org/abc.pdf" ) is False ) def test_generic_domain_pdf(self): """Non-academic domain PDFs should be treated as generic PDFs.""" assert ( URLClassifier._is_pdf_url("https://company.com/reports/annual.pdf") is True ) def test_pdf_with_query_params(self): assert ( URLClassifier._is_pdf_url("https://example.com/doc.pdf?v=2") is True ) def test_url_with_pdf_in_query_not_matched(self): """pdf in query string shouldn't trigger PDF detection.""" assert ( URLClassifier._is_pdf_url("https://example.com/viewer?file=doc.pdf") is False )