refactor: [docs] 팀별 폴더 구조 재편 (공유/개발/프론트/기획)

- 개발팀 전용 폴더 dev/ 생성 (standards, guides, quickstart, changes, deploys, data, history, dev_plans 이동)
- 프론트엔드 전용 폴더 frontend/ 생성 (api/ → frontend/api-specs/)
- 기획팀 폴더 requests/ 생성
- plans/ → dev/dev_plans/ 이름 변경
- README.md 신규 (사람용 안내), INDEX.md 재작성 (Claude Code용)
- resources.md 신규 (노션 링크용, assets/brochure 이관 예정)
- CURRENT_WORKS.md 삭제, TODO.md → dev/ 이동
- 전체 참조 경로 업데이트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 16:46:03 +09:00
parent 7e1daca81b
commit db63fcff85
440 changed files with 407 additions and 460 deletions

View File

@@ -0,0 +1,143 @@
{
"name": "계정 관리 플로우",
"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": "/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_agreements",
"name": "이용 약관 목록 조회",
"method": "GET",
"endpoint": "/api/v1/account/agreements",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"extract": {
"agreements": "$.data"
}
},
{
"id": "update_agreements",
"name": "이용 약관 동의 상태 수정",
"method": "PUT",
"endpoint": "/api/v1/account/agreements",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"agreements": [
{
"type": "terms",
"agreed": true
},
{
"type": "privacy",
"agreed": true
},
{
"type": "marketing",
"agreed": false
}
]
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_agreements",
"name": "약관 동의 상태 확인",
"method": "GET",
"endpoint": "/api/v1/account/agreements",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "suspend_account",
"name": "계정 일시 정지",
"description": "계정을 일시 정지 상태로 변경",
"method": "POST",
"endpoint": "/api/v1/account/suspend",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"reason": "테스트용 일시 정지",
"duration_days": 30
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "withdraw_account",
"name": "회원 탈퇴 (테스트 스킵)",
"description": "회원 탈퇴 API - 실제 실행 시 계정 삭제됨 (주의)",
"method": "POST",
"endpoint": "/api/v1/account/withdraw",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"reason": "서비스 불만족",
"feedback": "테스트용 피드백입니다"
},
"expect": {
"status": [200, 400, 422],
"jsonPath": {
"$.success": "@isBoolean"
}
},
"continueOnFailure": true,
"skip": true,
"skipReason": "실제 탈퇴 실행 방지 - 수동 테스트 필요"
}
]
}

View 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
}
}
}
]
}

View File

@@ -0,0 +1,124 @@
{
"name": "Auth API Flow Test",
"description": "인증 API 전체 플로우 테스트 - 로그인, 프로필 조회, 토큰 갱신, 로그아웃",
"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": "1. 로그인",
"description": "access_token, refresh_token 획득",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString",
"$.refresh_token": "@isString"
}
},
"extract": {
"access_token": "$.access_token",
"refresh_token": "$.refresh_token"
}
},
{
"id": "get_profile",
"name": "2. 프로필 조회",
"description": "access_token으로 현재 사용자 정보 조회",
"method": "GET",
"endpoint": "/users/me",
"headers": {
"Authorization": "Bearer {{login.access_token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"user_id": "$.data.id",
"user_name": "$.data.name"
}
},
{
"id": "refresh_token",
"name": "3. 토큰 갱신",
"description": "refresh_token으로 새 access_token 발급",
"method": "POST",
"endpoint": "/refresh",
"body": {
"refresh_token": "{{login.refresh_token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"new_access_token": "$.access_token"
}
},
{
"id": "verify_new_token",
"name": "4. 새 토큰으로 프로필 조회",
"description": "갱신된 토큰으로 API 호출 가능 확인",
"method": "GET",
"endpoint": "/users/me",
"headers": {
"Authorization": "Bearer {{refresh_token.new_access_token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "logout",
"name": "5. 로그아웃",
"description": "새 access_token으로 로그아웃",
"method": "POST",
"endpoint": "/logout",
"headers": {
"Authorization": "Bearer {{refresh_token.new_access_token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_logout",
"name": "6. 로그아웃 확인",
"description": "로그아웃 후 토큰 무효화 확인",
"method": "GET",
"endpoint": "/users/me",
"headers": {
"Authorization": "Bearer {{refresh_token.new_access_token}}"
},
"expect": {
"status": [401]
},
"continueOnFailure": true
}
]
}

View File

@@ -0,0 +1,85 @@
{
"name": "인증 플로우 테스트",
"description": "로그인, 프로필 조회, 토큰 갱신, 로그아웃 플로우를 테스트합니다.",
"version": "1.0",
"config": {
"apiKey": "42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a",
"baseUrl": "https://api.sam.kr/api/v1",
"timeout": 30000,
"stopOnFailure": true
},
"variables": {
"user_id": "codebridgex",
"user_pwd": "code1234"
},
"steps": [
{
"id": "login",
"name": "로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{variables.user_id}}",
"user_pwd": "{{variables.user_pwd}}"
},
"extract": {
"accessToken": "$.access_token",
"refreshToken": "$.refresh_token"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
}
},
{
"id": "get_profile",
"name": "프로필 조회",
"method": "GET",
"endpoint": "/users/me",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["login"],
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "refresh_token",
"name": "토큰 갱신",
"method": "POST",
"endpoint": "/refresh",
"body": {
"refresh_token": "{{login.refreshToken}}"
},
"dependsOn": ["get_profile"],
"extract": {
"newToken": "$.access_token"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
}
},
{
"id": "logout",
"name": "로그아웃",
"method": "POST",
"endpoint": "/logout",
"headers": {
"Authorization": "Bearer {{refresh_token.newToken}}"
},
"dependsOn": ["refresh_token"],
"expect": {
"status": [200, 204]
}
}
]
}

View File

@@ -0,0 +1,233 @@
{
"name": "부실채권 관리 플로우",
"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": "/api/v1/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_bad_debts",
"name": "부실채권 목록 조회",
"method": "GET",
"endpoint": "/api/v1/bad-debts",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"queryParams": {
"page": 1,
"per_page": 10
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"extract": {
"existing_count": "$.data.total"
}
},
{
"id": "create_bad_debt",
"name": "부실채권 등록",
"method": "POST",
"endpoint": "/api/v1/bad-debts",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"client_id": 1,
"sale_id": 1,
"amount": 5000000,
"occurred_at": "2025-01-01",
"reason": "연체 90일 초과",
"status": "pending",
"description": "Flow 테스트용 부실채권"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"bad_debt_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "get_bad_debt_detail",
"name": "부실채권 상세 조회",
"method": "GET",
"endpoint": "/api/v1/bad-debts/{{create_bad_debt.bad_debt_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"continueOnFailure": true
},
{
"id": "add_document",
"name": "관련 문서 첨부",
"method": "POST",
"endpoint": "/api/v1/bad-debts/{{create_bad_debt.bad_debt_id}}/documents",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"file_id": 1,
"document_type": "collection_notice",
"description": "독촉장 발송 증빙"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "list_documents",
"name": "첨부 문서 목록 조회",
"method": "GET",
"endpoint": "/api/v1/bad-debts/{{create_bad_debt.bad_debt_id}}/documents",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "add_memo",
"name": "메모 추가",
"method": "POST",
"endpoint": "/api/v1/bad-debts/{{create_bad_debt.bad_debt_id}}/memos",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"content": "1차 독촉장 발송 완료",
"memo_type": "collection"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"memo_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "list_memos",
"name": "메모 목록 조회",
"method": "GET",
"endpoint": "/api/v1/bad-debts/{{create_bad_debt.bad_debt_id}}/memos",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "toggle_status",
"name": "상태 토글 (처리중)",
"method": "POST",
"endpoint": "/api/v1/bad-debts/{{create_bad_debt.bad_debt_id}}/toggle",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"status": "in_progress"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "update_bad_debt",
"name": "부실채권 수정",
"method": "PUT",
"endpoint": "/api/v1/bad-debts/{{create_bad_debt.bad_debt_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"description": "Flow 테스트 - 수정됨",
"status": "resolved"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "delete_bad_debt",
"name": "부실채권 삭제",
"method": "DELETE",
"endpoint": "/api/v1/bad-debts/{{create_bad_debt.bad_debt_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
}
]
}

View File

