1- import { http , HttpResponse } from "msw" ;
1+ import { http , HttpResponse , passthrough } from "msw" ;
22import {
33 AUTH_ERROR ,
4- ACTIVITY_ERROR ,
5- USER_ERROR ,
4+ BOOKMARK_ERROR ,
65 POST_ERROR ,
6+ READPOST_ERROR ,
7+ USER_ERROR ,
78 COMMON_ERROR ,
89} from "@/shared/consts/errorCodes" ;
910
@@ -44,23 +45,37 @@ export const scenarioAuth = {
4445
4546/** 북마크 에러 시나리오 */
4647export const scenarioBookmark = {
47- /** 북마크 추가 => 이미 북마크한 게시글 */
48+ // POST /api/v1/activities/bookmarks
49+ /** 북마크 추가 => 이미 북마크한 게시글 (BOOKMARK409_1) */
4850 alreadyBookmarked : http . post ( url ( "/api/v1/activities/bookmarks" ) , ( ) =>
49- err ( ACTIVITY_ERROR . ALREADY_BOOKMARKED , "이미 북마크한 게시글입니다." , 409 ) ,
51+ err ( BOOKMARK_ERROR . ALREADY_BOOKMARKED , "이미 북마크한 게시글입니다." , 409 ) ,
52+ ) ,
53+ /** 북마크 추가 => 게시글을 찾을 수 없음 (POST404_1) */
54+ postPostNotFound : http . post ( url ( "/api/v1/activities/bookmarks" ) , ( ) =>
55+ err ( POST_ERROR . NOT_FOUND , "게시글을 찾을 수 없습니다." , 404 ) ,
5056 ) ,
5157
52- /** 북마크 삭제 => 북마크를 찾을 수 없음 */
58+ // DELETE /api/v1/activities/bookmarks
59+ /** 북마크 삭제 => 북마크를 찾을 수 없음 (BOOKMARK404_1) */
5360 bookmarkNotFound : http . delete ( url ( "/api/v1/activities/bookmarks" ) , ( ) =>
54- err ( ACTIVITY_ERROR . BOOKMARK_NOT_FOUND , "북마크를 찾을 수 없습니다." , 404 ) ,
61+ err ( BOOKMARK_ERROR . BOOKMARK_NOT_FOUND , "북마크를 찾을 수 없습니다." , 404 ) ,
62+ ) ,
63+ /** 북마크 삭제 => 게시글을 찾을 수 없음 (POST404_1) */
64+ deletePostNotFound : http . delete ( url ( "/api/v1/activities/bookmarks" ) , ( ) =>
65+ err ( POST_ERROR . NOT_FOUND , "게시글을 찾을 수 없습니다." , 404 ) ,
5566 ) ,
5667} ;
5768
58- /** 게시글 에러 시나리오 */
59- export const scenarioPost = {
60- /** 게시글 조회 => 찾을 수 없음 */
61- notFound : http . get ( url ( "/api/v2/posts/* " ) , ( ) =>
69+ /** 읽은 게시글 에러 시나리오 (POST /api/v1/activities/read-posts) */
70+ export const scenarioReadPost = {
71+ /** 게시글을 찾을 수 없음 (POST404_1) */
72+ postNotFound : http . post ( url ( "/api/v1/activities/read-posts " ) , ( ) =>
6273 err ( POST_ERROR . NOT_FOUND , "게시글을 찾을 수 없습니다." , 404 ) ,
6374 ) ,
75+ /** 조회수 증가 실패 (READ_POST500_1) — 전역 toast 동작 확인 */
76+ readPostFailed : http . post ( url ( "/api/v1/activities/read-posts" ) , ( ) =>
77+ err ( READPOST_ERROR . READ_POST , "조회수 증가에 실패했습니다." , 500 ) ,
78+ ) ,
6479} ;
6580
6681/** 유저 에러 시나리오 */
@@ -83,17 +98,59 @@ export const scenarioUser = {
8398
8499/** 공통 에러 시나리오 */
85100export const scenarioCommon = {
86- /** 서버 에러 */
87- internalServer : http . get ( url ( "/api/*" ) , ( ) =>
101+ /** 서버 에러 (전체) — query: ErrorBoundary fallback / mutation: toast */
102+ internalServer : http . all ( url ( "/api/*" ) , ( ) =>
88103 err (
89104 COMMON_ERROR . INTERNAL_SERVER ,
90105 "서버 에러, 관리자에게 문의 바랍니다." ,
91106 500 ,
92107 ) ,
93108 ) ,
94109
95- /** 서비스 점검 */
96- serviceUnavailable : http . get ( url ( "/api/*" ) , ( ) =>
110+ /** 서버 에러 (query만) — GET만 막아 mutation은 정상 동작 */
111+ internalServerQuery : http . get ( url ( "/api/*" ) , ( ) =>
112+ err (
113+ COMMON_ERROR . INTERNAL_SERVER ,
114+ "서버 에러, 관리자에게 문의 바랍니다." ,
115+ 500 ,
116+ ) ,
117+ ) ,
118+
119+ /** 서버 에러 (mutation만) — POST/PATCH/DELETE만 막아 query는 정상 동작 */
120+ internalServerMutation : [
121+ http . post ( url ( "/api/v1/auth/refresh" ) , ( ) => passthrough ( ) ) ,
122+ http . post ( url ( "/api/*" ) , ( ) =>
123+ err (
124+ COMMON_ERROR . INTERNAL_SERVER ,
125+ "서버 에러, 관리자에게 문의 바랍니다." ,
126+ 500 ,
127+ ) ,
128+ ) ,
129+ http . patch ( url ( "/api/*" ) , ( ) =>
130+ err (
131+ COMMON_ERROR . INTERNAL_SERVER ,
132+ "서버 에러, 관리자에게 문의 바랍니다." ,
133+ 500 ,
134+ ) ,
135+ ) ,
136+ http . delete ( url ( "/api/*" ) , ( ) =>
137+ err (
138+ COMMON_ERROR . INTERNAL_SERVER ,
139+ "서버 에러, 관리자에게 문의 바랍니다." ,
140+ 500 ,
141+ ) ,
142+ ) ,
143+ http . put ( url ( "/api/*" ) , ( ) =>
144+ err (
145+ COMMON_ERROR . INTERNAL_SERVER ,
146+ "서버 에러, 관리자에게 문의 바랍니다." ,
147+ 500 ,
148+ ) ,
149+ ) ,
150+ ] ,
151+
152+ /** 서비스 점검 — query: ErrorBoundary fallback / mutation: toast */
153+ serviceUnavailable : http . all ( url ( "/api/*" ) , ( ) =>
97154 err (
98155 COMMON_ERROR . SERVICE_UNAVAILABLE ,
99156 "서버가 일시적으로 사용중지 되었습니다." ,
@@ -115,18 +172,24 @@ export const scenarioNetwork = {
115172
116173export const handlers = [
117174 // 인증
118- // scenarioAuth.refreshMismatch, // 401: refresh 불일치 => 즉시 로그아웃 확인
119- // scenarioAuth.withdrawn, // 403: 탈퇴 회원 => 즉시 로그아웃 확인
120- // 북마크
121- // scenarioBookmark.alreadyBookmarked, // 409: 중복 북마크
122- // scenarioBookmark.bookmarkNotFound, // 404: 북마크 없음
175+ // scenarioAuth.refreshMismatch, // 401: refresh 불일치 => 즉시 로그아웃 -O
176+ // scenarioAuth.withdrawn, // 403: 탈퇴 회원 => 즉시 로그아웃 -O
177+ // 북마크 POST
178+ // scenarioBookmark.alreadyBookmarked, // 409: 중복 북마크 -O
179+ // scenarioBookmark.postPostNotFound, // 404: 게시글 없음
180+ // 북마크 DELETE
181+ // scenarioBookmark.bookmarkNotFound, // 404: 북마크 없음 -O
182+ // scenarioBookmark.deletePostNotFound, // 404: 게시글 없음
183+ // 읽은 게시글 POST
184+ // scenarioReadPost.postNotFound, // 404: 게시글 없음
185+ // scenarioReadPost.readPostFailed, // 500: 조회수 증가 실패 => 전역 toast -O
123186 // 유저
124- // scenarioUser.invalidInterest, // 400: 유효하지 않은 관심사
125- // scenarioUser.alreadyWithdrawn, // 400: 이미 탈퇴한 회원
187+ // scenarioUser.invalidInterest, // 400: 유효하지 않은 관심사
188+ // scenarioUser.alreadyWithdrawn, // 400: 이미 탈퇴한 회원 -O
126189 // 공통
127- // scenarioCommon.internalServer, // 500: 서버 에러
128- // scenarioCommon.serviceUnavailable, // 503: 서비스 점검
190+ // scenarioCommon.internalServer, // 500: 서버 에러
191+ // ...scenarioCommon.internalServerMutation,
192+ // scenarioCommon.serviceUnavailable, // 503: 서비스 점검
129193 // 네트워크
130- // scenarioNetwork.offline, // 연결 끊김 (ERR_NETWORK)
131- // scenarioNetwork.bookmarkOffline,// 북마크 API만 연결 끊김
194+ // scenarioNetwork.offline, // 연결 끊김 (ERR_NETWORK) -O
132195] ;
0 commit comments