diff options
Diffstat (limited to 'components/knox/approval/mocks/approval-mock.ts')
| -rw-r--r-- | components/knox/approval/mocks/approval-mock.ts | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/components/knox/approval/mocks/approval-mock.ts b/components/knox/approval/mocks/approval-mock.ts new file mode 100644 index 00000000..021eb925 --- /dev/null +++ b/components/knox/approval/mocks/approval-mock.ts @@ -0,0 +1,230 @@ +import { + ApprovalLine, + SubmitApprovalRequest, + SubmitApprovalResponse, + ApprovalDetailResponse, + ApprovalContentResponse, + ApprovalStatusResponse, + CancelApprovalResponse, + SubmissionListResponse, + ApprovalHistoryResponse +} from '@/lib/knox-api/approval/approval'; + +// Mock 데이터 생성 함수들 +export const createMockApprovalLine = (overrides?: Partial<ApprovalLine>): ApprovalLine => ({ + epId: '12345', + userId: 'user123', + emailAddress: 'user@example.com', + seq: '1', + role: '0', // 기안 + aplnStatsCode: '0', // 미결 + arbPmtYn: 'N', + contentsMdfyPmtYn: 'N', + aplnMdfyPmtYn: 'N', + opinion: '결재 요청드립니다.', + ...overrides +}); + +export const createMockSubmitApprovalRequest = (overrides?: Partial<SubmitApprovalRequest>): SubmitApprovalRequest => ({ + contents: '결재 요청 내용입니다.', + contentsType: 'TEXT', + docSecuType: 'PERSONAL', + notifyOption: '0', + urgYn: 'N', + sbmDt: '20241215120000', + timeZone: 'GMT+9', + docMngSaveCode: '0', + subject: '결재 요청 - 테스트', + sbmLang: 'ko', + apInfId: 'test-ap-inf-id-' + Date.now(), + importantYn: 'N', + aplns: [ + createMockApprovalLine({ seq: '1', role: '0' }), // 기안 + createMockApprovalLine({ seq: '2', role: '1', userId: 'approver1' }), // 결재 + createMockApprovalLine({ seq: '3', role: '1', userId: 'approver2' }), // 결재 + ], + ...overrides +}); + +export const mockSubmitApprovalResponse: SubmitApprovalResponse = { + result: 'SUCCESS', + data: { + apInfId: 'test-ap-inf-id-' + Date.now() + } +}; + +export const mockApprovalDetailResponse: ApprovalDetailResponse = { + result: 'SUCCESS', + data: { + contentsType: 'TEXT', + sbmDt: '20241215120000', + sbmLang: 'ko', + apInfId: 'test-ap-inf-id-123', + systemId: 'EVCP_SYSTEM', + notifyOption: '0', + urgYn: 'N', + docSecuType: 'PERSONAL', + status: '1', // 진행중 + timeZone: 'GMT+9', + subject: '결재 요청 - 테스트', + aplns: [ + createMockApprovalLine({ seq: '1', role: '0', aplnStatsCode: '1' }), // 기안 완료 + createMockApprovalLine({ seq: '2', role: '1', aplnStatsCode: '0', userId: 'approver1' }), // 결재 대기 + createMockApprovalLine({ seq: '3', role: '1', aplnStatsCode: '0', userId: 'approver2' }), // 결재 대기 + ], + attachments: [] + } +}; + +export const mockApprovalContentResponse: ApprovalContentResponse = { + result: 'SUCCESS', + data: { + contents: '결재 요청 내용입니다.\n\n상세한 내용은 다음과 같습니다:\n- 항목 1\n- 항목 2\n- 항목 3', + contentsType: 'TEXT', + apInfId: 'test-ap-inf-id-123' + } +}; + +export const mockApprovalStatusResponse: ApprovalStatusResponse = { + result: 'SUCCESS', + data: [ + { + apInfId: 'test-ap-inf-id-123', + docChgNum: '1', + status: '1' // 진행중 + } + ] +}; + +export const mockCancelApprovalResponse: CancelApprovalResponse = { + result: 'SUCCESS', + data: { + apInfId: 'test-ap-inf-id-123' + } +}; + +export const mockSubmissionListResponse: SubmissionListResponse = { + result: 'SUCCESS', + data: [ + { + apInfId: 'test-ap-inf-id-123', + subject: '결재 요청 - 테스트', + sbmDt: '20241215120000', + status: '1', + urgYn: 'N', + docSecuType: 'PERSONAL' + }, + { + apInfId: 'test-ap-inf-id-124', + subject: '결재 요청 - 테스트 2', + sbmDt: '20241214100000', + status: '2', + urgYn: 'Y', + docSecuType: 'CONFIDENTIAL' + } + ] +}; + +export const mockApprovalHistoryResponse: ApprovalHistoryResponse = { + result: 'SUCCESS', + data: [ + { + apInfId: 'test-ap-inf-id-123', + subject: '결재 요청 - 테스트', + sbmDt: '20241215120000', + status: '1', + actionType: 'SUBMIT', + actionDt: '20241215120000', + userId: 'submitter123' + }, + { + apInfId: 'test-ap-inf-id-124', + subject: '결재 요청 - 테스트 2', + sbmDt: '20241214100000', + status: '2', + actionType: 'APPROVE', + actionDt: '20241214150000', + userId: 'approver1' + } + ] +}; + +// Mock 함수들 +export const mockApprovalAPI = { + submitApproval: async (request: SubmitApprovalRequest): Promise<SubmitApprovalResponse> => { + // 실제 API 호출 시뮬레이션 + await new Promise(resolve => setTimeout(resolve, 1000)); + return mockSubmitApprovalResponse; + }, + + getApprovalDetail: async (apInfId: string): Promise<ApprovalDetailResponse> => { + await new Promise(resolve => setTimeout(resolve, 500)); + return mockApprovalDetailResponse; + }, + + getApprovalContent: async (apInfId: string): Promise<ApprovalContentResponse> => { + await new Promise(resolve => setTimeout(resolve, 300)); + return mockApprovalContentResponse; + }, + + getApprovalStatus: async (apInfIds: string[]): Promise<ApprovalStatusResponse> => { + await new Promise(resolve => setTimeout(resolve, 400)); + return mockApprovalStatusResponse; + }, + + cancelApproval: async (apInfId: string): Promise<CancelApprovalResponse> => { + await new Promise(resolve => setTimeout(resolve, 800)); + return mockCancelApprovalResponse; + }, + + getSubmissionList: async (): Promise<SubmissionListResponse> => { + await new Promise(resolve => setTimeout(resolve, 600)); + return mockSubmissionListResponse; + }, + + getApprovalHistory: async (): Promise<ApprovalHistoryResponse> => { + await new Promise(resolve => setTimeout(resolve, 700)); + return mockApprovalHistoryResponse; + } +}; + +// 상태 및 역할 텍스트 변환 함수들 +export const getStatusText = (status: string): string => { + const statusMap: Record<string, string> = { + '-3': '암호화실패', + '-2': '암호화중', + '-1': '예약상신', + '0': '보류', + '1': '진행중', + '2': '완결', + '3': '반려', + '4': '상신취소', + '5': '전결', + '6': '후완결' + }; + return statusMap[status] || '알 수 없음'; +}; + +export const getRoleText = (role: string): string => { + const roleMap: Record<string, string> = { + '0': '기안', + '1': '결재', + '2': '합의', + '3': '후결', + '4': '병렬합의', + '7': '병렬결재', + '9': '통보' + }; + return roleMap[role] || '알 수 없음'; +}; + +export const getApprovalStatusText = (status: string): string => { + const statusMap: Record<string, string> = { + '0': '미결', + '1': '결재', + '2': '반려', + '3': '전결', + '5': '자동결재' + }; + return statusMap[status] || '알 수 없음'; +};
\ No newline at end of file |
