Feat: 모킹 가능한 핸들러, 브라우져 구현
This commit is contained in:
parent
ee4cf4c5fd
commit
5de7b9de3f
4
frontend/src/mocks/browser.ts
Normal file
4
frontend/src/mocks/browser.ts
Normal file
@ -0,0 +1,4 @@
|
||||
import { setupWorker } from 'msw/browser';
|
||||
import { handlers } from './handlers';
|
||||
|
||||
export const worker = setupWorker(...handlers);
|
267
frontend/src/mocks/handlers.ts
Normal file
267
frontend/src/mocks/handlers.ts
Normal file
@ -0,0 +1,267 @@
|
||||
import { http, HttpResponse } from 'msw';
|
||||
|
||||
export const handlers = [
|
||||
http.post('/api/auth/reissue', () => {
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '토큰 재발급 성공',
|
||||
data: { accessToken: 'mockAccessToken' },
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.get('/api/auth/profile', () => {
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '프로필 조회 성공',
|
||||
data: {
|
||||
id: 1,
|
||||
nickname: 'mockUser',
|
||||
profileImage: 'mockImage.jpg',
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.get('/api/projects/:projectId', ({ params }) => {
|
||||
const { projectId } = params;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '프로젝트 조회 성공',
|
||||
data: {
|
||||
id: Number(projectId),
|
||||
title: `Project ${projectId}`,
|
||||
workspaceId: 1,
|
||||
projectType: 'classification',
|
||||
createdAt: '2024-09-10T04:01:37.033Z',
|
||||
updatedAt: '2024-09-10T04:01:37.033Z',
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.put('/api/projects/:projectId', async ({ params, request }) => {
|
||||
const { projectId } = params;
|
||||
const updateData = (await request.json()) as Record<string, unknown>;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '프로젝트 수정 성공',
|
||||
data: {
|
||||
id: Number(projectId),
|
||||
...updateData,
|
||||
workspaceId: 1,
|
||||
createdAt: '2024-09-10T04:01:37.033Z',
|
||||
updatedAt: new Date().toISOString(),
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.delete('/api/projects/:projectId', ({ params }) => {
|
||||
const { projectId } = params;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: `프로젝트 ${projectId} 삭제 성공`,
|
||||
data: null,
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.post('/api/projects/:projectId/members', async ({ params, request }) => {
|
||||
const { projectId } = params;
|
||||
const memberData = (await request.json()) as Record<string, unknown>;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: `프로젝트 ${projectId} 멤버 추가 성공`,
|
||||
data: { ...memberData },
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.delete('/api/projects/:projectId/members', async ({ params, request }) => {
|
||||
const { projectId } = params;
|
||||
const memberData = (await request.json()) as Record<string, unknown>;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: `프로젝트 ${projectId} 멤버 제거 성공`,
|
||||
data: { ...memberData },
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.get('/api/workspaces/:workspaceId/projects', async ({ params, request }) => {
|
||||
const { workspaceId } = params;
|
||||
const url = new URL(request.url);
|
||||
const memberId = url.searchParams.get('memberId');
|
||||
|
||||
if (!memberId) {
|
||||
return HttpResponse.json({
|
||||
status: 1,
|
||||
code: 400,
|
||||
message: 'memberId가 필요합니다.',
|
||||
data: null,
|
||||
errors: [{ field: 'memberId', code: 'missing', message: 'memberId가 필요합니다.', objectName: 'request' }],
|
||||
isSuccess: false,
|
||||
});
|
||||
}
|
||||
|
||||
const dummyProjects = [
|
||||
{
|
||||
id: 1,
|
||||
title: `Project 1`,
|
||||
workspaceId: Number(workspaceId),
|
||||
projectType: 'classification',
|
||||
createdAt: '2024-09-10T04:01:37.049Z',
|
||||
updatedAt: '2024-09-10T04:01:37.049Z',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: `Project 2`,
|
||||
workspaceId: Number(workspaceId),
|
||||
projectType: 'detection',
|
||||
createdAt: '2024-09-10T04:02:37.049Z',
|
||||
updatedAt: '2024-09-10T04:02:37.049Z',
|
||||
},
|
||||
];
|
||||
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '프로젝트 목록 조회 성공',
|
||||
data: {
|
||||
workspaceResponses: dummyProjects, // Adjusted structure to match the expected response type
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.post('/api/workspaces/:workspaceId/projects', async ({ params, request }) => {
|
||||
const { workspaceId } = params;
|
||||
const newProject = (await request.json()) as Record<string, unknown>;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '프로젝트 생성 성공',
|
||||
data: {
|
||||
...newProject,
|
||||
workspaceId: Number(workspaceId),
|
||||
id: Math.floor(Math.random() * 1000),
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.get('/api/workspaces/:workspaceId', ({ params }) => {
|
||||
const { workspaceId } = params;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '워크스페이스 조회 성공',
|
||||
data: {
|
||||
id: Number(workspaceId),
|
||||
memberId: 'member123',
|
||||
title: 'workspace1',
|
||||
content: '갤럭시 s24 불량 검증',
|
||||
createdAt: '2024-09-10T03:46:17.421Z',
|
||||
updatedAt: '2024-09-10T03:46:17.421Z',
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.put('/api/workspaces/:workspaceId', async ({ params, request }) => {
|
||||
const { workspaceId } = params;
|
||||
const updateData = (await request.json()) as Record<string, unknown>;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '워크스페이스 수정 성공',
|
||||
data: {
|
||||
id: Number(workspaceId),
|
||||
...updateData,
|
||||
createdAt: '2024-09-10T03:46:17.421Z',
|
||||
updatedAt: new Date().toISOString(),
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.delete('/api/workspaces/:workspaceId', ({ params }) => {
|
||||
const { workspaceId } = params;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: `워크스페이스 ${workspaceId} 삭제 성공`,
|
||||
data: null,
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.get('/api/workspaces', () => {
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '전체 워크스페이스 조회 성공',
|
||||
data: {
|
||||
workspaceResponses: [
|
||||
{
|
||||
id: 1,
|
||||
memberId: 'member123',
|
||||
title: 'workspace1',
|
||||
content: '갤럭시 s24 불량 검증',
|
||||
createdAt: '2024-09-10T03:46:17.428Z',
|
||||
updatedAt: '2024-09-10T03:46:17.428Z',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
memberId: 'member123',
|
||||
title: 'workspace2',
|
||||
content: '갤럭시 s24 불량 검증',
|
||||
createdAt: '2024-09-10T03:46:17.428Z',
|
||||
updatedAt: '2024-09-10T03:46:17.428Z',
|
||||
},
|
||||
],
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
|
||||
http.post('/api/workspaces', async ({ request }) => {
|
||||
const newWorkspace = (await request.json()) as Record<string, unknown>;
|
||||
return HttpResponse.json({
|
||||
status: 0,
|
||||
code: 0,
|
||||
message: '워크스페이스 생성 성공',
|
||||
data: {
|
||||
...newWorkspace,
|
||||
id: Math.floor(Math.random() * 1000),
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
},
|
||||
errors: [],
|
||||
isSuccess: true,
|
||||
});
|
||||
}),
|
||||
];
|
Loading…
Reference in New Issue
Block a user