Files
Gnuboard7/modules/_bundled/sirsoft-board/tests/scenarios/board-settings-save-pipeline.yaml
T
HeuJung d970117149 fix(core,ecommerce,board,admin_basic): 고아 카탈로그 차단 + 설정 저장 파이프라인 정합
확장이 훅으로 등록한 카탈로그에서 고른 값은 그 확장이 사라져도 저장값으로 남는다.
그 상태에서 값만 보고 판정하면 이미 제공 불가한 항목이 사용자 화면에 그대로 노출된다.
예외도 경고도 로그도 남지 않아 관리자 화면과 나란히 보지 않으면 드러나지 않는다.

- 결제수단에 지정한 PG, 현금영수증 발급사, 검색엔진 드라이버 세 축에 같은 판정을 적용.
 공개 응답에서는 제거하고 관리자 응답에는 표시를 남긴다 — 운영자가 고쳐야 할 대상이라
 감추면 복구 경로가 사라진다. 서버 검증도 같은 판정을 공유해 화면 우회 제출을 막는다.
- 설정 단건 저장이 벌크 저장과 다른 경로를 타던 문제를 코어·이커머스·게시판에서 정리.
 저장은 성공하고 파생 값만 갱신되지 않아 어느 화면에서 저장했느냐로 결과가 갈렸다.
- 단건 저장의 값 형태 계약 신설. 빈 값으로 되돌릴 수 있게 하고, 타입은 defaults.json 의
 기본값을 SSoT 로 삼는다. 해석 불가한 입력은 조용히 캐스팅하지 않고 거절한다.
- 드라이버 셀렉트를 서버 카탈로그에 바인딩하고, 저장값이 카탈로그에 없으면 그 값을
 드러내는 안내를 8곳 전수에 붙인다. 종전에는 빈 칸으로만 보여 무엇이 저장됐는지
 알 수 없었다.

시나리오 매니페스트 8종을 면제 없이 신설했다. `audit:allow` 는 cross product 와 effects
검사를 함께 끄므로, 면제가 걸린 매니페스트에 선언을 추가하면 검증이 회복되지 않는다.
그 아래에서 대응 테스트가 없는 effect 이름 2건이 살아남아 있었고, 함께 정리했다.
2026-08-14 17:28:49 +09:00

43 lines
2.6 KiB
YAML

feature: 게시판 설정 저장 파이프라인과 저장 훅 (B-2 / B-5)
description: |
게시판 설정도 저장 경로가 셋이다 — 관리자 화면의 벌크 저장, 값 하나만 바꾸는 단건 저장,
여러 게시판에 한꺼번에 적용하는 일괄 적용. 파이프라인 단계(캐시 무효화, 신고 알림 플래그
강제, 숫자 문자열 정규화)를 벌크 경로만 통과하고 있으면, 같은 값을 어느 경로로 저장했느냐에
따라 결과가 달라진다. 저장은 성공하고 파생 값만 어긋나므로 오류가 남지 않는다.
boolean 백필은 반대다 — 벌크 저장은 화면이 보낸 폼 전체가 기준이라 미제출 체크박스를
false 로 채워야 하지만, 단건 저장은 그 키 하나만 바꾸겠다는 뜻이다. 여기서 백필하면
운영자가 건드리지도 않은 다른 토글이 전부 꺼진다.
저장 훅(`core.module_settings.after_save`)의 구독자는 SEO 캐시 무효화다. 게시판 설정의
SEO 메타 템플릿을 바꿔도 캐시가 그대로면 봇 화면만 옛 값을 계속 보여준다.
axis_notes:
save_path: |
bulk_apply 는 게시판 여러 개에 같은 설정을 적용하는 경로다. 대상이 N개라 캐시 무효화도
N개 게시판에 걸려야 한다 — 한 건만 무효화하면 나머지는 옛 값을 유지한다.
카테고리·파이프라인 단계는 조합이 아니라 각 경로가 통과해야 할 목록이라 effects 로 둔다.
axes:
save_path: [single_key, bulk, bulk_apply]
effects:
# 파이프라인 통과 (B-2)
- single_key_save_invalidates_service_cache # 저장 직후 조회가 새 값을 본다
- single_key_save_does_not_backfill_booleans # 단건 저장이 미제출 토글을 끄지 않는다
- bulk_save_backfills_unsubmitted_booleans # 벌크 저장은 폼 전체가 기준 (기존 계약 유지)
- report_notification_flags_forced_on_single_key_save
- numeric_string_normalized_on_single_key_save
- board_settings_storage_isolated_in_tests # 테스트 저장소 격리 (실제 설정 파일 오염 차단)
# 저장 훅과 구독자 (B-5)
- module_settings_after_save_hook_fired
- seo_cache_invalidated_on_module_settings_save
- seo_cache_invalidated_on_bulk_apply # 일괄 적용은 대상 게시판 전부에 걸린다
- seo_cache_untouched_for_other_module # 다른 모듈 식별자의 저장에는 반응하지 않는다
test_files:
- modules/_bundled/sirsoft-board/tests/Unit/BoardSetSettingPipelineTest.php
- modules/_bundled/sirsoft-board/tests/Feature/Admin/BoardSettingsSeoCacheInvalidationTest.php