@@ -0,0 +1,166 @@
{
"$schema": "flow-tester-schema.json",
"name": "분기 테스트 플로우 예시",
"description": "Flow Tester의 조건 분기 기능을 보여주는 예시 플로우입니다. 로그인 성공/실패에 따른 분기, 권한에 따른 분기, 조건부 의존성 등을 테스트합니다.",
"version": "1.0.0",
"author": "SAM Team",
"category": "examples",
"tags": ["branching", "condition", "if-else", "example"],
"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. 로그인 시도",
"description": "사용자 인증을 시도합니다",
"method": "POST",
"endpoint": "/api/v1/login",
"body": {
"user_id": "{{variables.user_id}}",
"user_pwd": "{{variables.user_pwd}}"
},
"expect": {
"status": [200, 401]
},
"extract": {
"token": "$.access_token",
"role": "$.user.role",
"permissions": "$.user.permissions"
},
"continueOnFailure": true
},
{
"id": "login_success_path",
"name": "2-A. 로그인 성공 처리",
"description": "로그인이 성공했을 때만 실행됩니다",
"condition": {"stepResult": "login", "is": "success"},
"dependsOn": ["login"],
"method": "GET",
"endpoint": "/api/v1/users/me",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200]
}
},
{
"id": "login_failure_path",
"name": "2-B. 로그인 실패 처리",
"description": "로그인이 실패했을 때만 실행됩니다",
"condition": {"stepResult": "login", "is": "failure"},
"dependsOn": [{"step": "login", "onlyIf": "any"}],
"method": "POST",
"endpoint": "/api/v1/auth/password-reset-request",
"body": {
"email": "{{variables.user_id}}"
},
"expect": {
"status": [200, 404]
},
"continueOnFailure": true
},
{
"id": "admin_dashboard",
"name": "3-A. 관리자 대시보드",
"description": "관리자 권한이 있을 때만 실행됩니다",
"condition": "{{login.role}} == 'admin'",
"dependsOn": ["login_success_path"],
"method": "GET",
"endpoint": "/api/v1/admin/dashboard",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200]
}
},
{
"id": "user_dashboard",
"name": "3-B. 일반 사용자 대시보드",
"description": "일반 사용자 권한일 때만 실행됩니다",
"condition": "{{login.role}} == 'user'",
"dependsOn": ["login_success_path"],
"method": "GET",
"endpoint": "/api/v1/user/dashboard",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200]
}
},
{
"id": "premium_features",
"name": "3-C. 프리미엄 기능",
"description": "프리미엄 권한이 있을 때만 실행됩니다",
"condition": {
"and": [
{"stepResult": "login", "is": "success"},
{"left": "{{login.permissions}}", "op": "contains", "right": "premium"}
]
},
"dependsOn": ["login_success_path"],
"method": "GET",
"endpoint": "/api/v1/premium/features",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200]
}
},
{
"id": "create_report",
"name": "4. 리포트 생성 (관리자만)",
"description": "관리자만 리포트를 생성할 수 있습니다",
"condition": {"stepResult": "admin_dashboard", "is": "success"},
"dependsOn": [{"step": "admin_dashboard", "onlyIf": "executed"}],
"method": "POST",
"endpoint": "/api/v1/admin/reports",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"type": "daily",
"date": "{{$faker.date}}"
},
"expect": {
"status": [201]
}
},
{
"id": "cleanup_always",
"name": "5. 정리 작업 (항상 실행)",
"description": "성공/실패와 무관하게 항상 실행되는 정리 작업입니다",
"dependsOn": [
{"step": "login", "onlyIf": "any"},
{"step": "admin_dashboard", "onlyIf": "any"},
{"step": "user_dashboard", "onlyIf": "any"}
],
"method": "POST",
"endpoint": "/api/v1/logout",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 401]
},
"continueOnFailure": true
}
]
}

View File

@@ -0,0 +1,234 @@
{
"name": "Client API CRUD Flow Test",
"description": "거래처(Client) 관리 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_client_code": "TEST-{{$timestamp}}",
"test_client_name": "테스트거래처_{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_clients",
"name": "2. 거래처 목록 조회",
"method": "GET",
"endpoint": "/clients",
"params": {
"page": 1,
"size": 10
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.current_page": 1
}
},
"extract": {
"total_before": "$.data.total"
}
},
{
"id": "create_client",
"name": "3. 거래처 생성",
"method": "POST",
"endpoint": "/clients",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"client_code": "{{test_client_code}}",
"name": "{{test_client_name}}",
"contact_person": "테스트담당자",
"phone": "02-1234-5678",
"email": "test@example.com",
"address": "서울시 강남구 테스트로 123",
"business_no": "123-45-67890",
"business_type": "서비스업",
"business_item": "소프트웨어개발",
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"client_id": "$.data.id",
"client_code": "$.data.client_code"
}
},
{
"id": "show_client",
"name": "4. 거래처 단건 조회",
"method": "GET",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "{{create_client.client_id}}",
"$.data.client_code": "{{create_client.client_code}}",
"$.data.name": "{{test_client_name}}"
}
}
},
{
"id": "update_client",
"name": "5. 거래처 수정",
"method": "PUT",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"client_code": "{{create_client.client_code}}",
"name": "{{test_client_name}}_수정됨",
"contact_person": "수정담당자",
"phone": "02-9999-8888",
"email": "updated@example.com",
"address": "서울시 서초구 수정로 456"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.contact_person": "수정담당자"
}
}
},
{
"id": "verify_update",
"name": "6. 수정 확인 조회",
"method": "GET",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.contact_person": "수정담당자",
"$.data.phone": "02-9999-8888"
}
}
},
{
"id": "toggle_inactive",
"name": "7. 거래처 비활성화 토글",
"method": "PATCH",
"endpoint": "/clients/{{create_client.client_id}}/toggle",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": false
}
}
},
{
"id": "toggle_active",
"name": "8. 거래처 활성화 토글",
"method": "PATCH",
"endpoint": "/clients/{{create_client.client_id}}/toggle",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": true
}
}
},
{
"id": "search_client",
"name": "9. 거래처 검색",
"method": "GET",
"endpoint": "/clients",
"params": {
"q": "{{test_client_name}}",
"page": 1,
"size": 10
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.total": "@isNumber"
}
}
},
{
"id": "delete_client",
"name": "10. 거래처 삭제",
"method": "DELETE",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_delete",
"name": "11. 삭제 확인 (404 예상)",
"method": "GET",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [404],
"jsonPath": {
"$.success": false
}
}
}
]
}

View File

@@ -0,0 +1,193 @@
{
"name": "Client Group API CRUD Flow Test",
"description": "거래처 그룹(Client Group) 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_group_name": "테스트그룹_{{$timestamp}}",
"test_group_code": "TG-{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_groups",
"name": "2. 거래처 그룹 목록 조회",
"method": "GET",
"endpoint": "/client-groups",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_group",
"name": "3. 거래처 그룹 생성",
"method": "POST",
"endpoint": "/client-groups",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"group_code": "{{test_group_code}}",
"group_name": "{{test_group_name}}",
"price_rate": 1.0,
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"group_id": "$.data.id",
"group_name": "$.data.group_name"
}
},
{
"id": "show_group",
"name": "4. 거래처 그룹 단건 조회",
"method": "GET",
"endpoint": "/client-groups/{{create_group.group_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "{{create_group.group_id}}",
"$.data.group_name": "{{test_group_name}}"
}
}
},
{
"id": "update_group",
"name": "5. 거래처 그룹 수정",
"method": "PUT",
"endpoint": "/client-groups/{{create_group.group_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"group_code": "{{test_group_code}}",
"group_name": "{{test_group_name}}_수정됨",
"price_rate": 1.5
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_update",
"name": "6. 수정 확인 조회",
"method": "GET",
"endpoint": "/client-groups/{{create_group.group_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.price_rate": 1.5
}
}
},
{
"id": "toggle_inactive",
"name": "7. 그룹 비활성화 토글",
"method": "PATCH",
"endpoint": "/client-groups/{{create_group.group_id}}/toggle",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": false
}
}
},
{
"id": "toggle_active",
"name": "8. 그룹 활성화 토글",
"method": "PATCH",
"endpoint": "/client-groups/{{create_group.group_id}}/toggle",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": true
}
}
},
{
"id": "delete_group",
"name": "9. 거래처 그룹 삭제",
"method": "DELETE",
"endpoint": "/client-groups/{{create_group.group_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_delete",
"name": "10. 삭제 확인 (404 예상)",
"method": "GET",
"endpoint": "/client-groups/{{create_group.group_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [404],
"jsonPath": {
"$.success": false
}
}
}
]
}

View File

@@ -0,0 +1,215 @@
{
"name": "Client API CRUD 테스트",
"description": "거래처(Client) API 전체 CRUD 테스트 - 생성, 조회, 수정, 토글, 삭제 포함. business_no, business_type, business_item 신규 필드 검증 포함.",
"version": "1.0",
"config": {
"baseUrl": "https://api.sam.kr/api/v1",
"apiKey": "{{$env.FLOW_TESTER_API_KEY}}",
"timeout": 30000,
"stopOnFailure": true
},
"variables": {
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}",
"test_client_code": "TEST_CLIENT_{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인 - 토큰 획득",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{variables.user_id}}",
"user_pwd": "{{variables.user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "create_client",
"name": "2. 거래처 생성 (신규 필드 포함)",
"method": "POST",
"endpoint": "/clients",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"client_code": "{{variables.test_client_code}}",
"name": "테스트 거래처",
"contact_person": "홍길동",
"phone": "02-1234-5678",
"email": "test@example.com",
"address": "서울시 강남구 테헤란로 123",
"business_no": "123-45-67890",
"business_type": "제조업",
"business_item": "전자부품",
"is_active": "Y"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber",
"$.data.client_code": "{{variables.test_client_code}}",
"$.data.name": "테스트 거래처",
"$.data.business_no": "123-45-67890",
"$.data.business_type": "제조업",
"$.data.business_item": "전자부품"
}
},
"extract": {
"client_id": "$.data.id"
}
},
{
"id": "list_clients",
"name": "3. 거래처 목록 조회",
"method": "GET",
"endpoint": "/clients?page=1&size=20&q=테스트",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.data": "@isArray",
"$.data.current_page": 1
}
}
},
{
"id": "show_client",
"name": "4. 거래처 단건 조회",
"method": "GET",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "{{create_client.client_id}}",
"$.data.client_code": "{{variables.test_client_code}}",
"$.data.business_no": "123-45-67890",
"$.data.business_type": "제조업",
"$.data.business_item": "전자부품"
}
}
},
{
"id": "update_client",
"name": "5. 거래처 수정 (신규 필드 변경)",
"method": "PUT",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"name": "테스트 거래처 (수정됨)",
"contact_person": "김철수",
"business_no": "987-65-43210",
"business_type": "도소매업",
"business_item": "IT솔루션"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.name": "테스트 거래처 (수정됨)",
"$.data.contact_person": "김철수",
"$.data.business_no": "987-65-43210",
"$.data.business_type": "도소매업",
"$.data.business_item": "IT솔루션"
}
}
},
{
"id": "toggle_client",
"name": "6. 거래처 활성/비활성 토글 (N으로)",
"method": "PATCH",
"endpoint": "/clients/{{create_client.client_id}}/toggle",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": false
}
}
},
{
"id": "toggle_client_back",
"name": "7. 거래처 토글 복원 (Y로)",
"method": "PATCH",
"endpoint": "/clients/{{create_client.client_id}}/toggle",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": true
}
}
},
{
"id": "list_active_only",
"name": "8. 활성 거래처만 조회",
"method": "GET",
"endpoint": "/clients?only_active=1",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.data": "@isArray"
}
}
},
{
"id": "delete_client",
"name": "9. 거래처 삭제",
"method": "DELETE",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_deleted",
"name": "10. 삭제 확인 (404 예상)",
"method": "GET",
"endpoint": "/clients/{{create_client.client_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [404],
"jsonPath": {
"$.success": false
}
}
}
]
}

