Files
Gnuboard7/modules/_bundled/sirsoft-ecommerce/tests/Concerns/RegistersTestCashReceiptProvider.php
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

38 lines
1.4 KiB
PHP

<?php
namespace Modules\Sirsoft\Ecommerce\Tests\Concerns;
use App\Extension\HookManager;
/**
* 테스트용 현금영수증 발급 프로바이더 등록 헬퍼
*
* 현금영수증 프로바이더 선택값은 저장만으로 유효해지지 않는다 — 그 프로바이더를 실제로
* 제공하는 확장이 `sirsoft-ecommerce.cash_receipt.registered_providers` 훅에 자신을
* 등록해야 한다(A3). 그래서 설정값만 넣고 확장을 등록하지 않으면 "제공자 없음" 상태가 되며,
* 이는 운영에서 플러그인을 제거한 상태와 같다.
*
* 프로바이더가 살아 있는 상황을 검증하려는 테스트는 이 트레이트를 사용해 레지스트리에도
* 등록한다. 등록은 `HookManager` 정적 상태에 남지만 `ModuleTestCase` 가 테스트마다
* 스냅샷/복원하므로 누수되지 않는다.
*/
trait RegistersTestCashReceiptProvider
{
/**
* 현금영수증 발급 프로바이더를 레지스트리에 등록합니다.
*
* @param string $providerId 프로바이더 ID
*/
protected function registerCashReceiptProvider(string $providerId): void
{
HookManager::addFilter(
'sirsoft-ecommerce.cash_receipt.registered_providers',
function (array $providers) use ($providerId) {
$providers[] = ['id' => $providerId, 'name' => strtoupper($providerId)];
return $providers;
}
);
}
}