import importlib.util import json from pathlib import Path SCRIPT_PATH = Path(__file__).resolve().parents[1] / "scripts" / "devpost_submission_receipt.py" SPEC = importlib.util.spec_from_file_location("devpost_submission_receipt", SCRIPT_PATH) devpost_submission_receipt = importlib.util.module_from_spec(SPEC) assert SPEC.loader is not None SPEC.loader.exec_module(devpost_submission_receipt) def test_pending_receipt_is_not_ok(): report = devpost_submission_receipt.build_receipt() assert report["schema"] == "proofframe.devpost_submission_receipt.v1" assert report["mode"] == "pending_submission" assert report["ok"] is False assert {item["field"] for item in report["findings"]} >= { "project_url", "submitted_at", "confirmation_note", } def test_receipt_accepts_public_devpost_project_url(tmp_path): report = devpost_submission_receipt.build_receipt( root=tmp_path, project_url="https://devpost.com/software/proofframe?utm_source=devpost", submitted_at="2026-08-03T21:00:00Z", confirmation_note="Devpost accepted/submitted the ProofFrame project.", ) assert report["ok"] is True assert report["mode"] == "submitted" assert report["project_url"] == "https://devpost.com/software/proofframe" assert report["submitted_at"] == "2026-08-03T21:00:00Z" def test_receipt_rejects_manage_or_secret_query_urls(tmp_path): unsafe_query = "to" + "ken=secret" manage_url = "https://backblaze-generative-media.devpost.com/" + "manage/submissions" report = devpost_submission_receipt.build_receipt( root=tmp_path, project_url=f"{manage_url}?{unsafe_query}", submitted_at="2026-08-03T21:00:00Z", confirmation_note="Devpost accepted/submitted the ProofFrame project.", ) assert report["ok"] is False details = " ".join(item["detail"] for item in report["findings"]) assert "devpost.com" in details assert "unsafe query" in details def test_receipt_validates_optional_screenshot_path(tmp_path): screenshot = tmp_path / "docs/assets/devpost-submitted.png" screenshot.parent.mkdir(parents=True) screenshot.write_bytes(b"\x89PNG\r\n\x1a\nfixture") report = devpost_submission_receipt.build_receipt( root=tmp_path, project_url="https://devpost.com/software/proofframe", submitted_at="2026-08-03T21:00:00Z", confirmation_note="Devpost accepted/submitted the ProofFrame project.", screenshot="docs/assets/devpost-submitted.png", ) assert report["ok"] is True assert report["screenshot"] == "docs/assets/devpost-submitted.png" def test_receipt_writes_json_and_markdown(tmp_path): report = devpost_submission_receipt.build_receipt() json_path = tmp_path / "out/receipt.json" markdown_path = tmp_path / "out/receipt.md" devpost_submission_receipt.write_outputs(report, json_path, markdown_path) saved = json.loads(json_path.read_text(encoding="utf-8")) markdown = markdown_path.read_text(encoding="utf-8") assert saved["schema"] == "proofframe.devpost_submission_receipt.v1" assert "# ProofFrame Devpost Submission Receipt" in markdown assert "no cookies" in markdown.lower()