View File

@@ -0,0 +1,200 @@
{
"name": "회사 가입 신청 플로우",
"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}}",
"test_business_number": "123-45-67890"
},
"steps": [
{
"id": "login",
"name": "로그인",
"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": "check_business_number",
"name": "사업자번호 확인",
"description": "가입 가능한 회사인지 사업자번호로 확인",
"method": "POST",
"endpoint": "/api/v1/companies/check",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"business_number": "{{test_business_number}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"extract": {
"company_exists": "$.data.exists",
"company_id": "$.data.company_id"
}
},
{
"id": "submit_request",
"name": "회사 가입 신청",
"method": "POST",
"endpoint": "/api/v1/companies/request",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"company_id": "{{check_business_number.company_id}}",
"department": "개발팀",
"position": "개발자",
"message": "Flow 테스트용 가입 신청입니다."
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"request_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "get_my_requests",
"name": "내 신청 목록 조회",
"method": "GET",
"endpoint": "/api/v1/companies/my-requests",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "get_request_detail",
"name": "신청 상세 조회",
"method": "GET",
"endpoint": "/api/v1/companies/requests/{{submit_request.request_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"continueOnFailure": true
},
{
"id": "approve_request",
"name": "신청 승인 (관리자)",
"description": "관리자 권한으로 가입 신청 승인",
"method": "POST",
"endpoint": "/api/v1/companies/requests/{{submit_request.request_id}}/approve",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"role_id": 2,
"department_id": 1,
"approved_message": "승인되었습니다."
},
"expect": {
"status": [200, 403],
"jsonPath": {
"$.success": "@isBoolean"
}
},
"continueOnFailure": true
},
{
"id": "submit_another_request",
"name": "거절 테스트용 신청",
"method": "POST",
"endpoint": "/api/v1/companies/request",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"company_id": "{{check_business_number.company_id}}",
"department": "영업팀",
"position": "매니저",
"message": "거절 테스트용 신청입니다."
},
"expect": {
"status": [200, 201, 400, 422],
"jsonPath": {
"$.success": "@isBoolean"
}
},
"extract": {
"reject_request_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "reject_request",
"name": "신청 거절 (관리자)",
"description": "관리자 권한으로 가입 신청 거절",
"method": "POST",
"endpoint": "/api/v1/companies/requests/{{submit_another_request.reject_request_id}}/reject",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"reason": "테스트 거절 사유"
},
"expect": {
"status": [200, 403],
"jsonPath": {
"$.success": "@isBoolean"
}
},
"continueOnFailure": true
},
{
"id": "verify_rejection",
"name": "거절 상태 확인",
"method": "GET",
"endpoint": "/api/v1/companies/requests/{{submit_another_request.reject_request_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.status": "rejected"
}
},
"continueOnFailure": true
}
]
}

View 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"
}
}
}
]
}

View 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
}
}
}
]
}

View File

@@ -0,0 +1,410 @@
{
"name": "품목 삭제 테스트 (Force Delete & 사용중 체크)",
"description": "품목 삭제 기능 테스트: 1) 사용되지 않는 품목은 Force Delete 2) 사용 중인 품목은 삭제 불가 에러 반환",
"version": "1.0",
"config": {
"baseUrl": "",
"timeout": 30000,
"stopOnFailure": true
},
"variables": {
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}",
"ts": "{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "create_test_product",
"name": "테스트용 제품 생성 (FG)",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"product_type": "FG",
"code": "TEST-DEL-FG-{{ts}}",
"name": "삭제테스트용 완제품",
"unit": "EA",
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"product_id": "$.data.id",
"product_code": "$.data.code"
}
},
{
"id": "create_test_material",
"name": "테스트용 자재 생성 (RM)",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"product_type": "RM",
"code": "TEST-DEL-RM-{{ts}}",
"name": "삭제테스트용 원자재",
"unit": "EA",
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"material_id": "$.data.id",
"material_code": "$.data.code"
}
},
{
"id": "delete_unused_product",
"name": "사용되지 않는 제품 삭제 (Force Delete 성공)",
"method": "DELETE",
"endpoint": "/items/{{create_test_product.product_id}}?item_type=FG",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_product_deleted",
"name": "제품 영구 삭제 확인 (404 응답)",
"method": "GET",
"endpoint": "/items/{{create_test_product.product_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [404],
"jsonPath": {
"$.success": false
}
}
},
{
"id": "delete_unused_material",
"name": "사용되지 않는 자재 삭제 (Force Delete 성공)",
"method": "DELETE",
"endpoint": "/items/{{create_test_material.material_id}}?item_type=RM",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_material_deleted",
"name": "자재 영구 삭제 확인 (404 응답)",
"method": "GET",
"endpoint": "/items/{{create_test_material.material_id}}?item_type=RM",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [404],
"jsonPath": {
"$.success": false
}
}
},
{
"id": "create_parent_product",
"name": "BOM 상위 제품 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"product_type": "FG",
"code": "TEST-BOM-PARENT-{{ts}}",
"name": "BOM 상위 제품",
"unit": "EA",
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"parent_id": "$.data.id"
}
},
{
"id": "create_child_material",
"name": "BOM 구성품용 자재 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"product_type": "RM",
"code": "TEST-BOM-CHILD-{{ts}}",
"name": "BOM 구성품 자재",
"unit": "EA",
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"child_material_id": "$.data.id",
"child_material_code": "$.data.code"
}
},
{
"id": "add_bom_component",
"name": "BOM 구성품 추가 (자재를 상위 제품에 연결)",
"method": "POST",
"endpoint": "/items/{{create_parent_product.parent_id}}/bom",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"items": [
{
"ref_type": "MATERIAL",
"ref_id": "{{create_child_material.child_material_id}}",
"quantity": 2,
"unit": "EA"
}
]
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_used_material",
"name": "사용 중인 자재 삭제 시도 (400 에러 - BOM 구성품)",
"method": "DELETE",
"endpoint": "/items/{{create_child_material.child_material_id}}?item_type=RM",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [400],
"jsonPath": {
"$.success": false
}
}
},
{
"id": "create_batch_products",
"name": "일괄 삭제용 제품 1 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"product_type": "FG",
"code": "TEST-BATCH-1-{{ts}}",
"name": "일괄삭제 테스트 1",
"unit": "EA",
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"batch_id_1": "$.data.id"
}
},
{
"id": "create_batch_products_2",
"name": "일괄 삭제용 제품 2 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"product_type": "FG",
"code": "TEST-BATCH-2-{{ts}}",
"name": "일괄삭제 테스트 2",
"unit": "EA",
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"batch_id_2": "$.data.id"
}
},
{
"id": "batch_delete_unused",
"name": "사용되지 않는 제품들 일괄 삭제 (성공)",
"method": "DELETE",
"endpoint": "/items/batch",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type": "FG",
"ids": ["{{create_batch_products.batch_id_1}}", "{{create_batch_products_2.batch_id_2}}"]
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_batch_for_fail",
"name": "일괄 삭제 실패 테스트용 제품 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"product_type": "FG",
"code": "TEST-BATCH-FAIL-{{ts}}",
"name": "일괄삭제 실패 테스트",
"unit": "EA",
"is_active": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"batch_fail_id": "$.data.id"
}
},
{
"id": "batch_delete_with_used",
"name": "사용 중인 자재 일괄 삭제 시도 (400 에러)",
"method": "DELETE",
"endpoint": "/items/batch",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type": "RM",
"ids": ["{{create_child_material.child_material_id}}"]
},
"expect": {
"status": [400],
"jsonPath": {
"$.success": false
}
}
},
{
"id": "cleanup_bom",
"name": "정리: BOM 구성품 전체 삭제 (빈 배열로 교체)",
"method": "POST",
"endpoint": "/items/{{create_parent_product.parent_id}}/bom/replace",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"items": []
},
"expect": {
"status": [200, 201, 404]
}
},
{
"id": "cleanup_parent",
"name": "정리: 상위 제품 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_parent_product.parent_id}}?item_type=FG",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 404]
}
},
{
"id": "cleanup_child",
"name": "정리: 구성품 자재 삭제 (BOM 해제 후)",
"method": "DELETE",
"endpoint": "/items/{{create_child_material.child_material_id}}?item_type=RM",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 404]
}
},
{
"id": "cleanup_batch_fail",
"name": "정리: 일괄삭제 테스트용 제품 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_batch_for_fail.batch_fail_id}}?item_type=FG",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 404]
}
}
]
}

View File

