"""Unit tests for SharePoint URL extraction from attachment rows.""" from __future__ import annotations from unittest.mock import MagicMock import base64 from onedrive_planner import ( _attachment_filename_key, _direct_download_url, _download_href_via_browser_fetch, _extract_sharepoint_url, _is_pdf_bytes, _resolve_attachment_click_target, _sharepoint_download_candidates, _url_from_attachment_element, _viewer_preview_url, ) SAMPLE = ( "https://netorg393890.sharepoint.com/sites/AnberryNursingandRehabilitationCenter/" "Shared%20Documents/ANBERRY%20FS%205.29.26.pdf" ) class TestAttachmentUrl: def test_extract_from_aria_label(self): assert _extract_sharepoint_url(SAMPLE) == SAMPLE def test_direct_download_transform(self): dl = _direct_download_url(SAMPLE) assert "download=1" in dl def test_viewer_preview_url(self): viewer = _viewer_preview_url(SAMPLE + "?web=1") assert "web=1" in viewer assert "download=1" not in viewer viewer2 = _viewer_preview_url(SAMPLE) assert "web=1" in viewer2 def test_url_from_span_element(self): span = MagicMock() span.get_attribute.side_effect = lambda name: ( SAMPLE if name == "aria-label" else None ) span.text = "" span.find_elements.return_value = [] assert _url_from_attachment_element(span) == SAMPLE def test_sharepoint_download_candidates_include_layouts(self): cands = _sharepoint_download_candidates(SAMPLE) assert any("download.aspx" in c for c in cands) assert any("download=1" in c for c in cands) def test_is_pdf_bytes(self): assert _is_pdf_bytes(b"%PDF-1.4 fake content " + b"x" * 6000) assert not _is_pdf_bytes(b"%PDF-1.4 tiny " + b"x" * 100) assert not _is_pdf_bytes(b"viewer") def test_resolve_click_target_prefers_href_span(self): span = MagicMock() span.is_displayed.return_value = True span.tag_name = "span" span.get_attribute.side_effect = lambda name: ( f"JACKSON ARBRHLS 6.3.26.pdf {SAMPLE}" if name == "aria-label" else None ) span.text = "" span.find_elements.return_value = [] li = MagicMock() li.tag_name = "li" li.is_displayed.return_value = True li.get_attribute.return_value = None li.text = "JACKSON ARBRHLS 6.3.26.pdf" li.find_elements.return_value = [span] assert _resolve_attachment_click_target(li) is span assert "6.3.26.pdf" in _attachment_filename_key(span) def test_browser_fetch_saves_pdf(self, tmp_path): driver = MagicMock() pdf = b"%PDF-1.4 " + b"x" * 6000 driver.execute_async_script.return_value = { "ok": True, "b64": base64.b64encode(pdf).decode("ascii"), "ct": "application/pdf", "size": len(pdf), } driver.current_window_handle = "h1" driver.window_handles = ["h1"] def _exec_script(script, *args): if "window.open" in str(script): driver.window_handles = ["h1", "h2"] driver.execute_script.side_effect = _exec_script out = _download_href_via_browser_fetch(driver, tmp_path, SAMPLE, set()) assert len(out) == 1 assert out[0].exists() assert _is_pdf_bytes(out[0].read_bytes())