From 04628d269790231eff68ff8b6ccc7f09c51c88d7 Mon Sep 17 00:00:00 2001 From: NINI Date: Sat, 10 Oct 2026 00:10:01 +0900 Subject: [PATCH] fix: isolate fixture approval and identify dependencies by stage id --- tools/blender/test_runner.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tools/blender/test_runner.py b/tools/blender/test_runner.py index fafef13..96a983b 100644 --- a/tools/blender/test_runner.py +++ b/tools/blender/test_runner.py @@ -3,6 +3,7 @@ from copy import deepcopy import json from pathlib import Path import unittest +from unittest.mock import patch import uuid import wave import zlib @@ -87,7 +88,9 @@ def production_fixture(): for stage in project["stages"]: if stage["stage_id"] in ("08-scenes", "09-entities"): 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")] preview = artifacts["08-scenes"]["payload"]["preview"] 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"") (ROOT / preview["samples"][0]["media"]["path"]).write_bytes(png) 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["feedback"] = "회귀 검사 전용 승인 기록이며 실제 영상의 사용자 승인이 아닙니다" 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: 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): validated = run.prepare(ROOT, self.job) self.assertEqual(validated["profile"], PROFILE)