@@ -0,0 +1,287 @@
{
"name": "품목 삭제 API 테스트",
"description": "품목 삭제 시 참조 무결성 체크 및 soft delete 동작을 테스트합니다.",
"version": "1.0",
"config": {
"apiKey": "42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a",
"baseUrl": "https://api.sam.kr/api/v1",
"timeout": 30000,
"stopOnFailure": false
},
"variables": {
"user_id": "codebridgex",
"user_pwd": "code1234",
"testProductCode": "TEST-DEL-001",
"testProductName": "삭제 테스트용 품목",
"testBomParentCode": "TEST-BOM-PARENT-001",
"testBomParentName": "BOM 부모 품목"
},
"steps": [
{
"id": "login",
"name": "로그인",
"description": "API 테스트를 위한 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{variables.user_id}}",
"user_pwd": "{{variables.user_pwd}}"
},
"extract": {
"accessToken": "$.access_token",
"refreshToken": "$.refresh_token"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
}
},
{
"id": "create_product_for_delete",
"name": "삭제 테스트용 품목 생성",
"description": "단순 삭제 테스트용 품목 생성 (BOM에 미사용)",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"body": {
"code": "{{variables.testProductCode}}",
"name": "{{variables.testProductName}}",
"unit": "EA",
"product_type": "FG",
"is_active": true
},
"dependsOn": ["login"],
"extract": {
"createdProductId": "$.data.id",
"createdProductCode": "$.data.code"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
}
},
{
"id": "get_items_list",
"name": "품목 목록 조회",
"description": "생성된 품목이 목록에 있는지 확인",
"method": "GET",
"endpoint": "/items?type=FG&search={{create_product_for_delete.createdProductCode}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["create_product_for_delete"],
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_product_success",
"name": "품목 삭제 (정상)",
"description": "BOM에서 사용되지 않는 품목 삭제 - 성공해야 함",
"method": "DELETE",
"endpoint": "/items/{{create_product_for_delete.createdProductId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["get_items_list"],
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_deleted_not_in_list",
"name": "삭제된 품목 목록 미포함 확인",
"description": "삭제된 품목이 기본 목록에서 제외되는지 확인",
"method": "GET",
"endpoint": "/items?type=FG&search={{create_product_for_delete.createdProductCode}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["delete_product_success"],
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"note": "data.total이 0이어야 함 (삭제된 품목 미포함)"
},
{
"id": "delete_already_deleted_item",
"name": "이미 삭제된 품목 재삭제 시도",
"description": "soft delete된 품목을 다시 삭제하면 404 반환해야 함",
"method": "DELETE",
"endpoint": "/items/{{create_product_for_delete.createdProductId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["verify_deleted_not_in_list"],
"expect": {
"status": [404],
"jsonPath": {
"$.success": false
}
}
},
{
"id": "create_bom_parent",
"name": "BOM 부모 품목 생성",
"description": "BOM 테스트를 위한 부모 품목 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"body": {
"code": "{{variables.testBomParentCode}}",
"name": "{{variables.testBomParentName}}",
"unit": "EA",
"product_type": "FG",
"is_active": true
},
"dependsOn": ["login"],
"extract": {
"bomParentId": "$.data.id"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_bom_child",
"name": "BOM 자식 품목 생성",
"description": "BOM 구성품으로 사용될 품목 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"body": {
"code": "TEST-BOM-CHILD-001",
"name": "BOM 자식 품목",
"unit": "EA",
"product_type": "PT",
"is_active": true
},
"dependsOn": ["create_bom_parent"],
"extract": {
"bomChildId": "$.data.id"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "add_bom_component",
"name": "BOM 구성품 추가",
"description": "부모 품목에 자식 품목을 BOM으로 등록",
"method": "POST",
"endpoint": "/items/{{create_bom_parent.bomParentId}}/bom",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"body": {
"items": [
{
"ref_type": "PRODUCT",
"ref_id": "{{create_bom_child.bomChildId}}",
"quantity": 2,
"sort_order": 1
}
]
},
"dependsOn": ["create_bom_child"],
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_bom_used_item_fail",
"name": "BOM 사용 중인 품목 삭제 시도",
"description": "다른 BOM에서 구성품으로 사용 중인 품목 삭제 - 400 에러 반환해야 함",
"method": "DELETE",
"endpoint": "/items/{{create_bom_child.bomChildId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["add_bom_component"],
"expect": {
"status": [400],
"jsonPath": {
"$.success": false,
"$.message": "@contains:BOM"
}
}
},
{
"id": "cleanup_bom",
"name": "BOM 구성품 제거",
"description": "테스트 정리 - BOM 구성품 제거",
"method": "DELETE",
"endpoint": "/items/{{create_bom_parent.bomParentId}}/bom",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["delete_bom_used_item_fail"],
"expect": {
"status": [200, 204]
}
},
{
"id": "delete_bom_child_after_cleanup",
"name": "BOM 해제 후 자식 품목 삭제",
"description": "BOM에서 제거된 품목은 삭제 가능해야 함",
"method": "DELETE",
"endpoint": "/items/{{create_bom_child.bomChildId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["cleanup_bom"],
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "cleanup_bom_parent",
"name": "BOM 부모 품목 삭제",
"description": "테스트 정리 - 부모 품목 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_bom_parent.bomParentId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["delete_bom_child_after_cleanup"],
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,172 @@
{
"name": "ItemField is_active 컬럼 검증 테스트",
"description": "item_fields 테이블에 추가된 is_active 컬럼의 기능을 검증합니다. 필드 생성 시 기본값(true), 수정, 조회 시 is_active 필드 포함 여부를 테스트합니다.",
"version": "1.0",
"config": {
"baseUrl": "https://api.sam.kr/api/v1",
"apiKey": "{{$env.FLOW_TESTER_API_KEY}}",
"timeout": 30000,
"stopOnFailure": true
},
"variables": {
"user_id": "{{$env.FLOW_TESTER_USER_ID}}",
"user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인 - 인증 토큰 획득",
"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_fields_list",
"name": "2. 필드 목록 조회 - is_active 필드 포함 확인",
"method": "GET",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data": "@isArray"
}
},
"extract": {
"existingFieldId": "$.data[0].id",
"fieldCount": "$.data.length"
}
},
{
"id": "create_field",
"name": "3. 독립 필드 생성 - is_active 기본값 true 확인",
"method": "POST",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"field_name": "[테스트] is_active 검증 필드",
"field_type": "textbox",
"field_key": "test_is_active",
"is_required": false,
"placeholder": "is_active 기본값 테스트",
"description": "API Flow Tester에서 생성한 테스트 필드"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber",
"$.data.field_name": "[테스트] is_active 검증 필드",
"$.data.is_active": true
}
},
"extract": {
"newFieldId": "$.data.id"
}
},
{
"id": "verify_field_created",
"name": "4. 생성된 필드 상세 확인 - is_active=true",
"method": "GET",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"extract": {
"allFields": "$.data"
}
},
{
"id": "update_field_inactive",
"name": "5. 필드 비활성화 - is_active=false로 수정",
"method": "PUT",
"endpoint": "/item-master/fields/{{create_field.newFieldId}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"is_active": false
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": false
}
}
},
{
"id": "verify_field_inactive",
"name": "6. 비활성화 상태 확인",
"method": "GET",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "update_field_active",
"name": "7. 필드 재활성화 - is_active=true로 수정",
"method": "PUT",
"endpoint": "/item-master/fields/{{create_field.newFieldId}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"is_active": true
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": true
}
}
},
{
"id": "delete_test_field",
"name": "8. 테스트 필드 삭제 (정리)",
"method": "DELETE",
"endpoint": "/item-master/fields/{{create_field.newFieldId}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,241 @@
{
"name": "ItemMaster Field API CRUD Flow Test",
"description": "품목기준관리 필드(Field) 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_field_name": "테스트필드_{{$timestamp}}",
"test_field_key": "test_field_{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_fields",
"name": "2. 독립 필드 목록 조회",
"method": "GET",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_field_textbox",
"name": "3. 독립 필드 생성 (텍스트박스)",
"method": "POST",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"field_name": "{{test_field_name}}",
"field_key": "test_textbox",
"field_type": "textbox",
"is_required": false,
"placeholder": "텍스트를 입력하세요",
"default_value": ""
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"field_id": "$.data.id",
"field_name": "$.data.field_name"
}
},
{
"id": "create_field_dropdown",
"name": "4. 독립 필드 생성 (드롭다운)",
"method": "POST",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"field_name": "{{test_field_name}}_드롭다운",
"field_key": "test_dropdown",
"field_type": "dropdown",
"is_required": true,
"options": [
{"label": "옵션1", "value": "opt1"},
{"label": "옵션2", "value": "opt2"},
{"label": "옵션3", "value": "opt3"}
]
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"dropdown_field_id": "$.data.id"
}
},
{
"id": "update_field",
"name": "5. 필드 수정",
"method": "PUT",
"endpoint": "/item-master/fields/{{create_field_textbox.field_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"field_name": "{{test_field_name}}_수정됨",
"field_key": "test_textbox_updated",
"field_type": "textbox",
"is_required": true,
"placeholder": "필수 입력 필드입니다"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "clone_field",
"name": "6. 필드 복제",
"method": "POST",
"endpoint": "/item-master/fields/{{create_field_textbox.field_id}}/clone",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"cloned_field_id": "$.data.id"
}
},
{
"id": "get_field_usage",
"name": "7. 필드 사용처 조회",
"method": "GET",
"endpoint": "/item-master/fields/{{create_field_textbox.field_id}}/usage",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_fields",
"name": "8. 필드 목록 재조회",
"method": "GET",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_cloned_field",
"name": "9. 복제된 필드 삭제",
"method": "DELETE",
"endpoint": "/item-master/fields/{{clone_field.cloned_field_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_dropdown_field",
"name": "10. 드롭다운 필드 삭제",
"method": "DELETE",
"endpoint": "/item-master/fields/{{create_field_dropdown.dropdown_field_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_original_field",
"name": "11. 원본 필드 삭제",
"method": "DELETE",
"endpoint": "/item-master/fields/{{create_field_textbox.field_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_cleanup",
"name": "12. 정리 확인 - 목록 조회",
"method": "GET",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,511 @@
{
"name": "ItemMaster 전체 API CRUD Flow Test",
"description": "품목기준관리(ItemMaster) 전체 API 테스트 - Init, Pages, Sections, Fields, BomItems 통합 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_page_name": "FlowTest_Page_{{$timestamp}}",
"test_section_title": "FlowTest_Section_{{$timestamp}}",
"test_field_name": "FlowTest_Field_{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "init",
"name": "2. ItemMaster 초기화 데이터 조회",
"method": "GET",
"endpoint": "/item-master/init",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_pages_before",
"name": "3. 페이지 목록 조회 (FG)",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_page",
"name": "4. 페이지 생성 (FG)",
"method": "POST",
"endpoint": "/item-master/pages",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"page_name": "{{test_page_name}}",
"item_type": "FG",
"absolute_path": "/flow-test/fg"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"page_id": "$.data.id"
}
},
{
"id": "update_page",
"name": "5. 페이지 수정",
"method": "PUT",
"endpoint": "/item-master/pages/{{create_page.page_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"page_name": "{{test_page_name}}_수정됨",
"item_type": "FG",
"absolute_path": "/flow-test/fg/updated"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_sections_before",
"name": "6. 독립 섹션 목록 조회",
"method": "GET",
"endpoint": "/item-master/sections",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_independent_section",
"name": "7. 독립 섹션 생성 (fields 타입)",
"method": "POST",
"endpoint": "/item-master/sections",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"title": "{{test_section_title}}",
"type": "fields",
"is_template": false,
"is_default": false,
"description": "Flow Test 독립 섹션"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"section_id": "$.data.id"
}
},
{
"id": "create_page_section",
"name": "8. 페이지에 섹션 생성",
"method": "POST",
"endpoint": "/item-master/pages/{{create_page.page_id}}/sections",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"title": "{{test_section_title}}_페이지연결",
"type": "fields",
"is_default": false
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"page_section_id": "$.data.id"
}
},
{
"id": "update_section",
"name": "9. 섹션 수정",
"method": "PUT",
"endpoint": "/item-master/sections/{{create_page_section.page_section_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"title": "{{test_section_title}}_수정됨",
"type": "fields",
"description": "수정된 섹션 설명"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "section_usage",
"name": "10. 섹션 사용처 조회",
"method": "GET",
"endpoint": "/item-master/sections/{{create_page_section.page_section_id}}/usage",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_fields_before",
"name": "11. 독립 필드 목록 조회",
"method": "GET",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_independent_field",
"name": "12. 독립 필드 생성",
"method": "POST",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"field_name": "{{test_field_name}}",
"field_key": "flow_test_field",
"field_type": "textbox",
"is_required": false,
"placeholder": "테스트 입력",
"is_locked": false
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"field_id": "$.data.id"
}
},
{
"id": "create_section_field",
"name": "13. 섹션에 필드 생성",
"method": "POST",
"endpoint": "/item-master/sections/{{create_page_section.page_section_id}}/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"field_name": "{{test_field_name}}_섹션연결",
"field_key": "flow_test_section_field",
"field_type": "number",
"is_required": true,
"default_value": "0",
"placeholder": "숫자 입력"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"section_field_id": "$.data.id"
}
},
{
"id": "update_field",
"name": "14. 필드 수정",
"method": "PUT",
"endpoint": "/item-master/fields/{{create_section_field.section_field_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"field_name": "{{test_field_name}}_수정됨",
"field_type": "number",
"is_required": false,
"default_value": "100"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "field_usage",
"name": "15. 필드 사용처 조회",
"method": "GET",
"endpoint": "/item-master/fields/{{create_section_field.section_field_id}}/usage",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "clone_field",
"name": "16. 필드 복제",
"method": "POST",
"endpoint": "/item-master/fields/{{create_section_field.section_field_id}}/clone",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"cloned_field_id": "$.data.id"
}
},
{
"id": "clone_section",
"name": "17. 섹션 복제",
"method": "POST",
"endpoint": "/item-master/sections/{{create_page_section.page_section_id}}/clone",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"cloned_section_id": "$.data.id"
}
},
{
"id": "get_page_structure",
"name": "18. 페이지 구조 조회",
"method": "GET",
"endpoint": "/item-master/pages/{{create_page.page_id}}/structure",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "get_page_relationships",
"name": "19. 페이지 관계 조회",
"method": "GET",
"endpoint": "/item-master/pages/{{create_page.page_id}}/relationships",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_cloned_field",
"name": "20. 복제된 필드 삭제",
"method": "DELETE",
"endpoint": "/item-master/fields/{{clone_field.cloned_field_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_section_field",
"name": "21. 섹션 필드 삭제",
"method": "DELETE",
"endpoint": "/item-master/fields/{{create_section_field.section_field_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_independent_field",
"name": "22. 독립 필드 삭제",
"method": "DELETE",
"endpoint": "/item-master/fields/{{create_independent_field.field_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_cloned_section",
"name": "23. 복제된 섹션 삭제",
"method": "DELETE",
"endpoint": "/item-master/sections/{{clone_section.cloned_section_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_page_section",
"name": "24. 페이지 섹션 삭제",
"method": "DELETE",
"endpoint": "/item-master/sections/{{create_page_section.page_section_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_independent_section",
"name": "25. 독립 섹션 삭제",
"method": "DELETE",
"endpoint": "/item-master/sections/{{create_independent_section.section_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_page",
"name": "26. 페이지 삭제",
"method": "DELETE",
"endpoint": "/item-master/pages/{{create_page.page_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_cleanup",
"name": "27. 정리 확인 - 페이지 목록 재조회",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,197 @@
{
"name": "ItemMaster Init & Structure API Flow Test",
"description": "품목기준관리 초기화 및 구조 조회 API 테스트 - 로그인, 초기화, 페이지구조조회",
"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": "1. 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "init",
"name": "2. ItemMaster 초기화 데이터 조회",
"method": "GET",
"endpoint": "/item-master/init",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_pages_fg",
"name": "3. 페이지 목록 조회 (완제품 FG)",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"extract": {
"fg_pages": "$.data"
}
},
{
"id": "list_pages_sm",
"name": "4. 페이지 목록 조회 (부자재 SM)",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "SM"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_pages_rm",
"name": "5. 페이지 목록 조회 (원자재 RM)",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "RM"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_sections",
"name": "6. 독립 섹션 목록 조회",
"method": "GET",
"endpoint": "/item-master/sections",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_fields",
"name": "7. 독립 필드 목록 조회",
"method": "GET",
"endpoint": "/item-master/fields",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_bom_items",
"name": "8. BOM 항목 목록 조회",
"method": "GET",
"endpoint": "/item-master/bom-items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_section_templates",
"name": "9. 섹션 템플릿 목록 조회",
"method": "GET",
"endpoint": "/item-master/section-templates",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_custom_tabs",
"name": "10. 커스텀 탭 목록 조회",
"method": "GET",
"endpoint": "/item-master/custom-tabs",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_unit_options",
"name": "11. 단위 옵션 목록 조회",
"method": "GET",
"endpoint": "/item-master/unit-options",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,157 @@
{
"name": "품목기준관리 통합 테스트",
"description": "품목기준관리 API의 전체 CRUD 플로우를 테스트합니다.",
"version": "1.0",
"config": {
"apiKey": "42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a",
"baseUrl": "https://api.sam.kr/api/v1",
"timeout": 30000,
"stopOnFailure": true
},
"variables": {
"user_id": "codebridgex",
"user_pwd": "code1234",
"testItemCode": "TEST-ITEM-{{$timestamp}}",
"testItemName": "테스트 품목",
"testItemSpec": "100x100x10",
"updatedItemName": "수정된 테스트 품목",
"updatedItemSpec": "200x200x20"
},
"steps": [
{
"id": "login",
"name": "로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{variables.user_id}}",
"user_pwd": "{{variables.user_pwd}}"
},
"extract": {
"accessToken": "$.access_token"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
}
},
{
"id": "create_item",
"name": "품목 생성",
"method": "POST",
"endpoint": "/item-master-data",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"body": {
"item_code": "{{variables.testItemCode}}",
"item_name": "{{variables.testItemName}}",
"item_spec": "{{variables.testItemSpec}}",
"item_type": "PRODUCT",
"unit": "EA",
"is_active": true
},
"dependsOn": ["login"],
"extract": {
"createdItemId": "$.data.id",
"createdItemCode": "$.data.item_code"
},
"expect": {
"status": [201],
"jsonPath": {
"$.data.id": "@exists"
}
}
},
{
"id": "get_item",
"name": "품목 단건 조회",
"method": "GET",
"endpoint": "/item-master-data/{{create_item.createdItemId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["create_item"],
"expect": {
"status": [200],
"jsonPath": {
"$.data.id": "@exists"
}
}
},
{
"id": "list_items",
"name": "품목 목록 조회",
"method": "GET",
"endpoint": "/item-master-data",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["create_item"],
"expect": {
"status": [200],
"jsonPath": {
"$.data": "@isArray"
}
}
},
{
"id": "update_item",
"name": "품목 수정",
"method": "PUT",
"endpoint": "/item-master-data/{{create_item.createdItemId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"body": {
"item_name": "{{variables.updatedItemName}}",
"item_spec": "{{variables.updatedItemSpec}}"
},
"dependsOn": ["get_item"],
"expect": {
"status": [200]
}
},
{
"id": "verify_update",
"name": "수정 확인",
"method": "GET",
"endpoint": "/item-master-data/{{create_item.createdItemId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["update_item"],
"expect": {
"status": [200]
}
},
{
"id": "delete_item",
"name": "품목 삭제",
"method": "DELETE",
"endpoint": "/item-master-data/{{create_item.createdItemId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["verify_update"],
"expect": {
"status": [200]
}
},
{
"id": "verify_delete",
"name": "삭제 확인",
"method": "GET",
"endpoint": "/item-master-data/{{create_item.createdItemId}}",
"headers": {
"Authorization": "Bearer {{login.accessToken}}"
},
"dependsOn": ["delete_item"],
"expect": {
"status": [404]
}
}
]
}

