summaryrefslogtreecommitdiff
path: root/components/knox/approval/mocks/approval-mock.ts
diff options
context:
space:
mode:
Diffstat (limited to 'components/knox/approval/mocks/approval-mock.ts')
-rw-r--r--components/knox/approval/mocks/approval-mock.ts230
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