fix: serialize media publishing decisions

This commit is contained in:
ik
2026-09-22 07:58:38 +07:00
parent f3fb5868df
commit 0eb151f5a7
9 changed files with 365 additions and 95 deletions
+19 -9
View File
@@ -207,29 +207,39 @@ def test_admin_media_review_requires_auth() -> None:
def test_admin_media_decisions_require_auth_and_note(monkeypatch) -> None:
assert client.post("/api/v1/admin/media/upgrades/publish", json={"note": "publish"}).status_code == 401
assert client.post("/api/v1/admin/media/upgrades/rollback", json={"asset_url": "https://example.test/a", "note": "rollback"}).status_code == 401
decision = {"asset_ids": ["a" * 64], "expected_version": 1, "note": "publish"}
assert client.post("/api/v1/admin/media/upgrades/publish", json=decision).status_code == 401
assert client.post("/api/v1/admin/media/upgrades/rollback", json={"asset_id": "a" * 64, "expected_version": 1, "note": "rollback"}).status_code == 401
monkeypatch.setattr(admin_router, "publish_quality_upgrades", lambda path, note: {"published": 2, "retained_fallbacks": 2})
monkeypatch.setattr(admin_router, "preview_quality_upgrades", lambda path, asset_ids, expected_version: {"manifest_version": expected_version or 1, "assets": [{"id": asset_ids[0]}]})
preview = client.post(
"/api/v1/admin/media/upgrades/preview",
json={"asset_ids": ["a" * 64], "expected_version": 2},
headers={"Authorization": "Bearer change-me-in-production"},
)
assert preview.status_code == 200
assert preview.json()["manifest_version"] == 2
monkeypatch.setattr(admin_router, "publish_quality_upgrades", lambda path, note, asset_ids, expected_version: {"published": 2, "retained_fallbacks": 2, "manifest_version": expected_version + 1})
publish = client.post(
"/api/v1/admin/media/upgrades/publish",
json={"note": "visual review complete"},
json={"asset_ids": ["a" * 64], "expected_version": 3, "note": "visual review complete"},
headers={"Authorization": "Bearer change-me-in-production"},
)
assert publish.status_code == 200
assert publish.json() == {"published": 2, "retained_fallbacks": 2}
assert publish.json() == {"published": 2, "retained_fallbacks": 2, "manifest_version": 4}
monkeypatch.setattr(admin_router, "rollback_quality_upgrade", lambda path, asset_url, note: {"rolled_back": asset_url, "restored": "https://example.test/fallback"})
monkeypatch.setattr(admin_router, "rollback_quality_upgrade", lambda path, asset_id, note, expected_version: {"rolled_back": asset_id, "restored": "https://example.test/fallback", "manifest_version": expected_version + 1})
rollback = client.post(
"/api/v1/admin/media/upgrades/rollback",
json={"asset_url": "https://example.test/a", "note": "fallback is preferred"},
json={"asset_id": "a" * 64, "expected_version": 4, "note": "fallback is preferred"},
headers={"Authorization": "Bearer change-me-in-production"},
)
assert rollback.status_code == 200
assert rollback.json()["rolled_back"] == "https://example.test/a"
assert rollback.json()["rolled_back"] == "a" * 64
assert client.post(
"/api/v1/admin/media/upgrades/publish",
json={"note": ""},
json={"asset_ids": ["a" * 64], "expected_version": 1, "note": ""},
headers={"Authorization": "Bearer change-me-in-production"},
).status_code == 422