Files
Gnuboard7/modules/_bundled/sirsoft-ecommerce/tests/scenarios/ecommerce-settings-single-key-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-1)
description: |
이커머스 설정은 저장 전에 여러 단계를 거친다 — 분할 입력 필드 병합, 통화 기본값 동기화,
결제수단 메타데이터 스냅샷, 은행명 다국어 정규화. 벌크 저장(`saveSettings`)은 그 파이프라인을
전부 통과하는데, 단건 저장(`setSetting`)은 값 하나를 파일에 바로 써 넣었다.
그래서 같은 값을 어느 화면에서 저장했느냐에 따라 결과가 달라졌다. 오류는 나지 않는다 —
저장은 성공하고, 파생 값만 갱신되지 않은 채 남는다.
단건 저장이 딛는 기준(payload_basis)도 문제였다. 조회 결과에는 읽기 시점 보강값(카탈로그
라벨 등)이 섞여 있고, 삭제된 통화의 tombstone 은 조회에서 걸러진다. 조회 결과를 기준으로
덮어쓰면 보강값이 파일에 눌어붙고 tombstone 이 사라진다 — 저장된 파일이 기준이어야 한다.
axis_notes:
pipeline_stage: |
벌크 경로가 이미 수행하던 단계를 단건 경로에도 통과시킨다. 각 단계는 서로 다른 입력을
보므로 조합이 아니라 독립 축이다 — 한 단계를 통과시켜도 다른 단계가 빠지면 그 축만
조용히 어긋난다.
axes:
pipeline_stage:
- stored_file_basis # 저장 파일 기준 병합 (조회 결과 기준 금지)
- currency_default_sync # is_default 통화 ↔ default_currency 일치
- split_fields # 화면의 분할 입력 필드를 한 키로 병합
- payment_method_snapshot # 결제수단 카탈로그 메타데이터 박제
- currency_cache_flush # 요청 캐시 무효화
- normalize_category_data # 카테고리 단위 정규화 (은행명 다국어)
effects:
- read_time_enrichment_not_persisted # 읽기 시점 보강값이 파일에 눌어붙지 않는다
- other_category_file_untouched # 단건 저장이 다른 카테고리 파일을 건드리지 않는다
- removed_currency_tombstone_preserved # 삭제 통화 tombstone 보존
- saved_file_default_currency_matches_is_default
- split_input_fields_merged_on_single_key_save
- payment_method_metadata_snapshotted
- currency_request_cache_cleared_on_single_key_save
- bank_name_normalized_to_multilingual
- sibling_keys_preserved_on_bank_save # 은행 저장이 같은 카테고리의 형제 키를 지우지 않는다
test_files:
- modules/_bundled/sirsoft-ecommerce/tests/Unit/Services/EcommerceSettingsSetSettingPipelineTest.php