Files

101 lines
3.4 KiB
Python

"""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"<html>viewer</html>")
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())