View File

@@ -0,0 +1,168 @@
{
"name": "ItemMaster Page API CRUD Flow Test",
"description": "품목기준관리 페이지(Page) 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_page_name": "테스트페이지_{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_pages",
"name": "2. 페이지 목록 조회 (FG 타입)",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_page",
"name": "3. 페이지 생성 (완제품 FG)",
"method": "POST",
"endpoint": "/item-master/pages",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"page_name": "{{test_page_name}}",
"item_type": "FG",
"absolute_path": "/products/finished"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"page_id": "$.data.id",
"page_name": "$.data.page_name"
}
},
{
"id": "verify_create",
"name": "4. 생성 확인 - 목록에서 조회",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "update_page",
"name": "5. 페이지 수정",
"method": "PUT",
"endpoint": "/item-master/pages/{{create_page.page_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"page_name": "{{test_page_name}}_수정됨",
"item_type": "FG",
"absolute_path": "/products/finished/updated"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_update",
"name": "6. 수정 확인 - 목록에서 조회",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_page",
"name": "7. 페이지 삭제",
"method": "DELETE",
"endpoint": "/item-master/pages/{{create_page.page_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_delete",
"name": "8. 삭제 확인 - 목록에서 조회",
"method": "GET",
"endpoint": "/item-master/pages",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,506 @@
{
"name": "Items BOM API CRUD Flow Test",
"description": "품목 BOM(Bill of Materials) 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_code": "BOMTEST-{{$timestamp}}",
"test_name": "BOM테스트_{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "create_parent_item",
"name": "2. 부모 품목(FG) 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"code": "{{test_code}}-PARENT",
"name": "{{test_name}}_부모품목",
"product_type": "FG",
"unit": "EA",
"description": "BOM 테스트용 부모 품목",
"is_sellable": true,
"is_producible": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"parent_id": "$.data.id"
}
},
{
"id": "create_child_item_1",
"name": "3. 자식 품목 1(PT) 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"code": "{{test_code}}-CHILD1",
"name": "{{test_name}}_자식1",
"product_type": "PT",
"unit": "EA",
"description": "BOM 테스트용 자식 품목 1"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"child1_id": "$.data.id"
}
},
{
"id": "create_child_item_2",
"name": "4. 자식 품목 2(RM) 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"code": "{{test_code}}-CHILD2",
"name": "{{test_name}}_자식2",
"product_type": "RM",
"unit": "KG",
"description": "BOM 테스트용 자식 품목 2 (원자재)"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"child2_id": "$.data.id"
}
},
{
"id": "create_child_item_3",
"name": "5. 자식 품목 3(SM) 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"code": "{{test_code}}-CHILD3",
"name": "{{test_name}}_자식3",
"product_type": "SM",
"unit": "EA",
"description": "BOM 테스트용 자식 품목 3 (부자재)"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"child3_id": "$.data.id"
}
},
{
"id": "bom_list_empty",
"name": "6. BOM 목록 조회 (빈 상태)",
"method": "GET",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_add_items",
"name": "7. BOM 라인 추가 (Bulk)",
"method": "POST",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"items": [
{
"ref_id": "{{create_child_item_1.child1_id}}",
"ref_type": "PRODUCT",
"quantity": 2,
"unit": "EA",
"waste_rate": 0.05,
"remarks": "반제품 2개 필요"
},
{
"ref_id": "{{create_child_item_2.child2_id}}",
"ref_type": "MATERIAL",
"quantity": 5.5,
"unit": "KG",
"waste_rate": 0.1,
"remarks": "원자재 5.5kg 필요"
}
]
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.created": "@isNumber"
}
}
},
{
"id": "bom_list_after_add",
"name": "8. BOM 목록 조회 (추가 후)",
"method": "GET",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data": "@isArray"
}
},
"extract": {
"bom_line_id_1": "$.data.0.id",
"bom_line_id_2": "$.data.1.id"
}
},
{
"id": "bom_tree",
"name": "9. BOM 트리 구조 조회",
"method": "GET",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom/tree",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_summary",
"name": "10. BOM 요약 정보 조회",
"method": "GET",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom/summary",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_validate",
"name": "11. BOM 유효성 검사",
"method": "GET",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom/validate",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_categories",
"name": "12. BOM 카테고리 목록 조회",
"method": "GET",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom/categories",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_update_line",
"name": "13. BOM 라인 수정",
"method": "PUT",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom/{{bom_list_after_add.bom_line_id_1}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"quantity": 3,
"waste_rate": 0.08,
"remarks": "수량 3개로 수정"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_add_more",
"name": "14. BOM 라인 추가 (3번째 자식)",
"method": "POST",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"items": [
{
"ref_id": "{{create_child_item_3.child3_id}}",
"ref_type": "MATERIAL",
"quantity": 10,
"unit": "EA",
"remarks": "부자재 10개 추가"
}
]
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_list_after_update",
"name": "15. BOM 목록 재조회 (수정/추가 후)",
"method": "GET",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"extract": {
"bom_line_id_3": "$.data.2.id"
}
},
{
"id": "bom_reorder",
"name": "16. BOM 정렬 변경",
"method": "POST",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom/reorder",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"items": [
{"id": "{{bom_list_after_add.bom_line_id_1}}", "sort_order": 3},
{"id": "{{bom_list_after_update.bom_line_id_3}}", "sort_order": 1}
]
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_delete_line",
"name": "17. BOM 라인 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom/{{bom_list_after_update.bom_line_id_3}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_replace",
"name": "18. BOM 전체 교체",
"method": "POST",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom/replace",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"items": [
{
"ref_id": "{{create_child_item_1.child1_id}}",
"ref_type": "PRODUCT",
"quantity": 5,
"unit": "EA",
"remarks": "교체된 BOM - 반제품"
}
]
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bom_list_after_replace",
"name": "19. BOM 목록 조회 (교체 후)",
"method": "GET",
"endpoint": "/items/{{create_parent_item.parent_id}}/bom",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_child3",
"name": "20. 자식 품목 3 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_child_item_3.child3_id}}",
"params": {
"item_type": "SM"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_child2",
"name": "21. 자식 품목 2 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_child_item_2.child2_id}}",
"params": {
"item_type": "RM"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_child1",
"name": "22. 자식 품목 1 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_child_item_1.child1_id}}",
"params": {
"item_type": "PT"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_parent",
"name": "23. 부모 품목 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_parent_item.parent_id}}",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_cleanup",
"name": "24. 정리 확인 - 품목 검색",
"method": "GET",
"endpoint": "/items",
"params": {
"q": "BOMTEST",
"size": "20"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,108 @@
{
"name": "Items BOM 데이터 조회 테스트",
"description": "GET /items/{id} 호출 시 BOM 데이터가 확장되어 반환되는지 테스트 (child_item_code, child_item_name, unit 포함)",
"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_item_id": "818",
"test_item_type": "FG"
},
"steps": [
{
"id": "login",
"name": "로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "get_items_list",
"name": "품목 목록 조회 (FG/PT 타입)",
"method": "GET",
"endpoint": "/items?type=FG,PT&size=10",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "get_item_detail",
"name": "품목 상세 조회 (BOM 확장 확인)",
"method": "GET",
"endpoint": "/items/{{test_item_id}}?item_type={{test_item_type}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber",
"$.data.item_type": "@isString",
"$.data.code": "@isString",
"$.data.name": "@isString"
}
},
"extract": {
"item_id": "$.data.id",
"item_code": "$.data.code",
"item_bom": "$.data.bom"
}
},
{
"id": "get_item_bom_api",
"name": "Items BOM API 조회",
"description": "GET /items/{id}/bom 엔드포인트 테스트",
"method": "GET",
"endpoint": "/items/{{test_item_id}}/bom",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "get_item_bom_tree",
"name": "Items BOM 트리 조회",
"description": "GET /items/{id}/bom/tree 엔드포인트 테스트",
"method": "GET",
"endpoint": "/items/{{test_item_id}}/bom/tree",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,375 @@
{
"name": "Items API CRUD Flow Test",
"description": "통합 품목(Items) 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_code": "FLOWTEST-{{$timestamp}}",
"test_name": "플로우테스트_품목_{{$timestamp}}"
},
"steps": [
{
"id": "login",
"name": "1. 로그인",
"method": "POST",
"endpoint": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_items_before",
"name": "2. 품목 목록 조회 (전체)",
"method": "GET",
"endpoint": "/items",
"params": {
"size": "20"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "list_items_fg",
"name": "3. 품목 목록 조회 (FG 필터)",
"method": "GET",
"endpoint": "/items",
"params": {
"type": "FG",
"size": "10"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_item_fg",
"name": "4. 완제품(FG) 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"code": "{{test_code}}-FG",
"name": "{{test_name}}_완제품",
"product_type": "FG",
"unit": "EA",
"description": "Flow Test 완제품",
"is_sellable": true,
"is_purchasable": false,
"is_producible": true,
"safety_stock": 10,
"lead_time": 5
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"fg_id": "$.data.id",
"fg_code": "$.data.code"
}
},
{
"id": "create_item_pt",
"name": "5. 반제품(PT) 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"code": "{{test_code}}-PT",
"name": "{{test_name}}_반제품",
"product_type": "PT",
"unit": "EA",
"description": "Flow Test 반제품",
"is_sellable": false,
"is_purchasable": false,
"is_producible": true,
"safety_stock": 20
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"pt_id": "$.data.id"
}
},
{
"id": "create_item_rm",
"name": "6. 원자재(RM) 생성",
"method": "POST",
"endpoint": "/items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"code": "{{test_code}}-RM",
"name": "{{test_name}}_원자재",
"product_type": "RM",
"unit": "KG",
"description": "Flow Test 원자재",
"is_sellable": false,
"is_purchasable": true,
"is_producible": false,
"material_code": "MAT-{{$timestamp}}",
"specification": "100mm x 50mm",
"is_inspection": "Y"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"rm_id": "$.data.id"
}
},
{
"id": "show_item_fg",
"name": "7. 완제품(FG) 단건 조회",
"method": "GET",
"endpoint": "/items/{{create_item_fg.fg_id}}",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
}
},
{
"id": "show_item_by_code",
"name": "8. Code 기반 품목 조회",
"method": "GET",
"endpoint": "/items/code/{{create_item_fg.fg_code}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "show_item_with_price",
"name": "9. 단가 포함 품목 조회",
"method": "GET",
"endpoint": "/items/{{create_item_fg.fg_id}}",
"params": {
"item_type": "FG",
"include_price": "true"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "update_item_fg",
"name": "10. 완제품(FG) 수정",
"method": "PUT",
"endpoint": "/items/{{create_item_fg.fg_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type": "FG",
"name": "{{test_name}}_완제품_수정됨",
"description": "Flow Test 완제품 - 수정됨",
"safety_stock": 15,
"lead_time": 7
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "update_item_rm",
"name": "11. 원자재(RM) 수정",
"method": "PUT",
"endpoint": "/items/{{create_item_rm.rm_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type": "RM",
"name": "{{test_name}}_원자재_수정됨",
"specification": "150mm x 75mm",
"remarks": "수정된 원자재 비고"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_update",
"name": "12. 수정 확인 - 단건 재조회",
"method": "GET",
"endpoint": "/items/{{create_item_fg.fg_id}}",
"params": {
"item_type": "FG"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "search_items",
"name": "13. 품목 검색 (키워드)",
"method": "GET",
"endpoint": "/items",
"params": {
"q": "플로우테스트",
"size": "20"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_item_pt",
"name": "14. 반제품(PT) 단건 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_item_pt.pt_id}}",
"params": {
"item_type": "PT"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "batch_delete_items",
"name": "15. 품목 일괄 삭제 (FG, RM)",
"method": "DELETE",
"endpoint": "/items/batch",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type": "FG",
"ids": ["{{create_item_fg.fg_id}}"]
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "delete_item_rm",
"name": "16. 원자재(RM) 삭제",
"method": "DELETE",
"endpoint": "/items/{{create_item_rm.rm_id}}",
"params": {
"item_type": "RM"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_cleanup",
"name": "17. 정리 확인 - 목록 재조회",
"method": "GET",
"endpoint": "/items",
"params": {
"q": "FLOWTEST",
"size": "20"
},
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,254 @@
{
"name": "알림 설정 조회/수정 플로우",
"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": "/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_settings",
"name": "알림 설정 조회 (그룹 기반)",
"method": "GET",
"endpoint": "/api/v1/settings/notifications",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"extract": {
"original_notice_enabled": "$.data.notice.enabled",
"original_approval_enabled": "$.data.approval.enabled"
}
},
{
"id": "update_notice_group",
"name": "공지사항 그룹 설정 수정",
"method": "PUT",
"endpoint": "/api/v1/settings/notifications",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"notice": {
"enabled": true,
"notice": {
"enabled": true,
"email": true
},
"event": {
"enabled": true,
"email": false
}
}
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_notice_update",
"name": "공지사항 설정 변경 확인",
"method": "GET",
"endpoint": "/api/v1/settings/notifications",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.notice.enabled": true
}
}
},
{
"id": "update_approval_group",
"name": "결재 그룹 설정 수정",
"method": "PUT",
"endpoint": "/api/v1/settings/notifications",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"approval": {
"enabled": true,
"approvalRequest": {
"enabled": true,
"email": true
},
"draftApproved": {
"enabled": true,
"email": false
},
"draftRejected": {
"enabled": true,
"email": true
},
"draftCompleted": {
"enabled": false,
"email": false
}
}
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "update_multiple_groups",
"name": "여러 그룹 동시 수정",
"method": "PUT",
"endpoint": "/api/v1/settings/notifications",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"order": {
"enabled": true,
"salesOrder": {
"enabled": true,
"email": false
},
"purchaseOrder": {
"enabled": true,
"email": false
}
},
"production": {
"enabled": false,
"safetyStock": {
"enabled": false,
"email": false
},
"productionComplete": {
"enabled": false,
"email": false
}
}
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "get_flat_settings",
"name": "플랫 구조 알림 설정 조회",
"method": "GET",
"endpoint": "/api/v1/users/me/notification-settings",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "update_single_type",
"name": "단일 알림 유형 수정 (플랫)",
"method": "PUT",
"endpoint": "/api/v1/users/me/notification-settings",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"notification_type": "approval",
"push_enabled": true,
"email_enabled": false,
"sms_enabled": false,
"in_app_enabled": true
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "bulk_update",
"name": "일괄 업데이트 (플랫)",
"method": "PUT",
"endpoint": "/api/v1/users/me/notification-settings/bulk",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"settings": [
{
"notification_type": "order",
"push_enabled": true,
"email_enabled": false
},
{
"notification_type": "deposit",
"push_enabled": true,
"email_enabled": true
}
]
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "final_verify",
"name": "최종 설정 확인",
"method": "GET",
"endpoint": "/api/v1/settings/notifications",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}

View File

@@ -0,0 +1,260 @@
{
"name": "결제 관리 플로우",
"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": "/api/v1/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_payments",
"name": "결제 목록 조회",
"method": "GET",
"endpoint": "/api/v1/payments",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"queryParams": {
"page": 1,
"per_page": 10
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_payment",
"name": "결제 등록",
"method": "POST",
"endpoint": "/api/v1/payments",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"subscription_id": 1,
"amount": 99000,
"payment_method": "card",
"billing_name": "테스트 결제",
"billing_email": "test@example.com"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"payment_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "get_payment_detail",
"name": "결제 상세 조회",
"method": "GET",
"endpoint": "/api/v1/payments/{{create_payment.payment_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"continueOnFailure": true
},
{
"id": "complete_payment",
"name": "결제 완료 처리",
"method": "POST",
"endpoint": "/api/v1/payments/{{create_payment.payment_id}}/complete",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"transaction_id": "TXN_{{$timestamp}}",
"pg_response": {
"code": "0000",
"message": "성공"
}
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "verify_completed",
"name": "완료 상태 확인",
"method": "GET",
"endpoint": "/api/v1/payments/{{create_payment.payment_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.status": "completed"
}
},
"continueOnFailure": true
},
{
"id": "get_statement",
"name": "결제 명세서 조회",
"method": "GET",
"endpoint": "/api/v1/payments/{{create_payment.payment_id}}/statement",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "cancel_payment",
"name": "결제 취소 요청",
"method": "POST",
"endpoint": "/api/v1/payments/{{create_payment.payment_id}}/cancel",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"reason": "테스트 취소",
"cancel_type": "full"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "create_payment_for_refund",
"name": "환불 테스트용 결제 등록",
"method": "POST",
"endpoint": "/api/v1/payments",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"subscription_id": 1,
"amount": 50000,
"payment_method": "card",
"billing_name": "환불 테스트",
"billing_email": "refund@example.com"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"refund_payment_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "complete_refund_payment",
"name": "환불 테스트용 결제 완료",
"method": "POST",
"endpoint": "/api/v1/payments/{{create_payment_for_refund.refund_payment_id}}/complete",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"transaction_id": "TXN_REFUND_{{$timestamp}}",
"pg_response": {
"code": "0000",
"message": "성공"
}
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "request_refund",
"name": "환불 요청",
"method": "POST",
"endpoint": "/api/v1/payments/{{create_payment_for_refund.refund_payment_id}}/refund",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"refund_amount": 50000,
"reason": "테스트 환불",
"refund_method": "original"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "verify_refunded",
"name": "환불 상태 확인",
"method": "GET",
"endpoint": "/api/v1/payments/{{create_payment_for_refund.refund_payment_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.status": "refunded"
}
},
"continueOnFailure": true
}
]
}

View File

@@ -0,0 +1,188 @@
{
"name": "팝업 관리 플로우",
"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": "/api/v1/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_popups",
"name": "팝업 목록 조회",
"method": "GET",
"endpoint": "/api/v1/popups",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"queryParams": {
"page": 1,
"per_page": 10
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_popup",
"name": "팝업 등록",
"method": "POST",
"endpoint": "/api/v1/popups",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"title": "Flow 테스트 팝업",
"content": "<p>테스트용 팝업 콘텐츠입니다.</p>",
"popup_type": "notice",
"position": "center",
"width": 500,
"height": 400,
"start_at": "2025-01-01T00:00:00Z",
"end_at": "2025-12-31T23:59:59Z",
"is_active": true,
"show_today_close": true,
"target_pages": ["dashboard", "main"]
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"popup_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "get_popup_detail",
"name": "팝업 상세 조회",
"method": "GET",
"endpoint": "/api/v1/popups/{{create_popup.popup_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"continueOnFailure": true
},
{
"id": "get_active_popups",
"name": "활성 팝업 목록 조회",
"description": "현재 표시 중인 팝업 목록",
"method": "GET",
"endpoint": "/api/v1/popups/active",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"queryParams": {
"page": "dashboard"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "update_popup",
"name": "팝업 수정",
"method": "PUT",
"endpoint": "/api/v1/popups/{{create_popup.popup_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"title": "Flow 테스트 팝업 (수정됨)",
"is_active": false
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "verify_inactive",
"name": "비활성 상태 확인",
"method": "GET",
"endpoint": "/api/v1/popups/{{create_popup.popup_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.is_active": false
}
},
"continueOnFailure": true
},
{
"id": "delete_popup",
"name": "팝업 삭제",
"method": "DELETE",
"endpoint": "/api/v1/popups/{{create_popup.popup_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "verify_deleted",
"name": "삭제 확인",
"method": "GET",
"endpoint": "/api/v1/popups/{{create_popup.popup_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [404]
},
"continueOnFailure": true
}
]
}

