From cd6ad892af1608ee23c376e4053291728ac61634 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 19 Oct 2026 10:51:06 +0900 Subject: [PATCH] =?UTF-8?q?test(472-6=206-A=20=EC=8B=9C=ED=97=98=20?= =?UTF-8?q?=EA=B0=88=EB=9E=98):=20=EC=84=9C=EB=B2=84=EB=A5=BC=20AISLO=5FDE?= =?UTF-8?q?SIGN=5FSAVE=5FFAIL=5FAFTER=3D<=EC=B0=A8=EB=A1=80>=20=EB=A1=9C?= =?UTF-8?q?=20=EC=BC=9C=EB=A9=B4=20=EA=B7=B8=20=EC=B0=A8=EB=A1=80=20?= =?UTF-8?q?=EB=92=A4=20=EC=9D=BC=EB=B6=80=EB=9F=AC=20=EC=8B=A4=ED=8C=A8=20?= =?UTF-8?q?=E2=80=94=20=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20=EC=8B=A4?= =?UTF-8?q?=ED=8C=A8=20=C2=B7=20=EB=90=98=EB=8F=8C=EB=A6=BC=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=EC=9A=A9(=ED=8F=89=EC=86=8C=20=EC=97=86=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- B06_Section/B06_Section_Router_DesignSave.py | 6 +++++- resources/tester/test_472_6_design_save.py | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/B06_Section/B06_Section_Router_DesignSave.py b/B06_Section/B06_Section_Router_DesignSave.py index d99f91da7..3abdb1ca2 100644 --- a/B06_Section/B06_Section_Router_DesignSave.py +++ b/B06_Section/B06_Section_Router_DesignSave.py @@ -15,6 +15,7 @@ from __future__ import annotations import json import logging +import os from pathlib import Path from typing import Any from uuid import UUID @@ -23,7 +24,6 @@ from fastapi import APIRouter, Depends from fastapi.responses import JSONResponse from pydantic import BaseModel, ConfigDict -from common_util.common_util_auth import get_optional_session from B03_FileInput.B03_FileInput_Repository import get_project_storage_relative_path from B05_Profile.B05_Profile_Schema import ( PageSettingsRequest, @@ -34,6 +34,7 @@ from B05_Profile.B05_Profile_Structures_Schema import StructureSaveRequest from B06_Section.B06_Section_Router_Stations import PlusStationsRequest from B06_Section.B06_Section_Schema import SectionConfirmRequest from common_util import common_util_save_guard as guard +from common_util.common_util_auth import get_optional_session from common_util.common_util_storage import resolve_stored_project_path from config.config_db import get_db_pool @@ -113,6 +114,9 @@ async def _run_steps( except Exception as error: logger.exception("한 본문 저장 %s 차례 실패: project_id=%s", name, project_id) raise StepFailed(name, str(error) or type(error).__name__) from None + # 시험 갈래 — 화면에서 실패 · 되돌림을 돌려 볼 때만(서버를 이 환경 변수로 켬 · 평소 없음) + if os.environ.get("AISLO_DESIGN_SAVE_FAIL_AFTER") == name: + raise StepFailed(name, "시험 갈래 — 이 차례 뒤 일부러 실패") return out[name] if request.settings is not None: diff --git a/resources/tester/test_472_6_design_save.py b/resources/tester/test_472_6_design_save.py index 1b82a0dd5..5f1af1c1f 100644 --- a/resources/tester/test_472_6_design_save.py +++ b/resources/tester/test_472_6_design_save.py @@ -243,3 +243,12 @@ def test_같은_프로젝트_저장이_겹치면_뒤_요청이_기다림() -> No response = asyncio.run(run()) body = json.loads(bytes(response.body).decode("utf-8")) assert body["status"] == "success" and body["waited"] is True and body["steps"] == {} + + +@live +def test_시험_갈래_환경_변수면_그_차례_뒤_실패_되돌림(monkeypatch) -> None: + before = _state(ROOT_DIR) + monkeypatch.setenv("AISLO_DESIGN_SAVE_FAIL_AFTER", "settings") + status, body = _save(_request()) + assert status == 409 and body["step"] == "settings" and body["restored"] is True + assert _state(ROOT_DIR) == before