fix: serialize media publishing decisions
This commit is contained in:
@@ -6,7 +6,7 @@ import io
|
||||
import pytest
|
||||
from PIL import Image
|
||||
|
||||
from rf4_research.media_assets import approve_stored_assets, audit_media_catalog, compare_quality_upgrades, extract_media_candidates, generate_media_derivatives, generate_quality_contact_sheets, inspect_image, media_coverage, media_quality_report, merge_manifest, publish_quality_upgrades, queue_quality_upgrades, reconcile_queued_duplicates, review_asset, rollback_quality_upgrade, store_asset
|
||||
from rf4_research.media_assets import approve_stored_assets, audit_media_catalog, compare_quality_upgrades, extract_media_candidates, generate_media_derivatives, generate_quality_contact_sheets, inspect_image, media_coverage, media_quality_report, merge_manifest, preview_quality_upgrades, publish_quality_upgrades, queue_quality_upgrades, reconcile_queued_duplicates, review_asset, rollback_quality_upgrade, store_asset
|
||||
|
||||
|
||||
def test_extracts_and_classifies_unique_https_media() -> None:
|
||||
@@ -357,7 +357,7 @@ def test_publish_quality_upgrades_switches_mapping_and_retains_fallback(tmp_path
|
||||
report = publish_quality_upgrades(path, note="owner approved quality upgrades")
|
||||
assets = json.loads(path.read_text(encoding="utf-8"))["assets"]
|
||||
|
||||
assert report == {"published": 1, "retained_fallbacks": 1}
|
||||
assert report == {"published": 1, "retained_fallbacks": 1, "manifest_version": 2}
|
||||
assert assets[0]["status"] == "superseded"
|
||||
assert assets[0]["replaced_by"] == assets[1]["asset_url"]
|
||||
assert assets[1]["status"] == "approved"
|
||||
@@ -375,8 +375,30 @@ def test_rollback_quality_upgrade_restores_fallback_atomically(tmp_path: Path) -
|
||||
report = rollback_quality_upgrade(path, asset_url="https://large/pike.webp", note="owner rolled back after visual review")
|
||||
assets = json.loads(path.read_text(encoding="utf-8"))["assets"]
|
||||
|
||||
assert report == {"rolled_back": "https://large/pike.webp", "restored": "https://small/pike.png"}
|
||||
assert report == {"rolled_back": "https://large/pike.webp", "restored": "https://small/pike.png", "manifest_version": 2}
|
||||
assert assets[0]["status"] == "approved"
|
||||
assert "replaced_by" not in assets[0]
|
||||
assert assets[1]["status"] == "upgrade_stored"
|
||||
assert "supersedes" not in assets[1]
|
||||
|
||||
|
||||
def test_publish_selects_ids_and_rejects_stale_manifest_version(tmp_path: Path) -> None:
|
||||
path = tmp_path / "manifest.json"
|
||||
path.write_text(json.dumps({"version": 7, "assets": [
|
||||
{"entity_type": "fish", "entity_key": "fish:pike", "status": "approved", "asset_url": "https://small/pike.png", "local_path": "files/small.png", "sha256": "a" * 64},
|
||||
{"entity_type": "fish", "status": "upgrade_stored", "asset_url": "https://large/pike.webp", "duplicate_of": "https://small/pike.png", "local_path": "files/large.webp", "sha256": "b" * 64, "width": 512, "height": 512},
|
||||
{"entity_type": "fish", "entity_key": "fish:perch", "status": "approved", "asset_url": "https://small/perch.png", "local_path": "files/small-perch.png", "sha256": "c" * 64},
|
||||
{"entity_type": "fish", "status": "upgrade_stored", "asset_url": "https://large/perch.webp", "duplicate_of": "https://small/perch.png", "local_path": "files/large-perch.webp", "sha256": "d" * 64, "width": 512, "height": 512},
|
||||
]}), encoding="utf-8")
|
||||
|
||||
assert preview_quality_upgrades(path, asset_ids=["b" * 64]) == {
|
||||
"manifest_version": 7,
|
||||
"assets": [{"id": "b" * 64, "asset_url": "https://large/pike.webp", "duplicate_of": "https://small/pike.png", "label": None, "width": 512, "height": 512}],
|
||||
}
|
||||
report = publish_quality_upgrades(path, asset_ids=["b" * 64], expected_version=7, note="one reviewed replacement")
|
||||
assert report["manifest_version"] == 8
|
||||
saved = json.loads(path.read_text(encoding="utf-8"))
|
||||
assert [item["status"] for item in saved["assets"]] == ["superseded", "approved", "approved", "upgrade_stored"]
|
||||
|
||||
with pytest.raises(ValueError, match="manifest version conflict"):
|
||||
publish_quality_upgrades(path, asset_ids=["d" * 64], expected_version=7, note="stale tab")
|
||||
|
||||
Reference in New Issue
Block a user