View File

@@ -0,0 +1,277 @@
{
"name": "단가 관리 CRUD 테스트",
"description": "단가(Pricing) API의 생성, 조회, 수정, 확정, 삭제 전체 플로우 테스트",
"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": "list_prices",
"name": "단가 목록 조회",
"method": "GET",
"endpoint": "/pricing",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"query": {
"per_page": 10,
"page": 1
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.data": "@isArray"
}
}
},
{
"id": "create_price",
"name": "단가 생성 (MATERIAL)",
"method": "POST",
"endpoint": "/pricing",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type_code": "MATERIAL",
"item_id": 1,
"client_group_id": null,
"purchase_price": 10000,
"processing_cost": 500,
"loss_rate": 5,
"margin_rate": 20,
"sales_price": 12600,
"rounding_rule": "round",
"rounding_unit": 100,
"supplier": "테스트 공급업체",
"effective_from": "2025-01-01",
"effective_to": "2025-12-31",
"note": "API Flow 테스트용 단가",
"status": "draft"
},
"expect": {
"status": [201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber",
"$.data.item_type_code": "MATERIAL",
"$.data.purchase_price": 10000,
"$.data.status": "draft"
}
},
"extract": {
"price_id": "$.data.id"
}
},
{
"id": "show_price",
"name": "생성된 단가 상세 조회",
"method": "GET",
"endpoint": "/pricing/{{create_price.price_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "{{create_price.price_id}}",
"$.data.item_type_code": "MATERIAL",
"$.data.supplier": "테스트 공급업체"
}
}
},
{
"id": "update_price",
"name": "단가 수정 (가격 변경)",
"method": "PUT",
"endpoint": "/pricing/{{create_price.price_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"purchase_price": 11000,
"processing_cost": 600,
"margin_rate": 25,
"sales_price": 14500,
"note": "단가 수정 테스트",
"change_reason": "원가 인상으로 인한 가격 조정",
"status": "active"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.purchase_price": 11000,
"$.data.processing_cost": 600,
"$.data.status": "active"
}
}
},
{
"id": "get_revisions",
"name": "변경 이력 조회",
"method": "GET",
"endpoint": "/pricing/{{create_price.price_id}}/revisions",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data": "@isArray"
}
}
},
{
"id": "get_cost",
"name": "원가 조회 (receipt > standard 폴백)",
"method": "GET",
"endpoint": "/pricing/cost",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"query": {
"item_type_code": "MATERIAL",
"item_id": 1,
"date": "2025-06-15"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.item_type_code": "MATERIAL",
"$.data.item_id": 1
}
}
},
{
"id": "by_items",
"name": "다중 품목 단가 조회",
"method": "POST",
"endpoint": "/pricing/by-items",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"items": [
{
"item_type_code": "MATERIAL",
"item_id": 1
}
],
"date": "2025-06-15"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data": "@isArray"
}
}
},
{
"id": "create_price_for_finalize",
"name": "확정 테스트용 단가 생성",
"method": "POST",
"endpoint": "/pricing",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type_code": "PRODUCT",
"item_id": 1,
"purchase_price": 50000,
"sales_price": 70000,
"effective_from": "2025-01-01",
"status": "active"
},
"expect": {
"status": [201],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"finalize_price_id": "$.data.id"
}
},
{
"id": "finalize_price",
"name": "가격 확정 (불변 처리)",
"method": "POST",
"endpoint": "/pricing/{{create_price_for_finalize.finalize_price_id}}/finalize",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.status": "finalized",
"$.data.is_final": true
}
}
},
{
"id": "delete_price",
"name": "단가 삭제 (soft delete)",
"method": "DELETE",
"endpoint": "/pricing/{{create_price.price_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_deleted",
"name": "삭제된 단가 조회 시 404 확인",
"method": "GET",
"endpoint": "/pricing/{{create_price.price_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [404],
"jsonPath": {
"$.success": false
}
}
}
]
}

