chore(sirsoft-board,sirsoft-ecommerce,message_bizppurio): 코드 주석 내부 이슈번호 제거 + 시나리오 매니페스트 저장검증 effect 반영

PR 준비 비판적 재검토 중 발견한 잔여 항목 2건 정리.

- 게시판·이커머스 알림톡 연동 UI 테스트/레이아웃의 e2e:allow 주석·describe
 블록에 남아있던 작업 중 이슈번호 제거 (audit 정규식은 형식만 검사해
 이슈번호 잔존은 검출하지 못함)
- alimtalk-dispatch-binding.yaml 시나리오 매니페스트에 NotificationBindingService
 저장 시점 승인 재검증(assertSendable) effect 2건 추가 — 코드/테스트는
 이전 커밋에 있었으나 매니페스트만 누락
This commit is contained in:
chym1217
2026-07-28 16:56:13 +09:00
parent 0a6a8d6968
commit 023ab4f099
6 changed files with 18 additions and 15 deletions
@@ -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);
@@ -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);
@@ -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",
@@ -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);
@@ -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);
@@ -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