Initial commit: MISF VOB download and upload automation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
commit
c2dec96b1f
43 files changed
+10944
No files matched your search
@@ -0,0 +1,100 @@
|
||||
"""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())
|
||||
Reference in new issue
Block a user