chore: 테스트 환경 전면 개선 및 Vitest 마이그레이션#262
Merged
LivingLikeKrillin merged 41 commits intodevelopmentfrom Mar 9, 2026
Merged
Conversation
권한 제어, 서비스 진입점, 파티룸/플레이리스트/프로필 폼 검증, PKCE 인증 함수에 대한 테스트를 추가하여 커버리지를 개선한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…, silent, parse-href) 타입 가드, 데이터 변환, 아바타 잠금 판단, 이벤트 발행자, Promise 처리, URL 파라미터 처리에 대한 테스트를 추가한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Chat 클래스, VariableProcessor/BoldProcessor/LineBreakProcessor, delay 유틸, Singleton 데코레이터에 대한 테스트를 추가한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ck/SkipGlobalErrorHandling 데코레이터) 미리보기 트랙 변환, CSS 클래스 병합, 애니메이션 프레임, MockReturn/MockResolve/SkipGlobalErrorHandling 데코레이터에 대한 테스트를 추가한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
등급별 분류, 빈 배열 처리, gradePriorities 순서 보장을 검증한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…eview.store, user-preference.store) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase A: API 에러 처리 + 인터셉터 (get-error-message, get-error-code, is-auth-error, error-emitter, response interceptors) Phase B: Zustand 스토어 (current-partyroom.store, ui-state.store) Phase C: 데이터 변환 + 스토리지 (restriction-panel-list-item, pkce-storage) Phase D: React 훅 renderHook (useDisclosure, useDebounce, useDidMountEffect, useDidUpdateEffect) Phase E: React 컴포넌트 render (Input, InputNumber, PreviewOverlay, Checkbox) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SSR 안전성을 위해 클라이언트 전용 UI 컴포넌트 export를 index.ts에서 index.ui.ts로 분리하고, SWC에 TSX 파싱 및 React automatic runtime 설정을 추가하여 테스트 환경을 개선합니다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
variable-processor-util, MoveableHelper, ReactPlayerAPI, CircularBufferAdapter, ObserverAdapter, PartyroomClient, SocketClient, useHandleSubscriptionEvent Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
update, mergeDeep, cloneDeep, playback.model, calculateDimensions 기존 테스트에 엣지 케이스 보강 (원시값, immutability, 음수 방지 등) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- msw@2 설치 및 Jest 인프라 구성 (커스텀 환경, 리졸버, 핸들러) - PlaylistsService 통합 테스트 6개 (axios → 인터셉터 → MSW 파이프라인) - useCreatePlaylist 뮤테이션 통합 테스트 4개 (캐시 무효화, errorEmitter) - useSearchMusics 쿼리 통합 테스트 4개 (enabled, 캐시, 에러 전이) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Button, Select, TextArea, RadioSelectList, FormItem, Dialog, Drawer, Tab, CollapseList, Tooltip, Tag, Profile, Loading, Typography, BackButton, InfiniteScroll, UserListItem, DjListItem Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
useOnError, useAppRouter, useIntersectionObserver, useVerticalStretch, usePortalRoot, useChangeLanguage Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
서비스 계층: partyrooms, crews, djs, response interceptor 뮤테이션 훅: enterPartyroom, createPartyroom, adjustGrade, blockCrew, unblockCrew, updatePlaylist, removePlaylist, addPlaylistTrack, movePlaylistTrack, registerMeToQueue, unregisterMeFromQueue 쿼리 훅: fetchPlaylistTracks, fetchMe Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
entities: useIsGuest, useIsWalletLinked, useIsNft, useRemoveCurrentPartyroomCaches features 퍼미션: canAdjustGrade, canClose, canEdit, canImposePenalty, canRemoveChatMessage, canLiftPenalty, canViewPenalties, canLock/UnlockDjingQueue, canDeleteDjFromQueue features store: useCrews Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- ActionButton: 렌더링, 클릭, disabled, active 색상(red/green/white) - AuthorityHeadset: 등급별 색상 분기 (LISTENER=null, HOST=red 등) - DimOverlay: 클릭 핸들러, fixed 레이아웃, className 커스텀 - VideoTitle: 재생 없음=빈 메시지, 재생 중=마키 표시 - Notice: 공지 없음=빈 상태, 공지=마키, 캠페인 아이콘 상시 표시 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- TESTING.md 신규: 테스트 기법 6종, MSW 패턴, 유닛 패턴, 제약사항 - CONTRIBUTING.md: Testing 섹션 추가 - REACT_QUERY.md: 네이밍 규칙 kebab-case 반영, QueryClient 기본값 테이블 - DOCS_ENTRY.md: TESTING.md, TEST_ROADMAP.md 항목 추가 및 날짜 갱신 - README.md: Testing 링크 추가 - TEST_ROADMAP.md: 151 suites / 863 tests 현황 반영, Phase 2~6 체크리스트 갱신 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- MSW 핸들러 확장 및 API 통합 테스트 전 레이어 커버 - 비즈니스 훅(close/adjust-grade/impose-penalty/enter) 테스트 추가 - 엔티티 훅(alert/penalty-alert/wallet-sync/fetch-me) 테스트 추가 - 위젯 컴포넌트(header/sidebar/crews-panel/display-board 등) 테스트 추가 - jest.config.js d3-force ESM 변환 설정 추가 - TEST_ROADMAP.md를 docs/로 이동 및 미달성 사유 기술적 근거 반영 - Function 타입 → 명시적 함수 시그니처로 ESLint 오류 일괄 수정 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
아키텍처 결정 기록(ADR) 11건과 기술 부채 레지스트리를 추가한다. - ADR 001-008: 채택된 결정 (Zustand DI, WebSocket 콜백, barrel export 등) - ADR 009-011: 미결정 (에러 모니터링, 접근성, FSD import 경계) - TECH_DEBT.md: P0-P2 기술 부채 12건 추적 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- /link/[linkDomain] 경로에 generateMetadata 추가 (og:title, og:description, og:image) - /api/og Route Handler로 satori + resvg 기반 동적 OG 이미지 생성 - 전역 에러 핸들러에서 /link/* 경로 401 리다이렉트 예외 처리 - next.config.js에 @resvg/resvg-js 외부 패키지 등록 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- enterByLink(POST, 게스트 세션 생성 부작용) → getPartyroomByLink(GET, 순수 조회)로 변경 - 게스트 자동 로그인을 usersService.signInGuest()로 독립 처리 - getRoomIdByDomain 중복 메서드 제거 - OG 메타/이미지 API URL에서 /enter 경로 제거 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
useRef 가드를 추가하여 token exchange가 한 번만 실행되도록 수정 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- PlaylistTrack.linkId: number → string (유튜브 비디오 ID) - DjingQueue.isRegistered → registered (Swagger 필드명 일치) - getCrews 미사용 엔드포인트 및 관련 타입 삭제 - AvatarCompositionType enum 추가, PartyroomCrew·GetMyProfileSummaryResponse에 적용 - Avatar 컴포넌트 분기를 faceUri 존재 여부 → compositionType 기반으로 개선 - playlist-action.context removeTrack 파라미터 타입 수정 (linkId → trackId) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DJ-004 추가, CACHE_MISS_SESSION(PTR-005) 제거, PTR 코드 재번호 부여 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- partyroom enter/exit: /enter → /crews, /exit → DELETE /crews/me - DJ queue: /djs → /dj-queue, skip: POST → DELETE /playbacks/current - playlist mutation 응답: void(204)로 변경, 불필요한 응답 타입 제거 - MSW 핸들러 및 통합 테스트 14개 파일 갱신 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
discriminated union(success/failure) 제거 → 플랫 응답 타입으로 변경 response.success 분기 로직 제거, try/catch 기반으로 전환 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- PartyroomEventType enum: 과거형 네이밍으로 통일 (PARTYROOM_CLOSED 등) - WebSocketEventBase 도입 (flat partyroomId, id, timestamp) - CrewAvatar 중첩 타입 도입, flattenCrewFromEvent 헬퍼 추가 - PARTYROOM_ACCESS → CREW_ENTERED/CREW_EXITED 분리 - PLAYBACK_SKIP 제거 (DELETE /playbacks/current로 대체) - Playback 타입에서 likeCount/dislikeCount/grabCount 제거 - 콜백 훅 13개 갱신, 테스트 12개 suite 갱신 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PLAYBACK_STARTED, PLAYBACK_DEACTIVATED 핸들러에서 invalidateDjingQueue 호출을 제거하고, 사용처가 없어진 useInvalidateDjingQueue 유틸을 삭제한다. DJ 큐 상태 변경은 DJ_QUEUE_CHANGED 이벤트 핸들러가 유일한 진입점이 된다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MeHydration(SSR prefetch)이 쿠키 없이 요청하여 항상 401 실패하던 문제 해소. 개인 데이터는 클라이언트에서 직접 fetch하는 것이 적절하므로 제거한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
RootLayout에 있던 PartyroomConnectionProvider(useFetchMe 호출)를 parties/layout.tsx로 내려 인증 흐름(callback 등)에서 불필요한 Me fetch가 발생하지 않도록 한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
parseHtmlToReact가 HTML attrs를 React createElement에 그대로 전달하므로 React DOM 호환을 위해 className을 사용해야 한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
dynamic import 컴포넌트에 ref를 전달하면 forwardRef 경고가 발생한다. onReady 콜백에서 이미 playerRef를 설정하고 있으므로 ref prop은 불필요. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
useState 초기화 함수는 SSR에서도 실행되어 서버에서 STOMP 클라이언트가 생성되고 WebSocket 연결 시도 후 3000 (Unauthorized) 에러가 발생했다. 브라우저 환경에서만 인스턴스를 생성하도록 변경한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
WalletConnect가 SSR에서 WebSocket relay 연결을 시도하여 3000 (Unauthorized) 에러가 발생하던 문제 해소. 지갑 기능은 parties, settings 경로에서만 사용된다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DialogProvider가 RootLayout에 있어 다이얼로그 내용이 WalletProvider 바깥에서 렌더링되는 문제가 있었다. WalletProvider를 RootLayout으로 복원하고 wagmi의 ssr: true 옵션으로 SSR WebSocket 문제를 해결한다. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- parties/layout: profileUpdated 미완료 시 하위 컴포넌트 마운트 차단 - SelectedAvatarStateProvider: useEffect dependency에서 selectedFacePos 제거하여 무한루프 해소 - PartyroomConnectionProvider: SSR에서 PartyroomClient 초기화 방지 (useRef + useEffect) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ReactElement → ReactNode로 수정하여 Next.js layout children과 호환되도록 함 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- vitest.config.ts, vitest.setup.ts 생성 - jest.config.js, jest.resolver.js, jest.setup.js, tsconfig.test.json 제거 - jest-msw-env.ts 커스텀 환경 제거 (Vitest jsdom이 fetch 네이티브 지원) - 199개 테스트 파일에서 jest.* → vi.* 일괄 치환 - eslint-plugin-jest → 제거 (eslint.config.js 정리) - Mock 타입을 글로벌 선언으로 제공 (types/vitest.d.ts) - 미사용 의존성 제거: jest, @swc/jest, jest-environment-jsdom, @types/jest, @types/jest-plugin-context, jest-plugin-context, given2 - 의존성 추가: vitest, @vitest/coverage-v8, jsdom - 201 파일, 999 테스트 전체 통과 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tsc --noEmit 시 테스트 파일의 vitest 글로벌(describe, test, vi 등) 타입 인식을 위해 types에 vitest/globals를 추가하고, 기존 타입 에러가 있는 테스트 파일은 exclude로 복원 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Changes
Test plan
vitest run전체 테스트 통과 (201 suites, 999 tests)tsc --noEmit타입 체크 통과🤖 Generated with Claude Code