fix: isolate fixture approval and identify dependencies by stage id

This commit is contained in:
NINI
2026-10-10 00:10:01 +09:00
parent 8caed117be
commit 04628d2697
+15 -1
View File
@@ -3,6 +3,7 @@ from copy import deepcopy
import json import json
from pathlib import Path from pathlib import Path
import unittest import unittest
from unittest.mock import patch
import uuid import uuid
import wave import wave
import zlib import zlib
@@ -87,7 +88,9 @@ def production_fixture():
for stage in project["stages"]: for stage in project["stages"]:
if stage["stage_id"] in ("08-scenes", "09-entities"): if stage["stage_id"] in ("08-scenes", "09-entities"):
stage["status"] = "complete" stage["status"] = "complete"
artifacts["09-entities"]["inputs"][1]["revision"] = 2 for ref in artifacts["09-entities"]["inputs"]:
if ref["stage_id"] == "08-scenes":
ref["revision"] = 2
artifacts["09-entities"]["payload"]["appearances"] = [dict(cut_id=c, character_ids=[], background_ids=[]) for c in ("c1", "c2")] artifacts["09-entities"]["payload"]["appearances"] = [dict(cut_id=c, character_ids=[], background_ids=[]) for c in ("c1", "c2")]
preview = artifacts["08-scenes"]["payload"]["preview"] preview = artifacts["08-scenes"]["payload"]["preview"]
preview["scene_file"].update(verified=True, sha256=run.digest(ROOT / job["source"]), blender_version="5.2.2 LTS") preview["scene_file"].update(verified=True, sha256=run.digest(ROOT / job["source"]), blender_version="5.2.2 LTS")
@@ -99,6 +102,7 @@ def production_fixture():
png += chunk(b"IDAT", zlib.compress((b"\0" + b"\0" * 270) * 160)) + chunk(b"IEND", b"") png += chunk(b"IDAT", zlib.compress((b"\0" + b"\0" * 270) * 160)) + chunk(b"IEND", b"")
(ROOT / preview["samples"][0]["media"]["path"]).write_bytes(png) (ROOT / preview["samples"][0]["media"]["path"]).write_bytes(png)
review = next(r for r in project["reviews"] if r["review_id"] == "scenes") review = next(r for r in project["reviews"] if r["review_id"] == "scenes")
review["decision"] = "approved"
review["artifact_refs"] = [dict(stage_id=s, revision=1 if s == "07-cuts" else 2) for s in ("07-cuts", "08-scenes", "09-entities")] review["artifact_refs"] = [dict(stage_id=s, revision=1 if s == "07-cuts" else 2) for s in ("07-cuts", "08-scenes", "09-entities")]
review["feedback"] = "회귀 검사 전용 승인 기록이며 실제 영상의 사용자 승인이 아닙니다" review["feedback"] = "회귀 검사 전용 승인 기록이며 실제 영상의 사용자 승인이 아닙니다"
reference = json.loads((ROOT / "templates/stages/10-references.json").read_text(encoding="utf-8")) reference = json.loads((ROOT / "templates/stages/10-references.json").read_text(encoding="utf-8"))
@@ -186,6 +190,16 @@ class RequestTests(unittest.TestCase):
if stage["stage_id"] in self.artifacts: if stage["stage_id"] in self.artifacts:
write(ROOT / stage["artifact_path"], self.artifacts[stage["stage_id"]]) write(ROOT / stage["artifact_path"], self.artifacts[stage["stage_id"]])
def test_fixture_uses_stage_id_for_reordered_inputs(self):
sample = fixture()
sample[2]["09-entities"]["inputs"].reverse()
with patch(__name__ + ".fixture", return_value=sample):
_, _, artifacts, job = production_fixture()
self.assertEqual(run.prepare(ROOT, job)["frames"], [0])
refs = {r["stage_id"]: r["revision"] for r in artifacts["09-entities"]["inputs"]}
self.assertEqual(refs["08-scenes"], 2)
self.assertEqual(refs["03-script"], 1)
def test_preview_requires_no_new_scenes_approval(self): def test_preview_requires_no_new_scenes_approval(self):
validated = run.prepare(ROOT, self.job) validated = run.prepare(ROOT, self.job)
self.assertEqual(validated["profile"], PROFILE) self.assertEqual(validated["profile"], PROFILE)