docs: 인사/재무 Flow Tester TC 5종 추가
- hr-employees-crud.json: 사원 CRUD, 통계 - hr-attendances-crud.json: 근태, 출퇴근 체크 - hr-payrolls-crud.json: 급여, 확정, 명세서 - finance-deposits-crud.json: 입금 CRUD, 요약 - finance-withdrawals-crud.json: 출금 CRUD, 요약 - MASTER_PLAN.md: JSON 저장 경로 규칙 추가 - PROGRESS.md: 진행률 65%, 세션 히스토리 업데이트 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -76,17 +76,34 @@
|
||||
|
||||
**산출물**: `phase-3-api-mapping/mapping-matrix.md`
|
||||
|
||||
### Phase 4: 연동 작업 + 오류 수정
|
||||
**목표**: 실제 연동 및 오류 해결
|
||||
### Phase 4: 연동 작업 + 기능 검증
|
||||
**목표**: 실제 연동 및 기능 단위 TC 기반 검증
|
||||
|
||||
**검증 방식**:
|
||||
- 모든 작업 그룹에 대해 기능 단위별 순차 테스트
|
||||
- 선행 조건 파악 → 본 기능 → 파생 기능 순서로 TC 설계
|
||||
- 각 API별 실제 발생 가능한 모든 케이스 포함
|
||||
- Flow Tester(https://mng.sam.kr/dev-tools/flow-tester)로 검증
|
||||
- TC 전체 통과 시 해당 기능 완료 처리
|
||||
|
||||
**검증 프로세스**:
|
||||
```
|
||||
기능 선택 → 선행조건 파악 → TC 설계 → JSON 저장 → Flow Tester 검증 → 완료 처리
|
||||
```
|
||||
|
||||
작업 그룹:
|
||||
1. **인증/메뉴**: 로그인, 메뉴 로드, 권한 체크
|
||||
2. **품목 관리**: Items CRUD, BOM, 파일
|
||||
3. **거래처/판매**: 거래처, 견적, 주문
|
||||
4. **인사/재무**: 사원, 근태, 급여
|
||||
5. **기타 기능**: 게시판, 설정, 대시보드
|
||||
4. **단가 관리**: 단가 등록, 수정, 조회
|
||||
5. **인사/재무**: 사원, 근태, 급여
|
||||
6. **기타 기능**: 게시판, 설정, 대시보드
|
||||
|
||||
**산출물**: `phase-4-integration/integration-log.md`
|
||||
**산출물**:
|
||||
- `phase-4-integration/integration-log.md` - 연동 로그
|
||||
- `phase-4-integration/tc/` - 기능별 TC JSON 파일
|
||||
|
||||
**JSON 파일 저장 경로**: `docs/projects/api-integration/phase-4-integration/`
|
||||
|
||||
### Phase 5: 최종 검증 및 리포트
|
||||
**목표**: 전체 기능 검증 및 문서화
|
||||
@@ -229,4 +246,5 @@ api-integration-context.md # 결정사항, 임시 메모
|
||||
|
||||
| 날짜 | 변경 내용 | 작성자 |
|
||||
|------|----------|--------|
|
||||
| 2025-12-20 | 초기 마스터 플랜 작성 | Claude |
|
||||
| 2025-12-20 | 초기 마스터 플랜 작성 | Claude |
|
||||
| 2025-12-21 | Phase 4 검증 방식 변경: TC 기반 Flow Tester 검증, 단가 관리 그룹 추가 | Claude |
|
||||
@@ -11,8 +11,8 @@
|
||||
|------|-----|
|
||||
| **현재 Phase** | Phase 4 진행 중 |
|
||||
| **현재 작업** | 각 API 실제 호출 검증 |
|
||||
| **진행률** | 55% |
|
||||
| **다음 액션** | POST /v1/pricing 오류 확인 및 수정 |
|
||||
| **진행률** | 65% |
|
||||
| **다음 액션** | Flow Tester로 인사/재무 TC 검증 실행 |
|
||||
| **완료 기준** | ⚠️ 소스 존재가 아닌 **실제 API 호출 검증** |
|
||||
|
||||
---
|
||||
@@ -51,8 +51,13 @@
|
||||
|
||||
- [ ] 인증/메뉴 - 실제 API 호출 검증
|
||||
- [ ] 품목 관리 - 실제 API 호출 검증
|
||||
- [ ] 거래처/판매 - 실제 API 호출 검증 (POST /v1/pricing 오류 확인 필요)
|
||||
- [ ] 인사/재무 - 실제 API 호출 검증
|
||||
- [x] 거래처/판매 - 실제 API 호출 검증 ✅ (POST /v1/pricing 완료)
|
||||
- [ ] 인사/재무 - TC 생성 완료, Flow Tester 검증 대기
|
||||
- ✅ hr-employees-crud.json
|
||||
- ✅ hr-attendances-crud.json
|
||||
- ✅ hr-payrolls-crud.json
|
||||
- ✅ finance-deposits-crud.json
|
||||
- ✅ finance-withdrawals-crud.json
|
||||
- [ ] 기타 기능 - 실제 API 호출 검증
|
||||
|
||||
### Phase 5: 최종 검증 [⏳ 대기]
|
||||
@@ -115,6 +120,7 @@ serena.read_memory("api-integration-state")
|
||||
| #1 | 2025-12-20 | Phase 0 완료, 문서 구조 생성, 분석 완료 | 초기 세션 |
|
||||
| #2 | 2025-12-20 | Phase 3 완료, API 매핑 분석, Gap 분석 | 109 페이지 분석 |
|
||||
| #3 | 2025-12-20 | Phase 2 완료, 메뉴 추출, 권한 매핑 | 11개 대메뉴, 54개 중메뉴, 52개 권한 |
|
||||
| #4 | 2025-12-21 | 인사/재무 TC 생성 | 5개 TC JSON 파일 생성 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"name": "Finance Deposits CRUD Test",
|
||||
"description": "입금 관리 테스트 (생성, 조회, 수정, 삭제, 요약)",
|
||||
"version": "1.0",
|
||||
"config": {
|
||||
"baseUrl": "",
|
||||
"timeout": 30000,
|
||||
"stopOnFailure": false
|
||||
},
|
||||
"variables": {
|
||||
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
|
||||
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}"
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": "login",
|
||||
"name": "1. 로그인",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/login",
|
||||
"body": {
|
||||
"user_id": "{{user_id}}",
|
||||
"user_pwd": "{{user_pwd}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.access_token": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"token": "$.access_token"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "get_summary",
|
||||
"name": "2. 입금 요약 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/deposits/summary",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_deposits",
|
||||
"name": "3. 입금 목록 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/deposits?page=1&per_page=10",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "create_deposit",
|
||||
"name": "4. 입금 등록",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/deposits",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"deposit_date": "2024-12-15",
|
||||
"client_name": "TC 테스트 거래처",
|
||||
"amount": 1500000,
|
||||
"payment_method": "transfer",
|
||||
"description": "TC 테스트 입금"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"depositId": "$.data.id"
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "get_deposit",
|
||||
"name": "5. 입금 상세 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/deposits/{{create_deposit.depositId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "update_deposit",
|
||||
"name": "6. 입금 수정",
|
||||
"method": "PUT",
|
||||
"endpoint": "/api/v1/deposits/{{create_deposit.depositId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"amount": 2000000,
|
||||
"description": "TC 테스트 입금 - 수정됨"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "delete_deposit",
|
||||
"name": "7. 입금 삭제",
|
||||
"method": "DELETE",
|
||||
"endpoint": "/api/v1/deposits/{{create_deposit.depositId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 204]
|
||||
},
|
||||
"continueOnFailure": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"name": "Finance Withdrawals CRUD Test",
|
||||
"description": "출금 관리 테스트 (생성, 조회, 수정, 삭제, 요약)",
|
||||
"version": "1.0",
|
||||
"config": {
|
||||
"baseUrl": "",
|
||||
"timeout": 30000,
|
||||
"stopOnFailure": false
|
||||
},
|
||||
"variables": {
|
||||
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
|
||||
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}"
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": "login",
|
||||
"name": "1. 로그인",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/login",
|
||||
"body": {
|
||||
"user_id": "{{user_id}}",
|
||||
"user_pwd": "{{user_pwd}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.access_token": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"token": "$.access_token"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "get_summary",
|
||||
"name": "2. 출금 요약 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/withdrawals/summary",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_withdrawals",
|
||||
"name": "3. 출금 목록 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/withdrawals?page=1&per_page=10",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "create_withdrawal",
|
||||
"name": "4. 출금 등록",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/withdrawals",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"withdrawal_date": "2024-12-15",
|
||||
"client_name": "TC 테스트 거래처",
|
||||
"amount": 500000,
|
||||
"payment_method": "transfer",
|
||||
"description": "TC 테스트 출금"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"withdrawalId": "$.data.id"
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "get_withdrawal",
|
||||
"name": "5. 출금 상세 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/withdrawals/{{create_withdrawal.withdrawalId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "update_withdrawal",
|
||||
"name": "6. 출금 수정",
|
||||
"method": "PUT",
|
||||
"endpoint": "/api/v1/withdrawals/{{create_withdrawal.withdrawalId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"amount": 750000,
|
||||
"description": "TC 테스트 출금 - 수정됨"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "delete_withdrawal",
|
||||
"name": "7. 출금 삭제",
|
||||
"method": "DELETE",
|
||||
"endpoint": "/api/v1/withdrawals/{{create_withdrawal.withdrawalId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 204]
|
||||
},
|
||||
"continueOnFailure": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
{
|
||||
"name": "HR Attendances CRUD Test",
|
||||
"description": "근태 관리 테스트 (출퇴근, 조회, 수정, 통계)",
|
||||
"version": "1.0",
|
||||
"config": {
|
||||
"baseUrl": "",
|
||||
"timeout": 30000,
|
||||
"stopOnFailure": false
|
||||
},
|
||||
"variables": {
|
||||
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
|
||||
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}",
|
||||
"testUserId": 1
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": "login",
|
||||
"name": "1. 로그인",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/login",
|
||||
"body": {
|
||||
"user_id": "{{user_id}}",
|
||||
"user_pwd": "{{user_pwd}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.access_token": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"token": "$.access_token"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "monthly_stats",
|
||||
"name": "2. 월별 근태 통계 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/attendances/monthly-stats?year=2024&month=12",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_attendances",
|
||||
"name": "3. 근태 목록 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/attendances?page=1&per_page=10",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "check_in",
|
||||
"name": "4. 출근 체크인",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/attendances/check-in",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"check_in": "09:00:00",
|
||||
"gps_data": {
|
||||
"latitude": 37.5665,
|
||||
"longitude": 126.9780,
|
||||
"accuracy": 10
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201]
|
||||
},
|
||||
"extract": {
|
||||
"attendanceId": "$.data.id"
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "check_out",
|
||||
"name": "5. 퇴근 체크아웃",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/attendances/check-out",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"check_out": "18:00:00",
|
||||
"gps_data": {
|
||||
"latitude": 37.5665,
|
||||
"longitude": 126.9780,
|
||||
"accuracy": 10
|
||||
}
|
||||
},
|
||||
"expect": {
|
||||
"status": [200]
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "create_attendance",
|
||||
"name": "6. 근태 수동 등록",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/attendances",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"user_id": "{{testUserId}}",
|
||||
"base_date": "2024-11-15",
|
||||
"status": "onTime",
|
||||
"check_in": "09:00:00",
|
||||
"check_out": "18:00:00",
|
||||
"work_minutes": 540,
|
||||
"remarks": "TC 테스트 데이터"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"createdAttendanceId": "$.data.id"
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "get_attendance",
|
||||
"name": "7. 근태 상세 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/attendances/{{create_attendance.createdAttendanceId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "update_attendance",
|
||||
"name": "8. 근태 수정",
|
||||
"method": "PATCH",
|
||||
"endpoint": "/api/v1/attendances/{{create_attendance.createdAttendanceId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"status": "late",
|
||||
"late_minutes": 30,
|
||||
"remarks": "지각 - 교통 체증"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "delete_attendance",
|
||||
"name": "9. 근태 삭제",
|
||||
"method": "DELETE",
|
||||
"endpoint": "/api/v1/attendances/{{create_attendance.createdAttendanceId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 204]
|
||||
},
|
||||
"continueOnFailure": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"name": "HR Employees CRUD Test",
|
||||
"description": "사원 관리 CRUD 테스트 (생성, 조회, 수정, 삭제)",
|
||||
"version": "1.0",
|
||||
"config": {
|
||||
"baseUrl": "",
|
||||
"timeout": 30000,
|
||||
"stopOnFailure": false
|
||||
},
|
||||
"variables": {
|
||||
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
|
||||
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}"
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": "login",
|
||||
"name": "1. 로그인",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/login",
|
||||
"body": {
|
||||
"user_id": "{{user_id}}",
|
||||
"user_pwd": "{{user_pwd}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.access_token": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"token": "$.access_token"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "get_stats",
|
||||
"name": "2. 사원 통계 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/employees/stats",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_employees",
|
||||
"name": "3. 사원 목록 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/employees?page=1&per_page=10",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "create_employee",
|
||||
"name": "4. 사원 등록",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/employees",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"name": "{{$faker.koreanName}}",
|
||||
"email": "{{$faker.email:test}}",
|
||||
"phone": "{{$faker.phone}}",
|
||||
"employee_code": "{{$faker.employeeCode:EMP}}",
|
||||
"position_key": "staff",
|
||||
"employment_type_key": "regular",
|
||||
"employee_status": "active",
|
||||
"hire_date": "{{$faker.date:2024-01-01:2024-12-31}}",
|
||||
"work_type": "regular",
|
||||
"salary": 4500000,
|
||||
"is_active": true
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"employeeId": "$.data.id",
|
||||
"employeeName": "$.data.name"
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "get_employee",
|
||||
"name": "5. 사원 상세 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/employees/{{create_employee.employeeId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "update_employee",
|
||||
"name": "6. 사원 정보 수정",
|
||||
"method": "PATCH",
|
||||
"endpoint": "/api/v1/employees/{{create_employee.employeeId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"position_key": "manager",
|
||||
"salary": 5500000
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "delete_employee",
|
||||
"name": "7. 사원 삭제 (퇴직 처리)",
|
||||
"method": "DELETE",
|
||||
"endpoint": "/api/v1/employees/{{create_employee.employeeId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 204]
|
||||
},
|
||||
"continueOnFailure": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
{
|
||||
"name": "HR Payrolls CRUD Test",
|
||||
"description": "급여 관리 테스트 (생성, 조회, 수정, 확정, 지급)",
|
||||
"version": "1.0",
|
||||
"config": {
|
||||
"baseUrl": "",
|
||||
"timeout": 30000,
|
||||
"stopOnFailure": false
|
||||
},
|
||||
"variables": {
|
||||
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
|
||||
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}",
|
||||
"testUserId": 1,
|
||||
"testYear": 2024,
|
||||
"testMonth": 11
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": "login",
|
||||
"name": "1. 로그인",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/login",
|
||||
"body": {
|
||||
"user_id": "{{user_id}}",
|
||||
"user_pwd": "{{user_pwd}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.access_token": "@isString"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"token": "$.access_token"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "get_summary",
|
||||
"name": "2. 급여 요약 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/payrolls/summary?year={{testYear}}&month={{testMonth}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "list_payrolls",
|
||||
"name": "3. 급여 목록 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/payrolls?year={{testYear}}&month={{testMonth}}&page=1&per_page=10",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "create_payroll",
|
||||
"name": "4. 급여 수동 등록",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/payrolls",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"user_id": "{{testUserId}}",
|
||||
"pay_year": "{{testYear}}",
|
||||
"pay_month": "{{testMonth}}",
|
||||
"base_salary": 3500000,
|
||||
"overtime_pay": 250000,
|
||||
"bonus": 0,
|
||||
"allowances": [
|
||||
{"name": "식대", "amount": 100000},
|
||||
{"name": "교통비", "amount": 100000}
|
||||
],
|
||||
"income_tax": 120000,
|
||||
"resident_tax": 12000,
|
||||
"health_insurance": 115000,
|
||||
"pension": 157500,
|
||||
"employment_insurance": 31500,
|
||||
"note": "TC 테스트 급여"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 201],
|
||||
"jsonPath": {
|
||||
"$.success": true,
|
||||
"$.data.id": "@isNumber"
|
||||
}
|
||||
},
|
||||
"extract": {
|
||||
"payrollId": "$.data.id"
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "get_payroll",
|
||||
"name": "5. 급여 상세 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "update_payroll",
|
||||
"name": "6. 급여 수정",
|
||||
"method": "PUT",
|
||||
"endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"body": {
|
||||
"bonus": 500000,
|
||||
"note": "성과급 추가"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "get_payslip",
|
||||
"name": "7. 급여명세서 조회",
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}/payslip",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "confirm_payroll",
|
||||
"name": "8. 급여 확정",
|
||||
"method": "POST",
|
||||
"endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}/confirm",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200],
|
||||
"jsonPath": {
|
||||
"$.success": true
|
||||
}
|
||||
},
|
||||
"continueOnFailure": true
|
||||
},
|
||||
{
|
||||
"id": "delete_payroll",
|
||||
"name": "9. 급여 삭제",
|
||||
"method": "DELETE",
|
||||
"endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}",
|
||||
"headers": {
|
||||
"Authorization": "Bearer {{login.token}}"
|
||||
},
|
||||
"expect": {
|
||||
"status": [200, 204]
|
||||
},
|
||||
"continueOnFailure": true
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user