3.8 KiB
3.8 KiB
D3RO Voice Red E2E 500+ — AI 콘텐츠 신고
기준일: 2026-08-25
이 suite는 실패를 기대하는 Red-path E2E다. 테스트가 RED여야 한다는 뜻이 아니라, 잘못된 요청·권한 우회·소유권 위반·중복·rate limit·관리자 전이를 실제 local Supabase Gateway → Edge Function → PostgreSQL 경로에서 거부하는지를 검증한다. 모든 scenario는 GREEN이어야 한다.
실행 경계
- 실행기:
server/supabase/tests/content-report-red.e2e.mjs - 명령:
npm run test:e2e:red - 대상:
http://127.0.0.1:55321인 disposable local Supabase만 허용 - production/preview URL, production key, 원격 계정에는 fail-closed한다.
- 매 실행마다 임시 사용자 4개를 만들고, 생성된 report를 service role로 먼저 정리한 뒤 auth user를 삭제한다. 원문 snapshot·token·email·service key는 출력하지 않는다.
- PostgREST/RPC에는
sb_secret_local key를 사용한다. 현 local GoTrue admin 삭제는 legacyservice_roleJWT가 필요한 CLI 호환 경계라 fixture cleanup에만 사용하며, remote 환경에는 실행 자체를 허용하지 않는다.
정확한 scenario 수: 650
| family | 수 | 실제 E2E oracle |
|---|---|---|
| 허용되지 않은 HTTP method | 4 | 405 method_not_allowed, Cache-Control: no-store |
| 잘못된/없는 content type | 6 | 415 content_type_must_be_json |
| 인증 우회 | 3 | 401 |
| idempotency key 없음·위조 | 96 | 400 fail-closed |
| root body 누락·추가 key | 64 | strict exact-key 400 invalid_request |
| kind 위조 | 64 | ai_output 이외 차단 |
| source type·generation ID 위조 | 96 | allowlist·UUID·shape 차단 |
| 신고 사유 위조 | 96 | reason allowlist 차단 |
| snapshot 공백·초과·타입 위조 | 96 | 1~4000 code point 경계 차단 |
| comment 공백·초과·타입 위조 | 96 | optional 1~500 code point 경계 차단 |
| 유효 source 3종 | 3 | Talk/Commands/Actions receipt → 201 |
| 멱등성·source ownership·ledger ACL | 7 | replay/conflict/duplicate/cross-user/purpose mismatch/unknown/direct table 차단 |
| rate limit | 11 | 10번째까지 201, 11번째 429 |
| moderation ACL·전이 | 8 | 일반 사용자 차단, manager queue/review/replay/conflict/dismiss/terminal lock |
합계는 650이다. 실행기는 suite 시작 전에 stateless 621개, 종료 전에 전체 650개를 강제 검증하므로 누군가 case를 줄이면 테스트가 fail한다.
포함하지 않는 증거
이 suite는 Edge/DB Red E2E다. Play가 서명한 실기기에서의 Talk·Commands·Actions 신고 sheet, 실제 provider response header, production moderation 운영, 광고·결제·FCM E2E는 대체하지 않는다. 그 경계는 Play 출시 체크리스트에 별도로 남아 있다.