fix: resolve gallery labels from current plans and preserve render snapshots
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user