File size: 4,978 Bytes
f74bce1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0bf36ea
 
f74bce1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74ee21a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import importlib.util
import json
from pathlib import Path


SCRIPT_PATH = Path(__file__).resolve().parents[1] / "scripts" / "devpost_packet.py"
SPEC = importlib.util.spec_from_file_location("devpost_packet", SCRIPT_PATH)
devpost_packet = importlib.util.module_from_spec(SPEC)
assert SPEC.loader is not None
SPEC.loader.exec_module(devpost_packet)


def test_default_packet_uses_pre_live_safe_claims():
    packet = devpost_packet.build_packet()

    assert packet["schema"] == "proofframe.devpost_packet.v1"
    assert packet["mode"] == "pre_live_safe"
    assert packet["tagline"] == "B2-ready provenance desk for GenAI media."
    assert "Genblaze-gated" in packet["one_liner"]
    assert "local demo" in packet["short_description"]
    assert "B2-ready object model" in packet["b2_usage"]
    assert "final submission gate" in packet["b2_usage"]
    assert "Genblaze Pipeline API" in packet["genblaze_usage"]
    assert "final submission gate" in packet["genblaze_usage"]
    assert packet["repository_url"] == "https://github.com/adjcjh777/backblaze-proofframe"
    assert packet["demo_url"].endswith("/?judge=1")
    assert {"task": "T040", "label": "Devpost registration complete", "status": "done", "required_for_final": True} in packet[
        "submission_checklist"
    ]


def test_live_packet_uses_verified_claim_copy():
    packet = devpost_packet.build_packet(live=True, video_url="https://youtu.be/example-proof")

    assert packet["mode"] == "post_live_verified"
    assert "Backblaze B2-backed evidence packets" in packet["short_description"]
    assert "stores generated media" in packet["b2_usage"]
    assert "generates media through Genblaze" in packet["genblaze_usage"]
    assert packet["video_url"] == "https://youtu.be/example-proof"


def test_live_packet_without_video_uses_video_upload_placeholder():
    packet = devpost_packet.build_packet(live=True)

    assert packet["mode"] == "post_live_verified"
    assert packet["video_url"] == "TBD after final public video upload."
    assert "Upload the final demo video" in packet["whats_next"][0]


def test_live_packet_reads_final_evidence_provider_and_model(tmp_path):
    evidence_path = tmp_path / "final-live-proof-evidence.json"
    evidence_path.write_text(
        json.dumps(
            {
                "ok": True,
                "asset_provider": "genblaze/local-image",
                "asset_model": "local-svg-v1",
            }
        ),
        encoding="utf-8",
    )

    packet = devpost_packet.build_packet(live=True, final_evidence_path=evidence_path)

    assert packet["final_provider_and_model"] == {
        "provider": "genblaze/local-image",
        "model": "local-svg-v1",
        "status": "verified by docs/assets/final-live-proof-evidence.json",
    }
    assert {
        "provider": "genblaze/local-image",
        "model": "local-svg-v1",
        "status": "final B2-backed Genblaze proof",
    } in packet["current_providers_and_models"]


def test_packet_rejects_placeholder_video_url():
    try:
        devpost_packet.build_packet(live=True, video_url="TBD after upload")
    except ValueError as exc:
        assert "video_url" in str(exc)
    else:
        raise AssertionError("Expected invalid video_url to raise ValueError")


def test_write_packet_creates_json_and_markdown(tmp_path):
    json_path = tmp_path / "packet.json"
    markdown_path = tmp_path / "packet.md"
    packet = devpost_packet.build_packet()

    devpost_packet.write_packet(packet, 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_packet.v1"
    assert saved["project_name"] == "ProofFrame"
    assert "# Devpost Submission Packet" in markdown
    assert "Mode: `pre_live_safe`" in markdown
    assert "## Backblaze B2 Usage" in markdown
    assert "## Demo Video URL" in markdown
    assert "## Submission Checklist" in markdown
    assert "T040 [done] Devpost registration complete" in markdown


def test_packet_can_read_task_statuses_from_custom_task_file(tmp_path):
    tasks_path = tmp_path / "tasks.json"
    tasks_path.write_text(
        json.dumps(
            {
                "tasks": [
                    {"id": "T020", "status": "done"},
                    {"id": "T021", "status": "doing"},
                    {"id": "T040", "status": "done"},
                    {"id": "T041", "status": "todo"},
                    {"id": "T041A", "status": "todo"},
                    {"id": "T042", "status": "todo"},
                ]
            }
        ),
        encoding="utf-8",
    )

    packet = devpost_packet.build_packet(tasks_path=tasks_path)

    statuses = {item["task"]: item["status"] for item in packet["submission_checklist"]}
    assert statuses == {
        "T020": "done",
        "T021": "doing",
        "T040": "done",
        "T041": "todo",
        "T041A": "todo",
        "T042": "todo",
    }