docs: API 문서 인덱스 및 테스트 플로우 정리
- docs/INDEX.md 업데이트 - API 테스트 플로우 파일 추가 - LOGICAL_RELATIONSHIPS.md 업데이트
This commit is contained in:
227
docs/flow-tests/attendance-api-crud.json
Normal file
227
docs/flow-tests/attendance-api-crud.json
Normal file
@@ -0,0 +1,227 @@
|
||||
{
|
||||
"name": "Attendance API 근태관리 테스트",
|
||||
"description": "근태 CRUD, 출퇴근 기록, 월간 통계 테스트",
|
||||
"version": "1.0",
|
||||
"config": {
|
||||
"baseUrl": "",
|
||||
"timeout": 30000,
|
||||
"stopOnFailure": true
|
||||
},
|
||||
"variables": {
|
||||
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
|
||||
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}",
|
||||
"test_date": "{{$date}}"
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": "login",
|
||||
"name": "로그인",
|
||||
"method": "POST",
|
||||
"endpoint": "/login",
|
||||
"body": {
|
||||
"user_id": "{{user_id}}",
|
||||
"user_pwd": "{{user_pwd}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.message": "로그인 성공",
|
||||
"$.access_token": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"token": "$.access_token",
|
||||
"current_user_id": "$.user.id"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "check_in",
|
||||
"name": "출근 기록",
|
||||
"method": "POST",
|
||||
"endpoint": "/attendances/check-in",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"check_in": "09:00:00",
|
||||
"gps_data": {
|
||||
"latitude": 37.5665,
|
||||
"longitude": 126.978,
|
||||
"accuracy": 10
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber",
|
||||
"$.data.status": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"attendance_id": "$.data.id"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "show_attendance",
|
||||
"name": "근태 상세 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/attendances/{{check_in.attendance_id}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "{{check_in.attendance_id}}",
|
||||
"$.data.base_date": "@isString"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "check_out",
|
||||
"name": "퇴근 기록",
|
||||
"method": "POST",
|
||||
"endpoint": "/attendances/check-out",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"check_out": "18:00:00",
|
||||
"gps_data": {
|
||||
"latitude": 37.5665,
|
||||
"longitude": 126.978,
|
||||
"accuracy": 15
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_attendances",
|
||||
"name": "근태 목록 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/attendances",
|
||||
"query": {
|
||||
"page": 1,
|
||||
"per_page": 10,
|
||||
"date": "{{test_date}}"
|
||||
},
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.data": "@isArray"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "monthly_stats",
|
||||
"name": "월간 통계 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/attendances/monthly-stats",
|
||||
"query": {
|
||||
"year": 2025,
|
||||
"month": 12
|
||||
},
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "create_attendance",
|
||||
"name": "근태 수동 등록 (관리자)",
|
||||
"method": "POST",
|
||||
"endpoint": "/attendances",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"user_id": "{{login.current_user_id}}",
|
||||
"base_date": "2025-12-01",
|
||||
"status": "onTime",
|
||||
"json_details": {
|
||||
"check_in": "09:00:00",
|
||||
"check_out": "18:00:00",
|
||||
"work_minutes": 480
|
||||
},
|
||||
"remarks": "Flow Tester 테스트 데이터"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"manual_attendance_id": "$.data.id"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "update_attendance",
|
||||
"name": "근태 수정",
|
||||
"method": "PATCH",
|
||||
"endpoint": "/attendances/{{create_attendance.manual_attendance_id}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"status": "late",
|
||||
"remarks": "수정된 테스트 데이터"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.status": "late"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "delete_manual_attendance",
|
||||
"name": "수동 등록 근태 삭제",
|
||||
"method": "DELETE",
|
||||
"endpoint": "/attendances/{{create_attendance.manual_attendance_id}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "delete_checkin_attendance",
|
||||
"name": "출퇴근 기록 삭제 (정리)",
|
||||
"method": "DELETE",
|
||||
"endpoint": "/attendances/{{check_in.attendance_id}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
87
docs/flow-tests/department-tree-api.json
Normal file
87
docs/flow-tests/department-tree-api.json
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"name": "Department Tree API 테스트",
|
||||
"description": "부서 트리 조회 테스트",
|
||||
"version": "1.0",
|
||||
"config": {
|
||||
"baseUrl": "",
|
||||
"timeout": 30000,
|
||||
"stopOnFailure": true
|
||||
},
|
||||
"variables": {
|
||||
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
|
||||
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}"
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": "login",
|
||||
"name": "로그인",
|
||||
"method": "POST",
|
||||
"endpoint": "/login",
|
||||
"body": {
|
||||
"user_id": "{{user_id}}",
|
||||
"user_pwd": "{{user_pwd}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.message": "로그인 성공",
|
||||
"$.access_token": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"token": "$.access_token"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "get_tree",
|
||||
"name": "부서 트리 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/departments/tree",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data": "@isArray"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "get_tree_with_users",
|
||||
"name": "부서 트리 조회 (사용자 포함)",
|
||||
"method": "GET",
|
||||
"endpoint": "/departments/tree",
|
||||
"query": {
|
||||
"with_users": true
|
||||
},
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data": "@isArray"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_departments",
|
||||
"name": "부서 목록 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/departments",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data": "@isArray"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
188
docs/flow-tests/employee-api-crud.json
Normal file
188
docs/flow-tests/employee-api-crud.json
Normal file
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"name": "Employee API CRUD 테스트",
|
||||
"description": "사원 관리 API 전체 CRUD 및 계정 생성 테스트",
|
||||
"version": "1.0",
|
||||
"config": {
|
||||
"baseUrl": "",
|
||||
"timeout": 30000,
|
||||
"stopOnFailure": true
|
||||
},
|
||||
"variables": {
|
||||
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
|
||||
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}",
|
||||
"test_email": "test.employee.{{$timestamp}}@example.com",
|
||||
"test_name": "테스트사원{{$random:4}}"
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": "login",
|
||||
"name": "로그인",
|
||||
"method": "POST",
|
||||
"endpoint": "/login",
|
||||
"body": {
|
||||
"user_id": "{{user_id}}",
|
||||
"user_pwd": "{{user_pwd}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.message": "로그인 성공",
|
||||
"$.access_token": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"token": "$.access_token",
|
||||
"current_user_id": "$.user.id"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "get_stats",
|
||||
"name": "사원 통계 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/employees/stats",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.total": "@isNumber",
|
||||
"$.data.active": "@isNumber",
|
||||
"$.data.leave": "@isNumber",
|
||||
"$.data.resigned": "@isNumber"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_employees",
|
||||
"name": "사원 목록 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/employees",
|
||||
"query": {
|
||||
"page": 1,
|
||||
"per_page": 10
|
||||
},
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.data": "@isArray"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "create_employee",
|
||||
"name": "사원 등록",
|
||||
"method": "POST",
|
||||
"endpoint": "/employees",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"name": "{{test_name}}",
|
||||
"email": "{{test_email}}",
|
||||
"phone": "010-1234-5678",
|
||||
"employee_number": "EMP{{$random:6}}",
|
||||
"employee_status": "active",
|
||||
"position": "사원",
|
||||
"hire_date": "{{$date}}",
|
||||
"json_extra": {
|
||||
"emergency_contact": "010-9999-8888",
|
||||
"address": "서울시 강남구"
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber",
|
||||
"$.data.user.name": "{{test_name}}"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"employee_id": "$.data.id",
|
||||
"user_id": "$.data.user_id"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "show_employee",
|
||||
"name": "사원 상세 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/employees/{{create_employee.employee_id}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "{{create_employee.employee_id}}",
|
||||
"$.data.employee_status": "active"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "update_employee",
|
||||
"name": "사원 정보 수정",
|
||||
"method": "PATCH",
|
||||
"endpoint": "/employees/{{create_employee.employee_id}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"position": "대리",
|
||||
"employee_status": "active",
|
||||
"json_extra": {
|
||||
"emergency_contact": "010-1111-2222",
|
||||
"address": "서울시 서초구",
|
||||
"skills": ["Laravel", "React"]
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_filtered",
|
||||
"name": "사원 필터 조회 (재직자)",
|
||||
"method": "GET",
|
||||
"endpoint": "/employees",
|
||||
"query": {
|
||||
"status": "active",
|
||||
"q": "{{test_name}}"
|
||||
},
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "delete_employee",
|
||||
"name": "사원 삭제",
|
||||
"method": "DELETE",
|
||||
"endpoint": "/employees/{{create_employee.employee_id}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user