File size: 3,243 Bytes
f74bce1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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()