"""Tests for download summary Excel columns.""" from __future__ import annotations from pathlib import Path import pandas as pd from planner_download import ( _build_workable_files, _format_status_changed, _success_status, _write_download_summary, ) def test_success_status_labels(): assert _success_status(0, 0) == "No tasks" assert _success_status(0, 3, tasks_skipped_no_attachment=3) == "No attachments" assert _success_status(1, 3, tasks_with_downloads=1, tasks_with_attachments=1) == "Success" assert _success_status(2, 4, tasks_with_downloads=2, tasks_with_attachments=2) == "Success" assert _success_status(1, 4, tasks_with_downloads=1, tasks_with_attachments=2) == "Partial" assert _success_status(0, 2, tasks_with_attachments=2) == "Download failed" def test_format_status_changed(): assert _format_status_changed(0, 0) == "N/A" assert _format_status_changed(2, 2, via_task_details=2) == "Yes - 2/2 tasks (2 via task details)" assert _format_status_changed(3, 1, via_task_details=1) == "Partial - 1/3 tasks (1 via task details)" assert _format_status_changed(1, 0) == "No - 0/1 tasks" assert _format_status_changed(2, 1, via_task_details=1) == "Partial - 1/2 tasks (1 via task details)" def test_write_download_summary_columns(tmp_path: Path, monkeypatch): monkeypatch.setattr("planner_download.PROJECT_ROOT", tmp_path) results = { "Alpha": { "original": [tmp_path / "a.pdf", tmp_path / "b.pdf"], "tasks_total": 4, "tasks_with_attachments": 2, "tasks_skipped_no_attachment": 2, "tasks_with_downloads": 2, "status_changed": 1, "status_via_task_details": 1, }, "Beta": { "original": [], "tasks_total": 2, "tasks_with_attachments": 0, "tasks_skipped_no_attachment": 2, "tasks_with_downloads": 0, "status_changed": 0, "status_via_task_details": 0, }, } failures = [("Gamma", "not found", "Plan not found")] summary_path = tmp_path / "Summary" / "Download_Summary_2026-06-05.xlsx" _write_download_summary( results, failures, summary_path, planner_url="https://example.com", run_timestamp="2026-06-05 12:00:00", ) df = pd.read_excel(summary_path, keep_default_na=False) assert list(df.columns) == [ "Run Timestamp", "Facility Name", "Files Downloaded", "Status", "Status Changed", ] alpha = df[df["Facility Name"] == "Alpha"].iloc[0] assert alpha["Status"] == "Success" assert "1/2 tasks" in alpha["Status Changed"] assert "via task details" in alpha["Status Changed"] beta = df[df["Facility Name"] == "Beta"].iloc[0] assert beta["Status"] == "No attachments" assert beta["Status Changed"] == "N/A" gamma = df[df["Facility Name"] == "Gamma"].iloc[0] assert gamma["Status"] == "Plan not found" assert gamma["Status Changed"] == "N/A" def test_build_workable_files_mirrors_to_medicare(tmp_path: Path): src_dir = tmp_path / "original" / "FacA" src_dir.mkdir(parents=True) pdf = src_dir / "doc.pdf" pdf.write_bytes(b"%PDF-1.4") paths, workable_root = _build_workable_files( facility_name="Fac A", downloaded=[pdf], output_root=tmp_path / "Output", today_iso="2026-06-16", ) medicare_root = tmp_path / "Output" / "2026-06-16" / "Workable_Medicare" assert len(paths) == 1 assert paths[0].parent == workable_root assert paths[0].is_file() assert medicare_root.is_dir() medicare_files = list(medicare_root.glob("*.pdf")) assert len(medicare_files) == 1 assert medicare_files[0].name == paths[0].name assert medicare_files[0].read_bytes() == pdf.read_bytes()