Test: 테스트 죽였다가 다시 살림. 변경된 DTO에 따른 수정

This commit is contained in:
정현조 2024-09-20 17:50:49 +09:00
parent b5d5c82a1e
commit 7b762760d2
2 changed files with 264 additions and 256 deletions

View File

@ -1,246 +1,247 @@
// import { http, HttpResponse } from 'msw';
// import {
// ProjectResponse,
// FolderResponse,
// ImageResponse,
// WorkspaceResponse,
// MemberResponse,
// RefreshTokenResponse,
// AutoLabelingResponse,
// ProjectListResponse,
// ErrorResponse,
// } from '@/types';
import { http, HttpResponse } from 'msw';
import {
ProjectResponse,
FolderResponse,
ImageResponse,
WorkspaceResponse,
MemberResponse,
RefreshTokenResponse,
AutoLabelingResponse,
ProjectListResponse,
ErrorResponse,
} from '@/types';
// export const handlers = [
// // Auth Handlers
// http.post('/api/auth/reissue', () => {
// // 토큰 재발급 핸들러
// const response: RefreshTokenResponse = {
// accessToken: 'newAccessToken',
// };
// return HttpResponse.json(response);
// }),
export const handlers = [
// Auth Handlers
http.post('/api/auth/reissue', () => {
// 토큰 재발급 핸들러
const response: RefreshTokenResponse = {
accessToken: 'newAccessToken',
};
return HttpResponse.json(response);
}),
// http.get('/api/auth/profile', () => {
// // 사용자 프로필 핸들러
// const response: MemberResponse = {
// id: 1,
// nickname: 'javajoha',
// profileImage: 'profile.jpg',
// };
// return HttpResponse.json(response);
// }),
http.get('/api/auth/profile', () => {
// 사용자 프로필 핸들러
const response: MemberResponse = {
id: 1,
nickname: 'javajoha',
profileImage: 'profile.jpg',
email: 'j9@naver.com',
};
return HttpResponse.json(response);
}),
// // Workspace Handlers
// http.get('/api/workspaces/:workspaceId', ({ params }) => {
// // 워크스페이스 조회 핸들러
// const { workspaceId } = params;
// const response: WorkspaceResponse = {
// id: parseInt(workspaceId as string, 10),
// memberId: 1,
// title: 'workspace1',
// content: '갤럭시 s24 불량 검증',
// createdAt: '2024-09-18T05:04:44.668Z',
// updatedAt: '2024-09-18T05:04:44.668Z',
// };
// return HttpResponse.json(response);
// }),
// Workspace Handlers
http.get('/api/workspaces/:workspaceId', ({ params }) => {
// 워크스페이스 조회 핸들러
const { workspaceId } = params;
const response: WorkspaceResponse = {
id: parseInt(workspaceId as string, 10),
memberId: 'abc1324',
title: 'workspace1',
content: '갤럭시 s24 불량 검증',
createdAt: '2024-09-18T05:04:44.668Z',
updatedAt: '2024-09-18T05:04:44.668Z',
};
return HttpResponse.json(response);
}),
// http.put('/api/workspaces/:workspaceId', ({ params }) => {
// // 워크스페이스 수정 핸들러
// const { workspaceId } = params;
// const response: WorkspaceResponse = {
// id: parseInt(workspaceId as string, 10),
// memberId: 1,
// title: 'Updated Workspace Title',
// content: 'Updated Workspace Content',
// createdAt: '2024-09-18T05:04:44.668Z',
// updatedAt: '2024-09-18T06:00:00.668Z',
// };
// return HttpResponse.json(response);
// }),
http.put('/api/workspaces/:workspaceId', ({ params }) => {
// 워크스페이스 수정 핸들러
const { workspaceId } = params;
const response: WorkspaceResponse = {
id: parseInt(workspaceId as string, 10),
memberId: 'abc1324',
title: 'Updated Workspace Title',
content: 'Updated Workspace Content',
createdAt: '2024-09-18T05:04:44.668Z',
updatedAt: '2024-09-18T06:00:00.668Z',
};
return HttpResponse.json(response);
}),
// http.delete('/api/workspaces/:workspaceId', ({ params }) => {
// const { workspaceId } = params;
// console.log(workspaceId);
// return HttpResponse.json({});
// }),
http.delete('/api/workspaces/:workspaceId', ({ params }) => {
const { workspaceId } = params;
console.log(workspaceId);
return HttpResponse.json({});
}),
// http.get('/api/workspaces', () => {
// // 워크스페이스 목록 조회 핸들러
// const response: WorkspaceResponse[] = [
// {
// id: 1,
// memberId: 1,
// title: 'Workspace 1',
// content: 'Content 1',
// createdAt: '2024-09-18T05:04:44.668Z',
// updatedAt: '2024-09-18T05:04:44.668Z',
// },
// ];
// return HttpResponse.json(response);
// }),
http.get('/api/workspaces', () => {
// 워크스페이스 목록 조회 핸들러
const response: WorkspaceResponse[] = [
{
id: 1,
memberId: 'abc1324',
title: 'Workspace 1',
content: 'Content 1',
createdAt: '2024-09-18T05:04:44.668Z',
updatedAt: '2024-09-18T05:04:44.668Z',
},
];
return HttpResponse.json(response);
}),
// // Project Handlers
// http.get('/api/workspaces/:workspaceId/projects', ({ request, params }) => {
// const workspaceId = parseInt(params.workspaceId as string, 10);
// Project Handlers
http.get('/api/workspaces/:workspaceId/projects', ({ request, params }) => {
const workspaceId = parseInt(params.workspaceId as string, 10);
// const url = new URL(request.url);
// const lastProjectId = parseInt(url.searchParams.get('lastProjectId') || '0', 10);
// const limit = parseInt(url.searchParams.get('limit') || '10', 10);
const url = new URL(request.url);
const lastProjectId = parseInt(url.searchParams.get('lastProjectId') || '0', 10);
const limit = parseInt(url.searchParams.get('limit') || '10', 10);
// const projects: ProjectResponse[] = Array.from({ length: limit }, (_, index) => ({
// id: lastProjectId + index + 1,
// title: `프로젝트 ${lastProjectId + index + 1}`,
// workspaceId,
// projectType: ['classification', 'detection', 'segmentation'][index % 3] as
// | 'classification'
// | 'detection'
// | 'segmentation',
// createdAt: new Date().toISOString(),
// updatedAt: new Date().toISOString(),
// }));
const projects: ProjectResponse[] = Array.from({ length: limit }, (_, index) => ({
id: lastProjectId + index + 1,
title: `프로젝트 ${lastProjectId + index + 1}`,
workspaceId,
projectType: ['classification', 'detection', 'segmentation'][index % 3] as
| 'classification'
| 'detection'
| 'segmentation',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
}));
// // 응답 생성
// const response: ProjectListResponse = {
// workspaceResponses: projects,
// };
// 응답 생성
const response: ProjectListResponse = {
workspaceResponses: projects,
};
// return HttpResponse.json(response);
// }),
// http.get('/api/projects/:projectId', ({ params }) => {
// // 프로젝트 조회 핸들러
// const { projectId } = params;
// const response: ProjectResponse = {
// id: parseInt(projectId as string, 10),
// title: 'Project Title',
// workspaceId: 1,
// projectType: 'classification',
// createdAt: '2024-09-18T05:04:44.668Z',
// updatedAt: '2024-09-18T05:04:44.668Z',
// };
// return HttpResponse.json(response);
// }),
return HttpResponse.json(response);
}),
http.get('/api/projects/:projectId', ({ params }) => {
// 프로젝트 조회 핸들러
const { projectId } = params;
const response: ProjectResponse = {
id: parseInt(projectId as string, 10),
title: 'Project Title',
workspaceId: 1,
projectType: 'classification',
createdAt: '2024-09-18T05:04:44.668Z',
updatedAt: '2024-09-18T05:04:44.668Z',
};
return HttpResponse.json(response);
}),
// http.post('/api/workspaces/:workspaceId/projects', () => {
// // 프로젝트 생성 핸들러
// const response: ProjectResponse = {
// id: 3,
// title: 'New Project',
// workspaceId: 1,
// projectType: 'detection',
// createdAt: '2024-09-18T05:04:44.668Z',
// updatedAt: '2024-09-18T05:04:44.668Z',
// };
// return HttpResponse.json(response);
// }),
http.post('/api/workspaces/:workspaceId/projects', () => {
// 프로젝트 생성 핸들러
const response: ProjectResponse = {
id: 3,
title: 'New Project',
workspaceId: 1,
projectType: 'detection',
createdAt: '2024-09-18T05:04:44.668Z',
updatedAt: '2024-09-18T05:04:44.668Z',
};
return HttpResponse.json(response);
}),
// http.put('/api/projects/:projectId', ({ params }) => {
// // 프로젝트 수정 핸들러
// const { projectId } = params;
// const response: ProjectResponse = {
// id: parseInt(projectId as string, 10),
// title: 'Updated Project Title',
// workspaceId: 1,
// projectType: 'segmentation',
// createdAt: '2024-09-18T05:04:44.668Z',
// updatedAt: '2024-09-18T06:00:00.668Z',
// };
// return HttpResponse.json(response);
// }),
http.put('/api/projects/:projectId', ({ params }) => {
// 프로젝트 수정 핸들러
const { projectId } = params;
const response: ProjectResponse = {
id: parseInt(projectId as string, 10),
title: 'Updated Project Title',
workspaceId: 1,
projectType: 'segmentation',
createdAt: '2024-09-18T05:04:44.668Z',
updatedAt: '2024-09-18T06:00:00.668Z',
};
return HttpResponse.json(response);
}),
// http.delete('/api/projects/:projectId', ({ params }) => {
// const { projectId } = params;
// console.log(projectId);
// return HttpResponse.json({});
// }),
http.delete('/api/projects/:projectId', ({ params }) => {
const { projectId } = params;
console.log(projectId);
return HttpResponse.json({});
}),
// http.post('/api/projects/:projectId/label/auto', () => {
// const response: AutoLabelingResponse = {
// imageId: 1,
// imageUrl: 'image-url.jpg',
// data: `{
// "version": "0.1.0",
// "task_type": "cls",
// "shapes": [
// {
// "label": "NG",
// "color": "#FF0000",
// "points": [[0, 0]],
// "group_id": null,
// "shape_type": "point",
// "flags": {}
// }
// ],
// "split": "none",
// "imageHeight": 2000,
// "imageWidth": 4000,
// "imageDepth": 4
// }`,
// };
// return HttpResponse.json(response);
// }),
http.post('/api/projects/:projectId/label/auto', () => {
const response: AutoLabelingResponse = {
imageId: 1,
imageUrl: 'image-url.jpg',
data: `{
"version": "0.1.0",
"task_type": "cls",
"shapes": [
{
"label": "NG",
"color": "#FF0000",
"points": [[0, 0]],
"group_id": null,
"shape_type": "point",
"flags": {}
}
],
"split": "none",
"imageHeight": 2000,
"imageWidth": 4000,
"imageDepth": 4
}`,
};
return HttpResponse.json(response);
}),
// // DELETE: 프로젝트 멤버 제거 핸들러
// http.delete('/api/projects/:projectId/members', ({ params }) => {
// const { projectId } = params;
// DELETE: 프로젝트 멤버 제거 핸들러
http.delete('/api/projects/:projectId/members', ({ params }) => {
const { projectId } = params;
// return HttpResponse.json({ message: `프로젝트 ${projectId}에서 멤버 제거 성공` });
// }),
// // PUT: 프로젝트 멤버 권한 수정 핸들러
// http.put('/api/projects/:projectId/members', () => {
// return HttpResponse.json({});
// }),
// // POST: 워크스페이스 멤버 추가 핸들러
// http.post('/api/workspaces/:workspaceId/members/:memberId', ({ params }) => {
// const { workspaceId, memberId } = params;
return HttpResponse.json({ message: `프로젝트 ${projectId}에서 멤버 제거 성공` });
}),
// PUT: 프로젝트 멤버 권한 수정 핸들러
http.put('/api/projects/:projectId/members', () => {
return HttpResponse.json({});
}),
// POST: 워크스페이스 멤버 추가 핸들러
http.post('/api/workspaces/:workspaceId/members/:memberId', ({ params }) => {
const { workspaceId, memberId } = params;
// if (!workspaceId || !memberId) {
// const errorResponse: ErrorResponse = {
// status: 400,
// code: 1002,
// message: '잘못된 요청입니다. 요청을 확인해주세요.',
// isSuccess: false,
// };
// return HttpResponse.json(errorResponse, { status: 400 });
// }
if (!workspaceId || !memberId) {
const errorResponse: ErrorResponse = {
status: 400,
code: 1002,
message: '잘못된 요청입니다. 요청을 확인해주세요.',
isSuccess: false,
};
return HttpResponse.json(errorResponse, { status: 400 });
}
// // 성공 응답
// const response: WorkspaceResponse = {
// id: parseInt(workspaceId as string, 10),
// memberId: parseInt(memberId as string, 10),
// title: 'Workspace 1',
// content: 'Workspace for testing',
// createdAt: new Date().toISOString(),
// updatedAt: new Date().toISOString(),
// };
// 성공 응답
const response: WorkspaceResponse = {
id: parseInt(workspaceId as string, 10),
memberId: 'abc1324',
title: 'Workspace 1',
content: 'Workspace for testing',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
};
// return HttpResponse.json(response, { status: 200 });
// }),
return HttpResponse.json(response, { status: 200 });
}),
// // GET: 프로젝트 멤버 리스트 조회 핸들러 (가상)
// // 실제 구현 시 API 경로와 메서드를 확인 후 업데이트 필요
// http.get('/api/projects/:projectId/members', () => {
// const members: MemberResponse[] = [
// { id: 1, nickname: 'admin', profileImage: 'admin.jpg' },
// { id: 2, nickname: 'editor', profileImage: 'editor.jpg' },
// { id: 3, nickname: 'viewer', profileImage: 'viewer.jpg' },
// ];
// GET: 프로젝트 멤버 리스트 조회 핸들러 (가상)
// 실제 구현 시 API 경로와 메서드를 확인 후 업데이트 필요
http.get('/api/projects/:projectId/members', () => {
const members: MemberResponse[] = [
{ id: 1, nickname: 'admin', profileImage: 'admin.jpg', email: 'j9@naver.com' },
{ id: 2, nickname: 'editor', profileImage: 'editor.jpg', email: 'j9@naver.com' },
{ id: 3, nickname: 'viewer', profileImage: 'viewer.jpg', email: 'j9@naver.com' },
];
// return HttpResponse.json(members);
// }),
return HttpResponse.json(members);
}),
// // GET: 워크스페이스 멤버 리스트 조회 핸들러 (가상)
// // 실제 구현 시 API 경로와 메서드를 확인 후 업데이트 필요
// http.get('/api/workspaces/:workspaceId/members', () => {
// const members: MemberResponse[] = [
// { id: 1, nickname: 'admin', profileImage: 'admin.jpg' },
// { id: 2, nickname: 'editor', profileImage: 'editor.jpg' },
// { id: 3, nickname: 'viewer', profileImage: 'viewer.jpg' },
// ];
// GET: 워크스페이스 멤버 리스트 조회 핸들러 (가상)
// 실제 구현 시 API 경로와 메서드를 확인 후 업데이트 필요
http.get('/api/workspaces/:workspaceId/members', () => {
const members: MemberResponse[] = [
{ id: 1, nickname: 'admin', profileImage: 'admin.jpg', email: 'j9@naver.com' },
{ id: 2, nickname: 'editor', profileImage: 'editor.jpg', email: 'j9@naver.com' },
{ id: 3, nickname: 'viewer', profileImage: 'viewer.jpg', email: 'j9@naver.com' },
];
// return HttpResponse.json(members);
// }),
return HttpResponse.json(members);
}),
// Folder and Image Handlers
http.get('/api/projects/:projectId/folders/:folderId', ({ params }) => {
@ -291,41 +292,41 @@
return HttpResponse.json(response);
}),
// // Auto Labeling Handler
// http.post('/api/projects/:projectId/label/auto', () => {
// const response: AutoLabelingResponse = {
// imageId: 1,
// imageUrl: 'image-url.jpg',
// data: `{
// "version": "0.1.0",
// "task_type": "cls",
// "shapes": [
// {
// "label": "NG",
// "color": "#FF0000",
// "points": [[0, 0]],
// "group_id": null,
// "shape_type": "point",
// "flags": {}
// }
// ],
// "split": "none",
// "imageHeight": 2000,
// "imageWidth": 4000,
// "imageDepth": 4
// }`,
// };
// return HttpResponse.json(response);
// }),
// Auto Labeling Handler
http.post('/api/projects/:projectId/label/auto', () => {
const response: AutoLabelingResponse = {
imageId: 1,
imageUrl: 'image-url.jpg',
data: `{
"version": "0.1.0",
"task_type": "cls",
"shapes": [
{
"label": "NG",
"color": "#FF0000",
"points": [[0, 0]],
"group_id": null,
"shape_type": "point",
"flags": {}
}
],
"split": "none",
"imageHeight": 2000,
"imageWidth": 4000,
"imageDepth": 4
}`,
};
return HttpResponse.json(response);
}),
// // Error Handler Example
// http.get('/api/error', () => {
// const errorResponse: ErrorResponse = {
// status: 400,
// code: 1003,
// message: '필수 요청 파라미터가 입력되지 않았습니다.',
// isSuccess: false,
// };
// return HttpResponse.json(errorResponse);
// }),
// ];
// Error Handler Example
http.get('/api/error', () => {
const errorResponse: ErrorResponse = {
status: 400,
code: 1003,
message: '필수 요청 파라미터가 입력되지 않았습니다.',
isSuccess: false,
};
return HttpResponse.json(errorResponse);
}),
];

View File

@ -266,3 +266,10 @@ export interface LabelJson {
imageWidth: number;
imageDepth: number;
}
export interface ErrorResponse {
status: number;
code: number;
message: string;
isSuccess: boolean;
}