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