View File

@@ -0,0 +1,138 @@
{
"name": "Pricing API Validation Test",
"description": "단가 API validation 테스트 - item_type_code common_codes 검증, margin_rate 100% 초과 허용 확인",
"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": "/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "test_valid_item_type",
"name": "2. 유효한 item_type_code 테스트 (PT)",
"description": "common_codes에 있는 PT 코드로 단가 등록",
"method": "POST",
"endpoint": "/pricing",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type_code": "PT",
"item_id": 1,
"purchase_price": 10000,
"margin_rate": 150,
"sales_price": 25000,
"effective_from": "2025-01-01"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"priceId": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "test_invalid_item_type",
"name": "3. 잘못된 item_type_code 테스트",
"description": "common_codes에 없는 코드로 422 에러 확인",
"method": "POST",
"endpoint": "/pricing",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type_code": "INVALID_CODE",
"item_id": 1,
"effective_from": "2025-01-01"
},
"expect": {
"status": [422],
"jsonPath": {
"$.success": false
}
},
"continueOnFailure": true
},
{
"id": "test_high_margin_rate",
"name": "4. 100% 초과 마진율 테스트 (900%)",
"description": "margin_rate 900% 허용 확인",
"method": "POST",
"endpoint": "/pricing",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"item_type_code": "FG",
"item_id": 2,
"purchase_price": 5000,
"margin_rate": 900,
"effective_from": "2025-01-01"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"priceId2": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "cleanup1",
"name": "5. 테스트 데이터 정리 (1)",
"method": "DELETE",
"endpoint": "/pricing/{{test_valid_item_type.priceId}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 204, 404]
},
"continueOnFailure": true
},
{
"id": "cleanup2",
"name": "6. 테스트 데이터 정리 (2)",
"method": "DELETE",
"endpoint": "/pricing/{{test_high_margin_rate.priceId2}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200, 204, 404]
},
"continueOnFailure": true
}
]
}

