Files
Gnuboard7/plugins/_bundled/sirsoft-message_bizppurio/tests/scenarios/sms-channel-dispatch.yaml
T
HeuJung 0bccd867a7 chore(release): 7.0.9 출시 준비 — 출시일자 정렬·공개 배포물 정합 결함 정리
7.0.9 릴리즈 사전 점검에서 공개 배포물에 실릴 결함을 전수 정리한다.

출시일자: 이번 사이클에 버전이 오르거나 새로 추가된 대상 10건의 CHANGELOG
출시일을 실제 공개일로 정렬. 결제 3종은 직전 릴리즈 페이로드로 이미 나갔으므로
제외했다.

내부 역할 호칭: 공개 배포물 26파일 49곳을 중립 표현으로 치환. 이미 공개된
페이로드에는 실질 0건이라 이번 릴리즈가 첫 유입이었다.

최초 출시 규격: 신규 플러그인과 그 언어팩의 CHANGELOG 를 선례 규격으로
재구성. 작성 중 확인되지 않은 서술 2건은 코드 실측으로 교정했다.

번들 ja 언어팩: 번역 값에 남은 한글 40건 정정. 같은 용어가 세 갈래로 갈려
있던 표기도 함께 통일했다. 정정값의 근거는 저장소가 이미 갖고 있었다 —
테스트가 정답으로 단언하는 값과 배포물이 어긋난 상태였다.

재발 방지: 원인은 번역 생성기의 용어집 미등록이므로 출력만 고치면 다음
빌드에서 되살아난다. 용어집에 8건을 등록하고, 규정 3건과 잔존 검출 룰을
신설했다. 룰은 수정 전 배포물로 red 가 되는지를 픽스처로 고정해 판정기가
모집단에 닿는지를 증명한다.
2026-08-24 16:18:52 +09:00

83 lines
4.6 KiB
YAML

# audit:allow test-scenario-coverage reason: |
# Phase 3 는 코어 알림 채널 등록 + 문자 발송 위임 배선(백엔드)이다. axes cross product 의
# 런타임 효과(채널 노출/readiness/전화번호 해석/발송 Job 위임)는 PHPUnit 로 전수 가드된다:
# RegisterNotificationChannelsListenerTest(14) + SmsChannelDriverTest(7) +
# GuestPhoneExtractListenerTest(6) + ChannelRegistrationHookTest(4, 실제 훅 체인).
# 프론트 변경 없음(레이아웃 JSON/컴포넌트 미변경) → frontend-change-requires-e2e 비대상이라
# Playwright spec 은 이번 Phase 미도입. 실발송 왕복(실제 API·webhook)은 계획서 §9 방침대로
# 직접 수행하는 실연동 검증 단계에서 spec 최초 도입하며, 그때 @scenario/@effects 를 매핑한다.
feature: 비즈뿌리오 문자 채널 등록 + 자동발송 (Phase 3)
description: |
코어 알림 시스템에 sms·alimtalk 채널을 등록(코어 무수정 — filter 훅)하고, 3영역
(코어/게시판/이커머스) 알림 이벤트 발생 시 문자를 자동발송한다. 실제 발송 실행·재시도는
Phase 2 SendMessageJob 에 위임한다.
핵심 동작:
- filter_available_channels: sms·alimtalk 메타 노출(name_key/allow_guest:true)
- channel_readiness: 채널별 환경설정 충족 판정(sms=아이디+비번+발신번호, alimtalk=+api_key+sender_key)
- {core.auth, sirsoft-ecommerce, sirsoft-board}.notification.channels: 3영역 후보 확장
- ChannelManager::extend('sms'): SmsChannelDriver 로 발송 위임(alimtalk 은 Phase 6, no-op 스텁)
- 전화번호 해석: 회원=users.mobile / 비회원=data 의 _recipient_phone(D1)
- 비회원 전화번호 주입: 이커머스 extract_data 구독으로 orderer_phone → data(GuestPhoneExtractListener)
- sms 본문이 없으면 발송 skip / 본문 byte 로 SMS·LMS 판별
※ alimtalk 실발송·탭 UI·본문 시드는 Phase 5·6. 발송 이력 DB(bizppurio_dispatches) 영속화는 Phase 4.
※ #597 이후 본문 SSoT 변경: sms 본문 출처는 코어 notification_templates(sms) 가 아니라
bizppurio_templates.sms_body 이고, 발송 게이트는 (행 존재 && is_active && sms_body 비어있지 않음)
이다. 알림톡 게이트·대체 SMS·SMS 단독을 포함한 현행 발송 규칙의 정본은
bizppurio-dispatch.yaml 이며, 본 매니페스트는 채널 등록·준비도·전화번호 해석 축을 담당한다.
axes:
channel: [sms, alimtalk]
recipient: [member, guest]
readiness_state: [ready, missing_credentials, missing_sender]
test_mode: [on, off]
exclusions:
- { channel: alimtalk, recipient: guest, reason: "알림톡 실발송은 Phase 6 — 이번 Phase 는 채널 등록/readiness 만" }
- { readiness_state: missing_sender, channel: alimtalk, reason: "alimtalk readiness 는 자체 키(api_key/sender_key) 부족을 별도 판정 — sender 축은 sms 로 대표" }
effects:
# 채널 등록 (filter_available_channels)
- sms_channel_exposed_in_available_channels
- alimtalk_channel_exposed_in_available_channels
- both_channels_allow_guest_true
- alimtalk_has_no_uses_custom_list_flag_yet
- existing_channel_not_duplicated
# readiness (channel_readiness)
- sms_ready_when_id_password_sender_number_set
- sms_not_ready_reports_credentials_missing_key
- sms_not_ready_reports_sender_number_missing_key
- alimtalk_not_ready_when_api_key_or_sender_key_missing
- non_owned_channel_readiness_passes_through
# 3영역 후보 (prefix.notification.channels)
- three_prefixes_subscribed_core_auth_ecommerce_board
- channel_candidates_deduplicated
# 발송 위임 (SmsChannelDriver)
- member_phone_resolved_from_mobile
- guest_phone_resolved_from_data_recipient_phone
- dispatch_skipped_when_no_template
- dispatch_skipped_when_no_phone
- dispatch_skipped_when_body_blank
- short_body_dispatched_as_sms
- long_body_dispatched_as_lms_with_subject
- send_message_job_dispatched_with_refkey
# 게스트 전화번호 주입 (extract_data)
- guest_order_phone_injected_into_data
- member_order_phone_not_injected
- non_order_notification_passthrough
# 훅 위생
- all_channel_hooks_declared_as_filter_type
test_files:
- plugins/_bundled/sirsoft-message_bizppurio/tests/Unit/Listeners/RegisterNotificationChannelsListenerTest.php
- plugins/_bundled/sirsoft-message_bizppurio/tests/Unit/Services/SmsChannelDriverTest.php
- plugins/_bundled/sirsoft-message_bizppurio/tests/Unit/Listeners/GuestPhoneExtractListenerTest.php
- plugins/_bundled/sirsoft-message_bizppurio/tests/Feature/Notification/ChannelRegistrationHookTest.php
audit:
status: codified