From 023ab4f099168bb5c587945ba4919e7dc1e4ac44 Mon Sep 17 00:00:00 2001 From: chym1217 Date: Tue, 28 Jul 2026 16:14:44 +0900 Subject: [PATCH] =?UTF-8?q?chore(sirsoft-board,sirsoft-ecommerce,message?= =?UTF-8?q?=5Fbizppurio):=20=EC=BD=94=EB=93=9C=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EB=82=B4=EB=B6=80=20=EC=9D=B4=EC=8A=88=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20+=20=EC=8B=9C=EB=82=98=EB=A6=AC=EC=98=A4?= =?UTF-8?q?=20=EB=A7=A4=EB=8B=88=ED=8E=98=EC=8A=A4=ED=8A=B8=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=EA=B2=80=EC=A6=9D=20effect=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR 준비 비판적 재검토 중 발견한 잔여 항목 2건 정리. - 게시판·이커머스 알림톡 연동 UI 테스트/레이아웃의 e2e:allow 주석·describe 블록에 남아있던 작업 중 이슈번호 제거 (audit 정규식은 형식만 검사해 이슈번호 잔존은 검출하지 못함) - alimtalk-dispatch-binding.yaml 시나리오 매니페스트에 NotificationBindingService 저장 시점 승인 재검증(assertSendable) effect 2건 추가 — 코드/테스트는 이전 커밋에 있었으나 매니페스트만 누락 --- .../admin-board-notification-channel-toggle.test.tsx | 8 ++++---- .../layouts/notificationRowFooterExtensionPoint.test.tsx | 6 +++--- .../_tab_notification_definitions.json | 2 +- .../adminEcommerceNotificationChannelToggle.test.tsx | 6 +++--- .../layouts/notificationRowFooterExtensionPoint.test.tsx | 6 +++--- .../tests/scenarios/alimtalk-dispatch-binding.yaml | 5 ++++- 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/modules/_bundled/sirsoft-board/resources/js/__tests__/layouts/admin-board-notification-channel-toggle.test.tsx b/modules/_bundled/sirsoft-board/resources/js/__tests__/layouts/admin-board-notification-channel-toggle.test.tsx index 843dcfdf..af3ad751 100644 --- a/modules/_bundled/sirsoft-board/resources/js/__tests__/layouts/admin-board-notification-channel-toggle.test.tsx +++ b/modules/_bundled/sirsoft-board/resources/js/__tests__/layouts/admin-board-notification-channel-toggle.test.tsx @@ -1,6 +1,6 @@ -// e2e:allow 채널 토글 저장(upsert)·하단탭 필터는 본 레이아웃 회귀테스트(vitest) + MCP 실브라우저 검증(하단탭 노출/저장/발송)으로 커버. 알림설정 화면 Playwright 인프라 부재 (#28) +// e2e:allow 채널 토글 저장(upsert)·하단탭 필터는 본 레이아웃 회귀테스트(vitest) + MCP 실브라우저 검증(하단탭 노출/저장/발송)으로 커버. 알림설정 화면 Playwright 인프라 부재 /** - * 게시판 알림 채널 토글 저장 upsert + 하단 서브탭 필터 회귀 가드 (#28) + * 게시판 알림 채널 토글 저장 upsert + 하단 서브탭 필터 회귀 가드 * * @description * 회귀 시나리오 (코어 admin 템플릿과 동일 구조): @@ -21,7 +21,7 @@ import tab from '../../../layouts/admin/partials/admin_board_settings/_tab_notif const tabJson = JSON.stringify(tab); -describe('게시판 알림 채널 토글 저장 upsert (#28)', () => { +describe('게시판 알림 채널 토글 저장 upsert', () => { it('토글 저장이 upsert 형태다 (미저장 채널은 새 엔트리로 추가)', () => { // 엔트리 존재 판별용 .some(...) — 있으면 map 으로 토글, 없으면 spread 로 새 엔트리 추가 expect(/\.some\(c => c\.id === ch\.id\)/.test(tabJson)).toBe(true); @@ -36,7 +36,7 @@ describe('게시판 알림 채널 토글 저장 upsert (#28)', () => { }); }); -describe('게시판 하단 서브탭 필터 source 분기 (#28)', () => { +describe('게시판 하단 서브탭 필터 source 분기', () => { it('코어기본 채널은 미저장 노출 유지, 확장 채널은 명시적 활성만 노출', () => { expect(/c\.source === 'core'/.test(tabJson)).toBe(true); expect(/is_active !== false/.test(tabJson)).toBe(true); diff --git a/modules/_bundled/sirsoft-board/resources/js/__tests__/layouts/notificationRowFooterExtensionPoint.test.tsx b/modules/_bundled/sirsoft-board/resources/js/__tests__/layouts/notificationRowFooterExtensionPoint.test.tsx index fcd56397..457d2964 100644 --- a/modules/_bundled/sirsoft-board/resources/js/__tests__/layouts/notificationRowFooterExtensionPoint.test.tsx +++ b/modules/_bundled/sirsoft-board/resources/js/__tests__/layouts/notificationRowFooterExtensionPoint.test.tsx @@ -1,7 +1,7 @@ // e2e:allow 레이아웃 트리 위치 검증(정적 구조 회귀 가드)이라 vitest 로 충분. 실제 화면 렌더는 -// Chrome MCP 로 확인·수정까지 완료(2026-07-28). 알림설정 화면 Playwright 인프라 부재 (#28) +// Chrome MCP 로 확인·수정까지 완료(2026-07-28). 알림설정 화면 Playwright 인프라 부재 /** - * 게시판 알림 정의 행 하단 확장 슬롯(notification_definition_row_footer) 위치 회귀 가드 (#28) + * 게시판 알림 정의 행 하단 확장 슬롯(notification_definition_row_footer) 위치 회귀 가드 * * @description * 회귀 시나리오: extension_point 를 행 정보 컬럼(`flex-1 min-w-0`) 밖에 형제로 잘못 넣으면, @@ -36,7 +36,7 @@ function findAll(node: AnyNode | undefined, pred: (n: AnyNode) => boolean, resul return results; } -describe('게시판 알림 행 footer extension_point 위치 (#28)', () => { +describe('게시판 알림 행 footer extension_point 위치', () => { it('extension_point 는 정보 컬럼(flex-1 min-w-0)의 children 이다', () => { const infoColumns = findAll(tab as AnyNode, (n) => n.props?.className === 'flex-1 min-w-0'); expect(infoColumns.length).toBeGreaterThan(0); diff --git a/modules/_bundled/sirsoft-board/resources/layouts/admin/partials/admin_board_settings/_tab_notification_definitions.json b/modules/_bundled/sirsoft-board/resources/layouts/admin/partials/admin_board_settings/_tab_notification_definitions.json index f15da32b..0a2bf959 100644 --- a/modules/_bundled/sirsoft-board/resources/layouts/admin/partials/admin_board_settings/_tab_notification_definitions.json +++ b/modules/_bundled/sirsoft-board/resources/layouts/admin/partials/admin_board_settings/_tab_notification_definitions.json @@ -1,7 +1,7 @@ { "meta": { "is_partial": true, - "_e2e_allow": "e2e:allow 채널 토글 저장(upsert)·하단탭 필터는 레이아웃 회귀테스트(vitest) + MCP 실브라우저 검증(하단탭 노출/저장/발송)으로 커버. 알림설정 화면 Playwright 인프라 부재 (#28)", + "_e2e_allow": "e2e:allow 채널 토글 저장(upsert)·하단탭 필터는 레이아웃 회귀테스트(vitest) + MCP 실브라우저 검증(하단탭 노출/저장/발송)으로 커버. 알림설정 화면 Playwright 인프라 부재", "description": "게시판 알림 설정 탭 — 채널 토글 + 2단 탭 + 채널별 템플릿 목록" }, "id": "tab_content_notification_definitions", diff --git a/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/adminEcommerceNotificationChannelToggle.test.tsx b/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/adminEcommerceNotificationChannelToggle.test.tsx index 1965c9de..705c72b3 100644 --- a/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/adminEcommerceNotificationChannelToggle.test.tsx +++ b/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/adminEcommerceNotificationChannelToggle.test.tsx @@ -1,5 +1,5 @@ /** - * 이커머스 알림 채널 토글 저장 upsert + 하단 서브탭 필터 회귀 가드 (#28) + * 이커머스 알림 채널 토글 저장 upsert + 하단 서브탭 필터 회귀 가드 * * @description * 회귀 시나리오 (코어 admin 템플릿과 동일 구조): @@ -20,7 +20,7 @@ import tab from '../../../layouts/admin/partials/admin_ecommerce_settings/_tab_n const tabJson = JSON.stringify(tab); -describe('이커머스 알림 채널 토글 저장 upsert (#28)', () => { +describe('이커머스 알림 채널 토글 저장 upsert', () => { it('토글 저장이 upsert 형태다 (미저장 채널은 새 엔트리로 추가)', () => { // 엔트리 존재 판별용 .some(...) — 있으면 map 으로 토글, 없으면 spread 로 새 엔트리 추가 expect(/\.some\(c => c\.id === ch\.id\)/.test(tabJson)).toBe(true); @@ -35,7 +35,7 @@ describe('이커머스 알림 채널 토글 저장 upsert (#28)', () => { }); }); -describe('이커머스 하단 서브탭 필터 source 분기 (#28)', () => { +describe('이커머스 하단 서브탭 필터 source 분기', () => { it('코어기본 채널은 미저장 노출 유지, 확장 채널은 명시적 활성만 노출', () => { expect(/c\.source === 'core'/.test(tabJson)).toBe(true); expect(/is_active !== false/.test(tabJson)).toBe(true); diff --git a/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/notificationRowFooterExtensionPoint.test.tsx b/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/notificationRowFooterExtensionPoint.test.tsx index caf7d366..53d85fec 100644 --- a/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/notificationRowFooterExtensionPoint.test.tsx +++ b/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/notificationRowFooterExtensionPoint.test.tsx @@ -1,7 +1,7 @@ // e2e:allow 레이아웃 트리 위치 검증(정적 구조 회귀 가드)이라 vitest 로 충분. 실제 화면 렌더는 -// Chrome MCP 로 확인·수정까지 완료(2026-07-28). 알림설정 화면 Playwright 인프라 부재 (#28) +// Chrome MCP 로 확인·수정까지 완료(2026-07-28). 알림설정 화면 Playwright 인프라 부재 /** - * 이커머스 알림 정의 행 하단 확장 슬롯(notification_definition_row_footer) 위치 회귀 가드 (#28) + * 이커머스 알림 정의 행 하단 확장 슬롯(notification_definition_row_footer) 위치 회귀 가드 * * @description * 회귀 시나리오: extension_point 를 행 정보 컬럼(`flex-1 min-w-0`) 밖에 형제로 잘못 넣으면, @@ -36,7 +36,7 @@ function findAll(node: AnyNode | undefined, pred: (n: AnyNode) => boolean, resul return results; } -describe('이커머스 알림 행 footer extension_point 위치 (#28)', () => { +describe('이커머스 알림 행 footer extension_point 위치', () => { it('extension_point 는 정보 컬럼(flex-1 min-w-0)의 children 이다', () => { const infoColumns = findAll(tab as AnyNode, (n) => n.props?.className === 'flex-1 min-w-0'); expect(infoColumns.length).toBeGreaterThan(0); diff --git a/plugins/_bundled/sirsoft-message_bizppurio/tests/scenarios/alimtalk-dispatch-binding.yaml b/plugins/_bundled/sirsoft-message_bizppurio/tests/scenarios/alimtalk-dispatch-binding.yaml index 62585477..d4f549fd 100644 --- a/plugins/_bundled/sirsoft-message_bizppurio/tests/scenarios/alimtalk-dispatch-binding.yaml +++ b/plugins/_bundled/sirsoft-message_bizppurio/tests/scenarios/alimtalk-dispatch-binding.yaml @@ -7,7 +7,8 @@ # - 카카오→발송 변환(kakao_elements 축): AlimtalkPayloadMapperTest — 본문/버튼/바로연결/title·header·item·highlight·link 변환 + #{var} 치환 + 부재 필드 생략. # - 캐시 수동 초기화 엔드포인트·권한: AlimtalkTemplateControllerTest + NotificationBindingServiceTest. # - template 증강: SeedChannelTemplatesListenerTest — 회원판정/기본문구/채널추가/멱등. -# - 연동 즉시저장·조회·권한: NotificationBindingServiceTest + NotificationBindingEndpointTest. +# - 연동 즉시저장·조회·권한(저장 시점 카카오 승인 재검증 포함): NotificationBindingServiceTest + +# NotificationBindingEndpointTest. # - 채널 메타(is_test_mode): RegisterNotificationChannelsListenerTest. # - overlay 전용칸·배너·i18n·무오염: notification_tab_binding.test.tsx. # e2e_* 축(브라우저 왕복: 편집 열기→드롭다운 선택→즉시 저장→toast→배너)은 실제 카카오 발신 @@ -107,6 +108,8 @@ effects: - store_creates_or_updates_binding_immediately - store_empty_code_unbinds - only_approved_templates_offered_as_options + - bind_rejects_unapproved_template_code + - bind_rejects_when_kakao_lookup_fails - bindings_map_returned_for_prefill - view_permission_required_for_read - manage_permission_required_for_store