View File

@@ -0,0 +1,201 @@
{
"name": "매출 명세서 플로우",
"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": "/api/v1/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_sales",
"name": "매출 목록 조회",
"method": "GET",
"endpoint": "/api/v1/sales",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"queryParams": {
"page": 1,
"per_page": 10
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"extract": {
"first_sale_id": "$.data.data[0].id"
}
},
{
"id": "get_sale_detail",
"name": "매출 상세 조회",
"method": "GET",
"endpoint": "/api/v1/sales/{{list_sales.first_sale_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"extract": {
"sale_data": "$.data"
},
"continueOnFailure": true
},
{
"id": "create_sale",
"name": "매출 등록",
"method": "POST",
"endpoint": "/api/v1/sales",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"client_id": 1,
"sale_date": "2025-01-15",
"due_date": "2025-02-15",
"items": [
{
"product_id": 1,
"quantity": 10,
"unit_price": 50000,
"description": "테스트 상품"
}
],
"memo": "Flow 테스트용 매출"
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"new_sale_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "get_statement",
"name": "매출 명세서 조회",
"method": "GET",
"endpoint": "/api/v1/sales/{{create_sale.new_sale_id}}/statement",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "confirm_sale",
"name": "매출 확정",
"method": "POST",
"endpoint": "/api/v1/sales/{{create_sale.new_sale_id}}/confirm",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"confirmed_at": "2025-01-15T10:00:00Z"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "send_statement",
"name": "명세서 발송",
"method": "POST",
"endpoint": "/api/v1/sales/{{create_sale.new_sale_id}}/send",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"send_type": "email",
"recipient_email": "test@example.com",
"message": "매출 명세서를 발송합니다."
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "update_sale",
"name": "매출 수정",
"method": "PUT",
"endpoint": "/api/v1/sales/{{create_sale.new_sale_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"memo": "Flow 테스트 - 수정됨"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "delete_sale",
"name": "매출 삭제",
"method": "DELETE",
"endpoint": "/api/v1/sales/{{create_sale.new_sale_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
}
]
}

View File

@@ -0,0 +1,260 @@
{
"name": "구독 관리 플로우",
"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": "/api/v1/login",
"body": {
"user_id": "{{user_id}}",
"user_pwd": "{{user_pwd}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.access_token": "@isString"
}
},
"extract": {
"token": "$.access_token"
}
},
{
"id": "list_subscriptions",
"name": "구독 목록 조회",
"method": "GET",
"endpoint": "/api/v1/subscriptions",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"queryParams": {
"page": 1,
"per_page": 10
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "create_subscription",
"name": "구독 등록",
"method": "POST",
"endpoint": "/api/v1/subscriptions",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"plan_id": 1,
"billing_cycle": "monthly",
"start_date": "2025-01-01",
"payment_method": "card",
"auto_renew": true
},
"expect": {
"status": [200, 201],
"jsonPath": {
"$.success": true
}
},
"extract": {
"subscription_id": "$.data.id"
},
"continueOnFailure": true
},
{
"id": "get_subscription_detail",
"name": "구독 상세 조회",
"method": "GET",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.id": "@isNumber"
}
},
"continueOnFailure": true
},
{
"id": "get_usage",
"name": "사용량 조회",
"method": "GET",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}/usage",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"queryParams": {
"period": "current"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "suspend_subscription",
"name": "구독 일시 정지",
"method": "POST",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}/suspend",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"reason": "테스트용 일시 정지"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "verify_suspended",
"name": "정지 상태 확인",
"method": "GET",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.status": "suspended"
}
},
"continueOnFailure": true
},
{
"id": "resume_subscription",
"name": "구독 재개",
"method": "POST",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}/resume",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "renew_subscription",
"name": "구독 갱신",
"method": "POST",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}/renew",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"extend_months": 1
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "update_subscription",
"name": "구독 수정",
"method": "PUT",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"auto_renew": false
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "export_usage",
"name": "사용량 내역 내보내기",
"method": "GET",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}/export",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"queryParams": {
"format": "xlsx",
"period": "last_month"
},
"expect": {
"status": [200]
},
"continueOnFailure": true
},
{
"id": "cancel_subscription",
"name": "구독 해지",
"method": "POST",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}/cancel",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"reason": "테스트 완료",
"cancel_immediately": true
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
},
"continueOnFailure": true
},
{
"id": "verify_cancelled",
"name": "해지 상태 확인",
"method": "GET",
"endpoint": "/api/v1/subscriptions/{{create_subscription.subscription_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.status": "cancelled"
}
},
"continueOnFailure": true
}
]
}

View File

@@ -0,0 +1,125 @@
{
"name": "사용자 초대 CRUD 플로우",
"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}}",
"test_email": "flowtest_invite_{{$timestamp}}@example.com"
},
"steps": [
{
"id": "login",
"name": "로그인",
"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": "invite_user",
"name": "사용자 초대 발송 (role=user)",
"method": "POST",
"endpoint": "/api/v1/users/invite",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"body": {
"email": "{{test_email}}",
"role": "user",
"message": "SAM 시스템에 합류해 주세요!"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.status": "pending",
"$.data.email": "@isString"
}
},
"extract": {
"invitation_id": "$.data.id",
"invitation_token": "$.data.token",
"invited_email": "$.data.email"
}
},
{
"id": "list_pending",
"name": "대기 중 초대 목록 조회",
"method": "GET",
"endpoint": "/api/v1/users/invitations?status=pending&per_page=10",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.data": "@isArray"
}
}
},
{
"id": "resend_invitation",
"name": "초대 재발송",
"method": "POST",
"endpoint": "/api/v1/users/invitations/{{invite_user.invitation_id}}/resend",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true,
"$.data.status": "pending"
}
}
},
{
"id": "cancel_invitation",
"name": "초대 취소",
"method": "DELETE",
"endpoint": "/api/v1/users/invitations/{{invite_user.invitation_id}}",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
},
{
"id": "verify_cancelled",
"name": "취소된 초대 목록 확인",
"method": "GET",
"endpoint": "/api/v1/users/invitations?status=cancelled&per_page=10",
"headers": {
"Authorization": "Bearer {{login.token}}"
},
"expect": {
"status": [200],
"jsonPath": {
"$.success": true
}
}
}
]
}