fix: resolve gallery labels from current plans and preserve render snapshots
Community checks / verify (push) Skipped
Verify Frame Flow / verify (push) Failing after 7m11s

This commit is contained in:
渡口浪人
2026-10-23 23:10:50 +08:00
parent 30bc5a0bad
commit ed3b61bc58
8 changed files with 176 additions and 40 deletions
+89
View File
@@ -692,3 +692,92 @@ def test_terminal_current_picture_uses_synced_live_asset(
),
)
assert client.get(endpoint).json()["items"][0]["current"] is False
def test_plan_rename_uses_current_labels_without_rerendering_legacy_versions(
client, service, library_source
):
import json
from pigway_frame_flow.storage.database import encode
plan = create_plan(client, name="Original", width=1200, height=1600)
bind(client, "living-room", "family", plan)
picture = import_picture(client)
endpoint = "/api/v1/source-images/" + picture["id"] + "/generate"
original = client.post(endpoint, json={"plan_id": plan["id"]}).json()[0]
snapshot = original["plan"]
original_bytes = service.assets.path(original["asset_id"]).read_bytes()
# Existing deployed versions used the entire plan, including its old name.
legacy_revision = hashlib.sha256(encode(snapshot).encode()).hexdigest()
service.db.execute(
"UPDATE library_versions SET revision=? WHERE asset_id=?",
(legacy_revision, original["asset_id"]),
)
provenance = json.loads(
service.db.one(
"SELECT payload FROM asset_sources WHERE asset_id=?",
(original["asset_id"],),
)["payload"]
)
provenance["revision"] = legacy_revision
service.db.execute(
"UPDATE asset_sources SET payload=? WHERE asset_id=?",
(encode(provenance), original["asset_id"]),
)
payload = {k: v for k, v in plan.items() if k not in ("id", "archived")}
renamed = {**payload, "name": "Frame v2.1"}
assert (
client.put("/api/v1/generation-plans/" + plan["id"], json=renamed).status_code
== 200
)
repeated = client.post(endpoint, json={"plan_id": plan["id"]}).json()[0]
assert repeated["asset_id"] == original["asset_id"]
assert repeated["revision"] == legacy_revision
assert repeated["plan"] == snapshot
assert repeated["plan_name"] == "Frame v2.1"
assert repeated["name"] == "photo-Frame v2.1.jpg"
assert repeated["stored_name"] == original["stored_name"]
assert repeated["matches_current_plan"] is True
assert service.assets.path(original["asset_id"]).read_bytes() == original_bytes
assert service.db.one("SELECT COUNT(*) AS n FROM library_versions")["n"] == 1
source_version = client.get("/api/v1/source-libraries/family/images").json()[
"items"
][0]["versions"][0]
terminal_version = client.get(
"/api/v1/library-terminals/living-room/images"
).json()["items"][0]
assert source_version["plan_name"] == terminal_version["plan_name"] == "Frame v2.1"
assert source_version["name"] == terminal_version["name"]
assert (
client.put(
"/api/v1/generation-plans/" + plan["id"], json={**renamed, "quality": 70}
).status_code
== 200
)
old = client.get("/api/v1/library-terminals/living-room/images").json()["items"][0]
assert old["matches_current_plan"] is False and old["plan"]["quality"] == 85
updated = client.post(endpoint, json={"plan_id": plan["id"]}).json()[0]
assert (
updated["asset_id"] != original["asset_id"]
and updated["matches_current_plan"] is True
)
assert updated["plan"]["quality"] == 70
client.delete("/api/v1/library-terminals/living-room/binding")
assert client.delete("/api/v1/generation-plans/" + plan["id"]).status_code == 204
versions = client.get("/api/v1/source-libraries/family/images").json()["items"][0][
"versions"
]
assert len(versions) == 2 and all(v["plan_archived"] for v in versions)
def test_source_deletion_removes_unreferenced_archived_plans(
client, service, library_source
):
plan = create_plan(client)
assert client.delete("/api/v1/generation-plans/" + plan["id"]).status_code == 204
assert client.delete("/api/v1/photo-sources/family").status_code == 204
assert (
service.db.one("SELECT id FROM library_plans WHERE source_id='family'") is None
)
assert client.get("/api/v1/generation-plans?source_id=family").status_code == 404